package service_user import ( "net/url" "nixcn-cms/data" "nixcn-cms/internal/cryptography" "nixcn-cms/internal/exception" "nixcn-cms/service/shared" "unicode/utf8" ) func (self *UserServiceImpl) UpdateUserInfo(payload *UserInfoPayload) (result *UserInfoResult) { var err error userData := new(data.User). SetNickname(payload.Data.Nickname). SetSubtitle(payload.Data.Subtitle). SetAvatar(payload.Data.Avatar). SetBio(payload.Data.Bio). SetAllowPublic(payload.Data.AllowPublic) if payload.Data.Username != "" { if len(payload.Data.Username) < 5 || len(payload.Data.Username) >= 255 { execption := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 400, Exception: execption, }, Data: nil, } return } userData.SetUsername(payload.Data.Username) } if payload.Data.Nickname != "" { if utf8.RuneCountInString(payload.Data.Nickname) > 24 { execption := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 400, Exception: execption, }, Data: nil, } return } userData.SetNickname(payload.Data.Nickname) } if payload.Data.Subtitle != "" { if utf8.RuneCountInString(payload.Data.Subtitle) > 32 { execption := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceUpdate). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput). SetError(nil). Throw(payload.Context) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 400, Exception: execption, }, Data: nil, } return } userData.SetSubtitle(payload.Data.Subtitle) } if payload.Data.Avatar != "" { _, err := url.ParseRequestURI(payload.Data.Avatar) if err != nil { execption := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceUpdate). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput). SetError(err). Throw(payload.Context) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 400, Exception: execption, }, Data: nil, } return } userData.SetAvatar(payload.Data.Avatar) } if payload.Data.Bio != "" { if !cryptography.IsBase64Std(payload.Data.Bio) { execption := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceUpdate). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorInvalidInput). SetError(nil). Throw(payload.Context) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 400, Exception: execption, }, Data: nil, } return } userData.Bio = payload.Data.Bio } err = userData.UpdateByUserID(payload.Context, &payload.UserId) if err != nil { exception := new(exception.Builder). SetStatus(exception.StatusServer). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceUpdate). SetType(exception.TypeCommon). SetOriginal(exception.CommonErrorDatabase). SetError(err). Throw(payload.Context) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 500, Exception: exception, }, Data: nil, } return } exception := new(exception.Builder). SetStatus(exception.StatusUser). SetService(exception.ServiceUser). SetEndpoint(exception.EndpointUserServiceUpdate). SetType(exception.TypeCommon). SetOriginal(exception.CommonSuccess). SetError(nil). Throw(payload.Context) result = &UserInfoResult{ Common: shared.CommonResult{ HttpCode: 200, Exception: exception, }, Data: nil, } return }