backend/internal/logic/user/get_user_info_logic.go

117 lines
2.6 KiB
Go

package user
import (
"backend/pkg/member/domain/member"
"backend/pkg/member/domain/usecase"
"backend/pkg/permission/domain/token"
"context"
"google.golang.org/protobuf/proto"
"time"
"backend/internal/svc"
"backend/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetUserInfoLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// NewGetUserInfoLogic 取得當前登入的會員資訊(自己)
func NewGetUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserInfoLogic {
return &GetUserInfoLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetUserInfoLogic) GetUserInfo(req *types.Authorization) (*types.MyInfo, error) {
uid := token.UID(l.ctx)
info, err := l.svcCtx.AccountUC.GetUserInfo(l.ctx, usecase.GetUserInfoRequest{
UID: uid,
})
if err != nil {
return nil, err
}
byUID, err := l.svcCtx.AccountUC.FindLoginIDByUID(l.ctx, uid)
if err != nil {
return nil, err
}
accountInfo, err := l.svcCtx.AccountUC.GetUserAccountInfo(l.ctx, usecase.GetUIDByAccountRequest{
Account: byUID.LoginID,
})
if err != nil {
return nil, err
}
userRole, err := l.svcCtx.UserRoleUC.Get(l.ctx, uid)
if err != nil {
return nil, err
}
role := userRole.RoleUID
res := &types.MyInfo{
Platform: accountInfo.Data.Platform.ToString(),
UID: info.UID,
UpdateAt: time.Unix(0, info.CreateTime).UTC().Format(time.RFC3339),
CreateAt: time.Unix(0, info.UpdateTime).UTC().Format(time.RFC3339),
Role: role,
UserStatus: info.UserStatus.CodeToString(),
PreferredLanguage: info.PreferredLanguage,
Currency: info.Currency,
AlarmCategory: info.AlarmCategory.CodeToString(),
}
if info.Address != nil {
res.Address = info.Address
}
if info.AvatarURL != nil {
res.AvatarURL = info.AvatarURL
}
if info.FullName != nil {
res.FullName = info.FullName
}
if info.Birthdate != nil {
b := ToDate(info.Birthdate)
res.Birthdate = b
}
if info.Address != nil {
res.Address = info.Address
}
if info.Nickname != nil {
res.Nickname = info.Nickname
}
if info.Email != nil {
res.Email = info.Email
res.IsEmailVerified = proto.Bool(true)
}
if info.PhoneNumber != nil {
res.PhoneNumber = info.PhoneNumber
res.IsPhoneVerified = proto.Bool(true)
}
if info.GenderCode != nil {
gc := member.GetGenderByCode(*info.GenderCode)
res.GenderCode = &gc
}
return res, nil
}
func ToDate(n *int64) *string {
result := ""
if n != nil {
result = time.Unix(*n, 0).UTC().Format(time.DateOnly)
}
return &result
}