2025-10-02 06:43:57 +00:00
|
|
|
package user
|
|
|
|
|
|
|
|
|
|
import (
|
2025-10-22 13:40:31 +00:00
|
|
|
"backend/pkg/member/domain/member"
|
|
|
|
|
"backend/pkg/member/domain/usecase"
|
|
|
|
|
"backend/pkg/permission/domain/token"
|
2025-10-02 06:43:57 +00:00
|
|
|
"context"
|
2025-10-22 13:40:31 +00:00
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
|
"time"
|
2025-10-02 06:43:57 +00:00
|
|
|
|
|
|
|
|
"backend/internal/svc"
|
|
|
|
|
"backend/internal/types"
|
|
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type GetUserInfoLogic struct {
|
|
|
|
|
logx.Logger
|
|
|
|
|
ctx context.Context
|
|
|
|
|
svcCtx *svc.ServiceContext
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-22 13:40:31 +00:00
|
|
|
// NewGetUserInfoLogic 取得當前登入的會員資訊(自己)
|
2025-10-02 06:43:57 +00:00
|
|
|
func NewGetUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserInfoLogic {
|
|
|
|
|
return &GetUserInfoLogic{
|
|
|
|
|
Logger: logx.WithContext(ctx),
|
|
|
|
|
ctx: ctx,
|
|
|
|
|
svcCtx: svcCtx,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-22 13:40:31 +00:00
|
|
|
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)
|
|
|
|
|
}
|
2025-10-02 06:43:57 +00:00
|
|
|
|
2025-10-22 13:40:31 +00:00
|
|
|
return &result
|
2025-10-02 06:43:57 +00:00
|
|
|
}
|