diff --git a/config/configs.go b/config/configs.go index eff8104..ec1ad71 100644 --- a/config/configs.go +++ b/config/configs.go @@ -24,16 +24,17 @@ var ( ) type Config struct { - Server Server `mapstructure:"server"` - Database Database `mapstructure:"postgresql"` - Jwt Jwt `mapstructure:"jwt"` - OSSConfig OSSConfig `mapstructure:"oss"` - Midtrans Midtrans `mapstructure:"midtrans"` - Brevo Brevo `mapstructure:"brevo"` - Email Email `mapstructure:"email"` - Withdraw Withdraw `mapstructure:"withdrawal"` - Discovery Discovery `mapstructure:"discovery"` - Order Order `mapstructure:"order"` + Server Server `mapstructure:"server"` + Database Database `mapstructure:"postgresql"` + Jwt Jwt `mapstructure:"jwt"` + OSSConfig OSSConfig `mapstructure:"oss"` + Midtrans Midtrans `mapstructure:"midtrans"` + Brevo Brevo `mapstructure:"brevo"` + Email Email `mapstructure:"email"` + Withdraw Withdraw `mapstructure:"withdrawal"` + Discovery Discovery `mapstructure:"discovery"` + Order Order `mapstructure:"order"` + FeatureToggle FeatureToggle `mapstructure:"feature_toggle"` } var ( diff --git a/config/logger.go b/config/logger.go new file mode 100644 index 0000000..d47b984 --- /dev/null +++ b/config/logger.go @@ -0,0 +1,9 @@ +package config + +type FeatureToggle struct { + LoggerEnabled bool `mapstructure:"logger_enabled"` +} + +func (f *FeatureToggle) IsLoggerEnabled() bool { + return f.LoggerEnabled +} diff --git a/infra/furtuna.development.yaml b/infra/furtuna.development.yaml index 71fc3d5..8342dc1 100644 --- a/infra/furtuna.development.yaml +++ b/infra/furtuna.development.yaml @@ -41,7 +41,7 @@ midtrans: env: 1 brevo: - api_key: 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 + api_key: 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 email: sender: "siregaraditya@gmail.com" @@ -51,7 +51,7 @@ email: subject: "Reset Password" opening_word: "Terima kasih sudah menjadi bagian dari Furtuna. Anda telah berhasil melakukan reset password, silakan masukan unik password yang dibuat oleh sistem dibawah ini:" closing_word: "Silakan login kembali menggunakan email dan password anda diatas, sistem akan secara otomatis meminta anda untuk membuat password baru setelah berhasil login. Mohon maaf atas kendala yang dialami." - + order: fee: 5000 @@ -76,4 +76,7 @@ discovery: - name: "Jawa" - name: "Sumatera" - name: "Kalimantan" - - name: "Sulawesi" \ No newline at end of file + - name: "Sulawesi" + +feature_toggle: + logger_enabled: false \ No newline at end of file diff --git a/internal/app/server.go b/internal/app/server.go index b3ea9d9..c4186a0 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -2,6 +2,7 @@ package app import ( "fmt" + "furtuna-be/config" "github.com/gin-gonic/gin" "github.com/gofrs/uuid" @@ -9,7 +10,7 @@ import ( "furtuna-be/internal/middlewares" ) -func NewServer() *Server { +func NewServer(cfg *config.Config) *Server { gin.SetMode(gin.ReleaseMode) server := &Server{ @@ -19,8 +20,8 @@ func NewServer() *Server { server.Use(middlewares.Cors()) server.Use(middlewares.LogCorsError()) server.Use(middlewares.Trace()) - server.Use(middlewares.Logger()) - server.Use(middlewares.RequestMiddleware()) + server.Use(middlewares.Logger(&cfg.FeatureToggle)) + server.Use(middlewares.RequestMiddleware(&cfg.FeatureToggle)) return server } diff --git a/internal/common/db/database.go b/internal/common/db/database.go index 7e3fa7d..f80fbdf 100644 --- a/internal/common/db/database.go +++ b/internal/common/db/database.go @@ -29,7 +29,7 @@ func NewPostgres(c config.Database) (*gorm.DB, error) { zapCfg := zap.NewProductionConfig() zapCfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel) // whatever minimum level - zapCfg.DisableCaller = true + zapCfg.DisableCaller = false // logger, _ := zapCfg.Build() // db = gorm.Open(sqldblogger.New(logger), db) diff --git a/internal/middlewares/logger.go b/internal/middlewares/logger.go index 2d7f4b4..eb5ffdd 100644 --- a/internal/middlewares/logger.go +++ b/internal/middlewares/logger.go @@ -9,16 +9,28 @@ import ( "furtuna-be/internal/common/request" ) -func Logger() gin.HandlerFunc { +type ConfigLogger interface { + IsLoggerEnabled() bool +} + +func Logger(c ConfigLogger) gin.HandlerFunc { + if !c.IsLoggerEnabled() { + return func(ctx *gin.Context) { + ctx.Next() + } + } + return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { var parsedReqInfo request.RequestInfo - reqInfo, exists := param.Keys[request.ReqInfoKey] - if exists { - parsedReqInfo = reqInfo.(request.RequestInfo) + if reqInfo, exists := param.Keys[request.ReqInfoKey]; exists { + if castedReqInfo, ok := reqInfo.(request.RequestInfo); ok { + parsedReqInfo = castedReqInfo + } } - return fmt.Sprintf("%s - [HTTP] TraceId: %s; UserId: %d; Method: %s; Path: %s; Status: %d, Latency: %s;\n\n", + return fmt.Sprintf( + "%s - [HTTP] TraceId: %s; UserId: %d; Method: %s; Path: %s; Status: %d; Latency: %s;\n\n", param.TimeStamp.Format(time.RFC1123), parsedReqInfo.TraceId, parsedReqInfo.UserId, diff --git a/internal/middlewares/request.go b/internal/middlewares/request.go index 497531f..c67e55b 100644 --- a/internal/middlewares/request.go +++ b/internal/middlewares/request.go @@ -16,7 +16,13 @@ import ( "furtuna-be/internal/common/logger" ) -func RequestMiddleware() (handler gin.HandlerFunc) { +func RequestMiddleware(c ConfigLogger) (handler gin.HandlerFunc) { + if !c.IsLoggerEnabled() { + return func(ctx *gin.Context) { + ctx.Next() + } + } + return func(ctx *gin.Context) { start := time.Now() body, _ := readRequestBody(ctx.Request) diff --git a/internal/repository/license/license.go b/internal/repository/license/license.go index e2d5814..027eab7 100644 --- a/internal/repository/license/license.go +++ b/internal/repository/license/license.go @@ -2,6 +2,7 @@ package license import ( "context" + "errors" "furtuna-be/internal/common/logger" "furtuna-be/internal/entity" "github.com/google/uuid" @@ -99,11 +100,17 @@ func (r *LicenseRepository) GetAll(ctx context.Context, limit, offset int, statu func (r *LicenseRepository) FindByPartnerIDMaxEndDate(ctx context.Context, partnerID *int64) (*entity.LicenseDB, error) { var licenseDB entity.LicenseDB - if err := r.db.Debug().WithContext(ctx). + if err := r.db.WithContext(ctx). Where("partner_id = ?", partnerID). Order("end_date DESC"). First(&licenseDB).Error; err != nil { + + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } + return nil, err } + return &licenseDB, nil } diff --git a/internal/repository/orders/order.go b/internal/repository/orders/order.go index 4dd1efc..e30ebc6 100644 --- a/internal/repository/orders/order.go +++ b/internal/repository/orders/order.go @@ -155,7 +155,7 @@ func (b *OrderRepository) GetAllHystoryOrders(ctx context.Context, req entity.Or query = query.Limit(req.Limit) } - if err := query.Debug().Scan(&orders).Error; err != nil { + if err := query.Scan(&orders).Error; err != nil { logger.ContextLogger(ctx).Error("error when get all history orders", zap.Error(err)) return nil, 0, err } diff --git a/internal/repository/sites/sites.go b/internal/repository/sites/sites.go index 6aeb24d..4639ff0 100644 --- a/internal/repository/sites/sites.go +++ b/internal/repository/sites/sites.go @@ -79,7 +79,7 @@ func (r *SiteRepository) Update(ctx context.Context, site *entity.SiteDB) (*enti func (r *SiteRepository) GetByID(ctx context.Context, id int64) (*entity.SiteDB, error) { site := new(entity.SiteDB) - if err := r.db.Debug().Preload("Products").First(site, id).Error; err != nil { + if err := r.db.Preload("Products").First(site, id).Error; err != nil { logger.ContextLogger(ctx).Error("error when getting site by ID", zap.Error(err)) return nil, err } diff --git a/internal/services/auth/init.go b/internal/services/auth/init.go index 86222db..30e300a 100644 --- a/internal/services/auth/init.go +++ b/internal/services/auth/init.go @@ -6,7 +6,6 @@ import ( "furtuna-be/internal/common/mycontext" "furtuna-be/internal/entity" "furtuna-be/internal/utils" - "go.uber.org/zap" "furtuna-be/internal/common/errors" @@ -68,7 +67,9 @@ func (u *AuthServiceImpl) AuthenticateUser(ctx context.Context, email, password logger.ContextLogger(ctx).Error("error when get user license", zap.Error(err)) return nil, errors.ErrorInternalServer } - licensePartner = parterLicense.ToPartnerLicense() + if parterLicense != nil { + licensePartner = parterLicense.ToPartnerLicense() + } } return user.ToUserAuthenticate(signedToken, licensePartner), nil diff --git a/main.go b/main.go index 22cd59a..c2eac69 100644 --- a/main.go +++ b/main.go @@ -25,7 +25,7 @@ func main() { log.Fatal(err) } - server := app.NewServer() + server := app.NewServer(cfg) repo := repository.NewRepoManagerImpl(dbConn, cfg) service := services.NewServiceManagerImpl(cfg, repo)