user avatar save

This commit is contained in:
aichy126 2022-10-28 14:53:44 +08:00
parent f7df1d3dfd
commit 90deaf027b
6 changed files with 87 additions and 10 deletions

View File

@ -4108,6 +4108,23 @@ const docTemplate = `{
}
}
},
"schema.AvatarInfo": {
"type": "object",
"properties": {
"custom": {
"type": "string",
"maxLength": 200
},
"gravatar": {
"type": "string",
"maxLength": 200
},
"type": {
"type": "string",
"maxLength": 100
}
}
},
"schema.CloseQuestionReq": {
"type": "object",
"required": [
@ -5318,8 +5335,7 @@ const docTemplate = `{
"properties": {
"avatar": {
"description": "avatar",
"type": "string",
"maxLength": 500
"$ref": "#/definitions/schema.AvatarInfo"
},
"bio": {
"description": "bio",

View File

@ -4096,6 +4096,23 @@
}
}
},
"schema.AvatarInfo": {
"type": "object",
"properties": {
"custom": {
"type": "string",
"maxLength": 200
},
"gravatar": {
"type": "string",
"maxLength": 200
},
"type": {
"type": "string",
"maxLength": 100
}
}
},
"schema.CloseQuestionReq": {
"type": "object",
"required": [
@ -5306,8 +5323,7 @@
"properties": {
"avatar": {
"description": "avatar",
"type": "string",
"maxLength": 500
"$ref": "#/definitions/schema.AvatarInfo"
},
"bio": {
"description": "bio",

View File

@ -139,6 +139,18 @@ definitions:
description: title
type: string
type: object
schema.AvatarInfo:
properties:
custom:
maxLength: 200
type: string
gravatar:
maxLength: 200
type: string
type:
maxLength: 100
type: string
type: object
schema.CloseQuestionReq:
properties:
close_msg:
@ -1013,9 +1025,8 @@ definitions:
schema.UpdateInfoRequest:
properties:
avatar:
$ref: '#/definitions/schema.AvatarInfo'
description: avatar
maxLength: 500
type: string
bio:
description: bio
maxLength: 4096

View File

@ -10,6 +10,7 @@ import (
"github.com/answerdev/answer/pkg/checker"
"github.com/jinzhu/copier"
"github.com/segmentfault/pacman/errors"
"github.com/segmentfault/pacman/log"
)
// UserVerifyEmailReq user verify email request
@ -72,6 +73,7 @@ type GetUserResp struct {
func (r *GetUserResp) GetFromUserEntity(userInfo *entity.User) {
_ = copier.Copy(r, userInfo)
r.Avatar = r.AvatarInfo(userInfo.Avatar)
r.CreatedAt = userInfo.CreatedAt.Unix()
r.LastLoginDate = userInfo.LastLoginDate.Unix()
statusShow, ok := UserStatusShow[userInfo.Status]
@ -80,6 +82,26 @@ func (r *GetUserResp) GetFromUserEntity(userInfo *entity.User) {
}
}
func (us *GetUserResp) AvatarInfo(AvatarJson string) string {
if AvatarJson == "" {
return ""
}
AvatarInfo := &AvatarInfo{}
err := json.Unmarshal([]byte(AvatarJson), AvatarInfo)
if err != nil {
log.Error("AvatarInfo json.Unmarshal Error", err)
return ""
}
switch AvatarInfo.Type {
case "gravatar":
return AvatarInfo.Gravatar
case "custom":
return AvatarInfo.Custom
default:
return ""
}
}
// GetUserStatusResp get user status info
type GetUserStatusResp struct {
// user status
@ -230,7 +252,7 @@ type UpdateInfoRequest struct {
// username
Username string `validate:"omitempty,gt=0,lte=30" json:"username"`
// avatar
Avatar string `validate:"omitempty,gt=0,lte=500" json:"avatar"`
Avatar AvatarInfo `json:"avatar"`
// bio
Bio string `validate:"omitempty,gt=0,lte=4096" json:"bio"`
// bio
@ -243,6 +265,12 @@ type UpdateInfoRequest struct {
UserId string `json:"-" `
}
type AvatarInfo struct {
Type string `validate:"omitempty,gt=0,lte=100" json:"type"`
Gravatar string `validate:"omitempty,gt=0,lte=200" json:"gravatar"`
Custom string `validate:"omitempty,gt=0,lte=200" json:"custom"`
}
func (u *UpdateInfoRequest) Check() (errField *validator.ErrorField, err error) {
if len(u.Username) > 0 {
re := regexp.MustCompile(`^[a-z0-9._-]{4,30}$`)

View File

@ -76,11 +76,13 @@ func (us *UserCommon) BatchUserBasicInfoByID(ctx context.Context, IDs []string)
// UserBasicInfoFormat
func (us *UserCommon) UserBasicInfoFormat(ctx context.Context, userInfo *entity.User) *schema.UserBasicInfo {
userBasicInfo := &schema.UserBasicInfo{}
uinfo := &schema.GetUserResp{}
uinfo.AvatarInfo(userInfo.Avatar)
userBasicInfo.ID = userInfo.ID
userBasicInfo.Username = userInfo.Username
userBasicInfo.Rank = userInfo.Rank
userBasicInfo.DisplayName = userInfo.DisplayName
userBasicInfo.Avatar = userInfo.Avatar
userBasicInfo.Avatar = uinfo.Avatar
userBasicInfo.Website = userInfo.Website
userBasicInfo.Location = userInfo.Location
userBasicInfo.IpInfo = userInfo.IPInfo

View File

@ -3,6 +3,7 @@ package service
import (
"context"
"encoding/hex"
"encoding/json"
"fmt"
"math/rand"
"regexp"
@ -255,10 +256,13 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq
return errors.BadRequest(reason.UsernameDuplicate)
}
}
Avatar, err := json.Marshal(req.Avatar)
if err != nil {
return err
}
userInfo := entity.User{}
userInfo.ID = req.UserId
userInfo.Avatar = req.Avatar
userInfo.Avatar = string(Avatar)
userInfo.DisplayName = req.DisplayName
userInfo.Bio = req.Bio
userInfo.BioHtml = req.BioHtml