|
|
package s2s
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"joybuywork/internal/plugins/jsonm"
|
|
|
"joybuywork/internal/repository/model"
|
|
|
"joybuywork/internal/repository/mtype"
|
|
|
"joybuywork/internal/repository/withdefault"
|
|
|
"joybuywork/proto/go_proto/workerr"
|
|
|
"fmt"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
type UserInfoResp struct {
|
|
|
Code int32 `json:"code"`
|
|
|
Msg string `json:"msg"`
|
|
|
Data *UserInfoRespData `json:"data"`
|
|
|
}
|
|
|
type UserInfoRespData struct {
|
|
|
CoinNum int64 `json:"coin_num"`
|
|
|
}
|
|
|
|
|
|
type UserInfo struct {
|
|
|
S2S
|
|
|
|
|
|
user *model.ProjectUser
|
|
|
log *model.ProjectUserInfoLog
|
|
|
}
|
|
|
|
|
|
func NewUserInfo(ctx context.Context, user *model.ProjectUser, urlId int64, opts ...Option) (*UserInfo, error) {
|
|
|
c := &UserInfo{
|
|
|
user: user,
|
|
|
}
|
|
|
|
|
|
err := c.init(ctx, user.ProjectID, urlId, opts...)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
return c, nil
|
|
|
}
|
|
|
|
|
|
// UserInfo 获取用户信息
|
|
|
func (s *UserInfo) UserInfo(langMark string) (res *UserInfoRespData, err error) {
|
|
|
var resp, errMsg string
|
|
|
var code int32
|
|
|
defer func() {
|
|
|
s.after(code, resp, errMsg)
|
|
|
}()
|
|
|
|
|
|
req := mtype.ProjectUserInfoReq{
|
|
|
UserId: s.user.UserID,
|
|
|
}
|
|
|
|
|
|
s.before(req)
|
|
|
|
|
|
body, _ := jsonm.Marshal(req)
|
|
|
resp, code, err = s.request(s.log.ID, body, langMark, prefixBearer, NewCertToken)
|
|
|
if err != nil {
|
|
|
errMsg = fmt.Sprintf("请求处理失败: %v", err)
|
|
|
err = workerr.S2SNotSuccessError
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var data = &UserInfoResp{}
|
|
|
err = jsonm.StrUnmarshal(resp, data)
|
|
|
if err != nil || data.Data == nil {
|
|
|
errMsg = fmt.Sprintf("无法解析的返回数据: %v", err)
|
|
|
err = workerr.S2SUnableToParseError
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if data.Code != successCode {
|
|
|
errMsg = "code返回的非200,请确认业务是否正确对接"
|
|
|
if data.Msg != "" {
|
|
|
errMsg = fmt.Sprintf("code返回的非200, 提供的信息为: %s", data.Msg)
|
|
|
}
|
|
|
err = workerr.S2SNotSuccessError
|
|
|
return
|
|
|
}
|
|
|
|
|
|
res = data.Data
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func (s *UserInfo) before(req mtype.ProjectUserInfoReq) {
|
|
|
s.log = withdefault.ProjectUserInfoLog(&model.ProjectUserInfoLog{
|
|
|
ProjectID: s.user.ProjectID,
|
|
|
UserID: s.user.ID,
|
|
|
ReqURL: s.GetUrl(),
|
|
|
})
|
|
|
|
|
|
s.log.SetReq(req)
|
|
|
_ = s.GetDao().ProjectUserInfoLog.WithContext(s.Ctx).Create(s.log)
|
|
|
|
|
|
s.start = time.Now()
|
|
|
}
|
|
|
|
|
|
func (s *UserInfo) after(code int32, resp, errMsg string) {
|
|
|
s.log.RespCode = code
|
|
|
s.log.Resp = resp
|
|
|
s.log.ErrMsg = errMsg
|
|
|
s.log.Token = s.GetToken()
|
|
|
s.log.ReqHeader = s.GetHeader()
|
|
|
s.log.ReqTime = time.Since(s.start).Milliseconds()
|
|
|
|
|
|
_ = s.GetDao().ProjectUserInfoLog.WithContext(s.Ctx).Save(s.log)
|
|
|
}
|