package logic import ( "context" "lone-services/pkg/utils" user "lone-services/rpc/user/pb" "lone-services/services/user/internal/dao" "lone-services/services/user/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type InfoLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoLogic { return &InfoLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *InfoLogic) Info(in *user.InfoReq) (*user.Response, error) { loginUser := utils.GetUserFromCtx(l.ctx) if loginUser.ID < utils.NumberOne { return failResponse(utils.ErrorNoLoginInfo), nil } row, err := loadEnabledUser(loginUser.ID) if err != nil { l.Errorf("info load user: %v", err) return failResponse(utils.ErrorNotFund), nil } userType := loginUser.Type if userType < utils.NumberOne { userType = dao.TypeUser } ret := dao.ProfileData{ Type: userType, Base: dao.ProfileBase{ UserId: row.Id, Name: row.Name, Avatar: row.Avatar, Mobile: decryptMobile(row.Mobile), Gender: row.Gender, Birthday: row.Birthday.DateString(), Status: row.Status, }, } switch userType { case dao.TypeUser: return okResponse(ret), nil case dao.TypeSale: saleData, saleErr := l.loadSaleProfile(loginUser) if saleErr != nil { l.Errorf("info load sale: %v", saleErr) return failResponse(utils.Fail), nil } if saleData == nil { return outResponse(utils.ErrorNotFund, "销售信息不存在"), nil } ret.Sale = saleData return okResponse(ret), nil case dao.TypeStore: return outResponse(utils.Fail, "门店详情暂未开放"), nil default: return outResponse(utils.ErrorParams, "未知的用户类型"), nil } } func (l *InfoLogic) loadSaleProfile(loginUser utils.UserInfo) (*dao.ProfileSaleData, error) { if loginUser.SaleId > utils.NumberZero { data, err := fetchSaleById(l.ctx, l.svcCtx.SaleSvcName, loginUser.SaleId) if err != nil { return nil, err } if data != nil { return toProfileSale(data), nil } } data, err := fetchSaleByUserId(l.ctx, l.svcCtx.SaleSvcName, loginUser.ID) if err != nil { return nil, err } return toProfileSale(data), nil }