diff --git a/internal/schema/user_schema.go b/internal/schema/user_schema.go index 9693c0a4..a30f227f 100644 --- a/internal/schema/user_schema.go +++ b/internal/schema/user_schema.go @@ -4,14 +4,12 @@ import ( "encoding/json" "github.com/answerdev/answer/internal/base/constant" - "github.com/answerdev/answer/internal/base/reason" "github.com/answerdev/answer/internal/base/validator" "github.com/answerdev/answer/internal/entity" "github.com/answerdev/answer/pkg/checker" "github.com/answerdev/answer/pkg/converter" "github.com/answerdev/answer/pkg/gravatar" "github.com/jinzhu/copier" - "github.com/segmentfault/pacman/errors" ) // UserVerifyEmailReq user verify email request @@ -300,7 +298,7 @@ func (u *UserModifyPassWordRequest) Check() (errFields []*validator.FormErrorFie type UpdateInfoRequest struct { // display_name - DisplayName string `validate:"required,gt=0,lte=30" json:"display_name"` + DisplayName string `validate:"omitempty,gt=0,lte=30" json:"display_name"` // username Username string `validate:"omitempty,gt=3,lte=30" json:"username"` // avatar @@ -329,16 +327,6 @@ func (a *AvatarInfo) ToJsonString() string { } func (req *UpdateInfoRequest) Check() (errFields []*validator.FormErrorField, err error) { - if len(req.Username) > 0 { - if checker.IsInvalidUsername(req.Username) { - errField := &validator.FormErrorField{ - ErrorField: "username", - ErrorMsg: reason.UsernameInvalid, - } - errFields = append(errFields, errField) - return errFields, errors.BadRequest(reason.UsernameInvalid) - } - } req.BioHTML = converter.Markdown2BasicHTML(req.Bio) return nil, nil } diff --git a/internal/service/user_service.go b/internal/service/user_service.go index e417f5a9..19e97550 100644 --- a/internal/service/user_service.go +++ b/internal/service/user_service.go @@ -259,15 +259,23 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq if err != nil { return nil, err } - oldUserInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID) - if err != nil { - return nil, err - } - if !exist { - return nil, errors.BadRequest(reason.UserNotFound) - } - if len(req.Username) > 0 { + if siteUsers.AllowUpdateUsername && len(req.Username) > 0 { + if checker.IsInvalidUsername(req.Username) { + errFields = append(errFields, &validator.FormErrorField{ + ErrorField: "username", + ErrorMsg: reason.UsernameInvalid, + }) + return errFields, errors.BadRequest(reason.UsernameInvalid) + } + if checker.IsReservedUsername(req.Username) { + errFields = append(errFields, &validator.FormErrorField{ + ErrorField: "username", + ErrorMsg: reason.UsernameInvalid, + }) + return errFields, errors.BadRequest(reason.UsernameInvalid) + } + userInfo, exist, err := us.userRepo.GetByUsername(ctx, req.Username) if err != nil { return nil, err @@ -279,13 +287,14 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq }) return errFields, errors.BadRequest(reason.UsernameDuplicate) } - if checker.IsReservedUsername(req.Username) { - errFields = append(errFields, &validator.FormErrorField{ - ErrorField: "username", - ErrorMsg: reason.UsernameInvalid, - }) - return errFields, errors.BadRequest(reason.UsernameInvalid) - } + } + + oldUserInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID) + if err != nil { + return nil, err + } + if !exist { + return nil, errors.BadRequest(reason.UserNotFound) } cond := us.formatUserInfoForUpdateInfo(oldUserInfo, req, siteUsers) @@ -307,13 +316,13 @@ func (us *UserService) formatUserInfoForUpdateInfo( userInfo.Location = oldUserInfo.Location userInfo.ID = req.UserID - if siteUsersConf.AllowUpdateDisplayName { + if len(req.DisplayName) > 0 && siteUsersConf.AllowUpdateDisplayName { userInfo.DisplayName = req.DisplayName } - if siteUsersConf.AllowUpdateUsername { + if len(req.Username) > 0 && siteUsersConf.AllowUpdateUsername { userInfo.Username = req.Username } - if siteUsersConf.AllowUpdateAvatar { + if len(avatar) > 0 && siteUsersConf.AllowUpdateAvatar { userInfo.Avatar = string(avatar) } if siteUsersConf.AllowUpdateBio { diff --git a/plugin/plugin.go b/plugin/plugin.go index f6b541ac..7f6e4a41 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -136,7 +136,7 @@ type TranslateFn func(ctx *GinContext) string // Translator contains a function that translates the key to the current language of the context type Translator struct { - fn TranslateFn + Fn TranslateFn } // MakeTranslator generates a translator from the key @@ -144,13 +144,13 @@ func MakeTranslator(key string) Translator { t := func(ctx *GinContext) string { return Translate(ctx, key) } - return Translator{fn: t} + return Translator{Fn: t} } // Translate translates the key to the current language of the context func (t Translator) Translate(ctx *GinContext) string { - if &t == nil || t.fn == nil { + if &t == nil || t.Fn == nil { return "" } - return t.fn(ctx) + return t.Fn(ctx) }