From dc50562f22bc4b9d5c2a7d99800d684d816127b3 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Fri, 22 Dec 2023 15:23:24 +0800 Subject: [PATCH] feat: support configurable timezone --- config.docker.yaml | 1 + docker-entrypoint.sh | 1 + internal/model/config.go | 1 + internal/repo/db/pg.go | 5 +++-- internal/web/router/router.go | 2 +- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/config.docker.yaml b/config.docker.yaml index 7191a4a..2eecdd0 100644 --- a/config.docker.yaml +++ b/config.docker.yaml @@ -21,6 +21,7 @@ Database: MaxOpenConns: ${DATABASE_MAX_OPEN_CONNS} MaxIdleConns: ${DATABASE_MAX_IDLE_CONNS} ConnMaxLifetime: ${DATABASE_CONN_MAX_LIFETIME} + TimeZone: ${DATABASE_TIMEZONE} Storage: Endpoint: ${STORAGE_ENDPOINT} diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 69d048e..870c55d 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -54,6 +54,7 @@ check_env "DATABASE_PREFIX" "oj_" true check_env "DATABASE_MAX_OPEN_CONNS" 100 false check_env "DATABASE_MAX_IDLE_CONNS" 60 false check_env "DATABASE_CONN_MAX_LIFETIME" 60 false +check_env "DATABASE_TIMEZONE" "Asia/Shanghai" true check_env "STORAGE_ENDPOINT" "minio:9000" true check_env "STORAGE_USE_SSL" "false" false diff --git a/internal/model/config.go b/internal/model/config.go index 7027ab3..ddf1393 100644 --- a/internal/model/config.go +++ b/internal/model/config.go @@ -25,6 +25,7 @@ type ConfigDatabase struct { MaxOpenConns int `yaml:"MaxOpenConns"` MaxIdleConns int `yaml:"MaxIdleConns"` ConnMaxLifetime int `yaml:"ConnMaxLifetime"` + TimeZone string `yaml:"TimeZone"` } type ConfigStorage struct { diff --git a/internal/repo/db/pg.go b/internal/repo/db/pg.go index 5aa7768..3d0b39d 100644 --- a/internal/repo/db/pg.go +++ b/internal/repo/db/pg.go @@ -66,14 +66,15 @@ func (s *service) setup(conf *model.Config) { logger := zapgorm2.New(s.log) logger.IgnoreRecordNotFoundError = true + tz := utils.If(conf.Database.TimeZone == "", "Asia/Shanghai", conf.Database.TimeZone) dsn := fmt.Sprintf( - // TODO: timezone as config - "user=%s password=%s dbname=%s host=%s port=%d sslmode=disable TimeZone=Asia/Shanghai", + "user=%s password=%s dbname=%s host=%s port=%d sslmode=disable TimeZone=%s", conf.Database.User, conf.Database.Password, conf.Database.Database, conf.Database.Host, conf.Database.Port, + tz, ) s.db, s.err = gorm.Open( diff --git a/internal/web/router/router.go b/internal/web/router/router.go index 1680c51..691ad9e 100644 --- a/internal/web/router/router.go +++ b/internal/web/router/router.go @@ -54,7 +54,7 @@ func (s *service) HealthCheck() error { } func (s *service) initRouters(conf *model.Config, injector *do.Injector) *gin.Engine { - gin.SetMode(utils.If(conf.Development, gin.DebugMode, gin.ReleaseMode)) + gin.SetMode(utils.If[string](conf.Development, gin.DebugMode, gin.ReleaseMode)) r := gin.New() r.MaxMultipartMemory = 8 << 20