From 97fa333ea053ec954440f5f08d596e3b58d6e759 Mon Sep 17 00:00:00 2001 From: LinkinStar Date: Thu, 3 Nov 2022 11:12:20 +0800 Subject: [PATCH] feat: user info response handling the default language --- cmd/answer/wire_gen.go | 17 ++++--- internal/controller/lang_controller.go | 6 +-- internal/controller/siteinfo_controller.go | 6 +-- .../siteinfo_controller.go | 6 +-- internal/service/provider.go | 5 +- .../{ => siteinfo}/siteinfo_service.go | 2 +- internal/service/siteinfo_common/siteinfo.go | 1 + .../siteinfo_common/siteinfo_service.go | 50 +++++++++++++++++++ internal/service/user_service.go | 33 ++++++++---- 9 files changed, 98 insertions(+), 28 deletions(-) rename internal/service/{ => siteinfo}/siteinfo_service.go (99%) create mode 100644 internal/service/siteinfo_common/siteinfo_service.go diff --git a/cmd/answer/wire_gen.go b/cmd/answer/wire_gen.go index 746321b7..0ae8cd10 100644 --- a/cmd/answer/wire_gen.go +++ b/cmd/answer/wire_gen.go @@ -58,6 +58,8 @@ import ( "github.com/answerdev/answer/internal/service/report_handle_backyard" "github.com/answerdev/answer/internal/service/revision_common" "github.com/answerdev/answer/internal/service/service_config" + "github.com/answerdev/answer/internal/service/siteinfo" + "github.com/answerdev/answer/internal/service/siteinfo_common" tag2 "github.com/answerdev/answer/internal/service/tag" "github.com/answerdev/answer/internal/service/tag_common" "github.com/answerdev/answer/internal/service/uploader" @@ -90,19 +92,19 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database, return nil, nil, err } siteInfoRepo := site_info.NewSiteInfo(dataData) - configRepo := config.NewConfigRepo(dataData) - emailRepo := export.NewEmailRepo(dataData) - emailService := export2.NewEmailService(configRepo, emailRepo, siteInfoRepo) - siteInfoService := service.NewSiteInfoService(siteInfoRepo, emailService) - langController := controller.NewLangController(i18nTranslator, siteInfoService) + siteInfoCommonService := siteinfo_common.NewSiteInfoCommonService(siteInfoRepo) + langController := controller.NewLangController(i18nTranslator, siteInfoCommonService) authRepo := auth.NewAuthRepo(dataData) authService := auth2.NewAuthService(authRepo) + configRepo := config.NewConfigRepo(dataData) userRepo := user.NewUserRepo(dataData, configRepo) uniqueIDRepo := unique.NewUniqueIDRepo(dataData) activityRepo := activity_common.NewActivityRepo(dataData, uniqueIDRepo, configRepo) userRankRepo := rank.NewUserRankRepo(dataData, configRepo) userActiveActivityRepo := activity.NewUserActiveActivityRepo(dataData, activityRepo, userRankRepo, configRepo) - userService := service.NewUserService(userRepo, userActiveActivityRepo, emailService, authService, serviceConf) + emailRepo := export.NewEmailRepo(dataData) + emailService := export2.NewEmailService(configRepo, emailRepo, siteInfoRepo) + userService := service.NewUserService(userRepo, userActiveActivityRepo, emailService, authService, serviceConf, siteInfoCommonService) captchaRepo := captcha.NewCaptchaRepo(dataData) captchaService := action.NewCaptchaService(captchaRepo) uploaderService := uploader.NewUploaderService(serviceConf) @@ -167,8 +169,9 @@ func initApplication(debug bool, serverConf *conf.Server, dbConf *data.Database, reasonService := reason2.NewReasonService(reasonRepo) reasonController := controller.NewReasonController(reasonService) themeController := controller_backyard.NewThemeController() + siteInfoService := siteinfo.NewSiteInfoService(siteInfoRepo, emailService) siteInfoController := controller_backyard.NewSiteInfoController(siteInfoService) - siteinfoController := controller.NewSiteinfoController(siteInfoService) + siteinfoController := controller.NewSiteinfoController(siteInfoCommonService) notificationRepo := notification.NewNotificationRepo(dataData) notificationCommon := notificationcommon.NewNotificationCommon(dataData, notificationRepo, userCommon, activityRepo, followRepo, objService) notificationService := notification2.NewNotificationService(dataData, notificationRepo, notificationCommon) diff --git a/internal/controller/lang_controller.go b/internal/controller/lang_controller.go index 8d4242db..1e947adf 100644 --- a/internal/controller/lang_controller.go +++ b/internal/controller/lang_controller.go @@ -5,18 +5,18 @@ import ( "github.com/answerdev/answer/internal/base/handler" "github.com/answerdev/answer/internal/base/translator" - "github.com/answerdev/answer/internal/service" + "github.com/answerdev/answer/internal/service/siteinfo_common" "github.com/gin-gonic/gin" "github.com/segmentfault/pacman/i18n" ) type LangController struct { translator i18n.Translator - siteInfoService *service.SiteInfoService + siteInfoService *siteinfo_common.SiteInfoCommonService } // NewLangController new language controller. -func NewLangController(tr i18n.Translator, siteInfoService *service.SiteInfoService) *LangController { +func NewLangController(tr i18n.Translator, siteInfoService *siteinfo_common.SiteInfoCommonService) *LangController { return &LangController{translator: tr, siteInfoService: siteInfoService} } diff --git a/internal/controller/siteinfo_controller.go b/internal/controller/siteinfo_controller.go index 7148b7ad..5f547eb7 100644 --- a/internal/controller/siteinfo_controller.go +++ b/internal/controller/siteinfo_controller.go @@ -3,16 +3,16 @@ package controller import ( "github.com/answerdev/answer/internal/base/handler" "github.com/answerdev/answer/internal/schema" - "github.com/answerdev/answer/internal/service" + "github.com/answerdev/answer/internal/service/siteinfo_common" "github.com/gin-gonic/gin" ) type SiteinfoController struct { - siteInfoService *service.SiteInfoService + siteInfoService *siteinfo_common.SiteInfoCommonService } // NewSiteinfoController new siteinfo controller. -func NewSiteinfoController(siteInfoService *service.SiteInfoService) *SiteinfoController { +func NewSiteinfoController(siteInfoService *siteinfo_common.SiteInfoCommonService) *SiteinfoController { return &SiteinfoController{ siteInfoService: siteInfoService, } diff --git a/internal/controller_backyard/siteinfo_controller.go b/internal/controller_backyard/siteinfo_controller.go index f193bd2c..7ecce395 100644 --- a/internal/controller_backyard/siteinfo_controller.go +++ b/internal/controller_backyard/siteinfo_controller.go @@ -3,16 +3,16 @@ package controller_backyard import ( "github.com/answerdev/answer/internal/base/handler" "github.com/answerdev/answer/internal/schema" - "github.com/answerdev/answer/internal/service" + "github.com/answerdev/answer/internal/service/siteinfo" "github.com/gin-gonic/gin" ) type SiteInfoController struct { - siteInfoService *service.SiteInfoService + siteInfoService *siteinfo.SiteInfoService } // NewSiteInfoController new siteinfo controller. -func NewSiteInfoController(siteInfoService *service.SiteInfoService) *SiteInfoController { +func NewSiteInfoController(siteInfoService *siteinfo.SiteInfoService) *SiteInfoController { return &SiteInfoController{ siteInfoService: siteInfoService, } diff --git a/internal/service/provider.go b/internal/service/provider.go index 3901766e..93d091fb 100644 --- a/internal/service/provider.go +++ b/internal/service/provider.go @@ -21,6 +21,8 @@ import ( "github.com/answerdev/answer/internal/service/report_backyard" "github.com/answerdev/answer/internal/service/report_handle_backyard" "github.com/answerdev/answer/internal/service/revision_common" + "github.com/answerdev/answer/internal/service/siteinfo" + "github.com/answerdev/answer/internal/service/siteinfo_common" "github.com/answerdev/answer/internal/service/tag" tagcommon "github.com/answerdev/answer/internal/service/tag_common" "github.com/answerdev/answer/internal/service/uploader" @@ -61,7 +63,8 @@ var ProviderSetService = wire.NewSet( report_backyard.NewReportBackyardService, user_backyard.NewUserBackyardService, reason.NewReasonService, - NewSiteInfoService, + siteinfo_common.NewSiteInfoCommonService, + siteinfo.NewSiteInfoService, notficationcommon.NewNotificationCommon, notification.NewNotificationService, activity.NewAnswerActivityService, diff --git a/internal/service/siteinfo_service.go b/internal/service/siteinfo/siteinfo_service.go similarity index 99% rename from internal/service/siteinfo_service.go rename to internal/service/siteinfo/siteinfo_service.go index 08a88b9f..822c7bde 100644 --- a/internal/service/siteinfo_service.go +++ b/internal/service/siteinfo/siteinfo_service.go @@ -1,4 +1,4 @@ -package service +package siteinfo import ( "context" diff --git a/internal/service/siteinfo_common/siteinfo.go b/internal/service/siteinfo_common/siteinfo.go index ff9066b0..1c501d2d 100644 --- a/internal/service/siteinfo_common/siteinfo.go +++ b/internal/service/siteinfo_common/siteinfo.go @@ -2,6 +2,7 @@ package siteinfo_common import ( "context" + "github.com/answerdev/answer/internal/entity" ) diff --git a/internal/service/siteinfo_common/siteinfo_service.go b/internal/service/siteinfo_common/siteinfo_service.go new file mode 100644 index 00000000..5dd565d0 --- /dev/null +++ b/internal/service/siteinfo_common/siteinfo_service.go @@ -0,0 +1,50 @@ +package siteinfo_common + +import ( + "context" + "encoding/json" + + "github.com/answerdev/answer/internal/base/constant" + "github.com/answerdev/answer/internal/base/reason" + "github.com/answerdev/answer/internal/schema" + "github.com/segmentfault/pacman/errors" +) + +type SiteInfoCommonService struct { + siteInfoRepo SiteInfoRepo +} + +func NewSiteInfoCommonService(siteInfoRepo SiteInfoRepo) *SiteInfoCommonService { + return &SiteInfoCommonService{ + siteInfoRepo: siteInfoRepo, + } +} + +// GetSiteGeneral get site info general +func (s *SiteInfoCommonService) GetSiteGeneral(ctx context.Context) (resp *schema.SiteGeneralResp, err error) { + siteInfo, exist, err := s.siteInfoRepo.GetByType(ctx, constant.SiteTypeGeneral) + if err != nil { + return nil, err + } + if !exist { + return nil, errors.BadRequest(reason.SiteInfoNotFound) + } + + resp = &schema.SiteGeneralResp{} + _ = json.Unmarshal([]byte(siteInfo.Content), resp) + return resp, nil +} + +// GetSiteInterface get site info interface +func (s *SiteInfoCommonService) GetSiteInterface(ctx context.Context) (resp *schema.SiteInterfaceResp, err error) { + siteInfo, exist, err := s.siteInfoRepo.GetByType(ctx, constant.SiteTypeInterface) + if err != nil { + return nil, err + } + if !exist { + return nil, errors.BadRequest(reason.SiteInfoNotFound) + } + resp = &schema.SiteInterfaceResp{} + _ = json.Unmarshal([]byte(siteInfo.Content), resp) + return resp, nil +} diff --git a/internal/service/user_service.go b/internal/service/user_service.go index fbc22741..6447184e 100644 --- a/internal/service/user_service.go +++ b/internal/service/user_service.go @@ -18,6 +18,7 @@ import ( "github.com/answerdev/answer/internal/service/auth" "github.com/answerdev/answer/internal/service/export" "github.com/answerdev/answer/internal/service/service_config" + "github.com/answerdev/answer/internal/service/siteinfo_common" usercommon "github.com/answerdev/answer/internal/service/user_common" "github.com/answerdev/answer/pkg/checker" "github.com/google/uuid" @@ -30,11 +31,12 @@ import ( // UserService user service type UserService struct { - userRepo usercommon.UserRepo - userActivity activity.UserActiveActivityRepo - serviceConfig *service_config.ServiceConfig - emailService *export.EmailService - authService *auth.AuthService + userRepo usercommon.UserRepo + userActivity activity.UserActiveActivityRepo + serviceConfig *service_config.ServiceConfig + emailService *export.EmailService + authService *auth.AuthService + siteInfoService *siteinfo_common.SiteInfoCommonService } func NewUserService(userRepo usercommon.UserRepo, @@ -42,13 +44,15 @@ func NewUserService(userRepo usercommon.UserRepo, emailService *export.EmailService, authService *auth.AuthService, serviceConfig *service_config.ServiceConfig, + siteInfoService *siteinfo_common.SiteInfoCommonService, ) *UserService { return &UserService{ - userRepo: userRepo, - userActivity: userActivity, - emailService: emailService, - serviceConfig: serviceConfig, - authService: authService, + userRepo: userRepo, + userActivity: userActivity, + emailService: emailService, + serviceConfig: serviceConfig, + authService: authService, + siteInfoService: siteInfoService, } } @@ -64,6 +68,15 @@ func (us *UserService) GetUserInfoByUserID(ctx context.Context, token, userID st resp = &schema.GetUserToSetShowResp{} resp.GetFromUserEntity(userInfo) resp.AccessToken = token + + // if user choose the default language, Use the language configured by the administrator. + if resp.Language == translator.DefaultLangOption { + siteInterface, err := us.siteInfoService.GetSiteInterface(ctx) + if err != nil { + return nil, err + } + resp.Language = siteInterface.Language + } return resp, nil }