2025-02-05 18:45:49 +08:00
|
|
|
|
package logic
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2025-02-07 15:18:26 +08:00
|
|
|
|
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/app/auth_service/auth_service"
|
|
|
|
|
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/app/auth_service/internal/svc"
|
2025-02-10 17:30:29 +08:00
|
|
|
|
"gitea.youtukeji.com.cn/xiabin/youtu_grpc/app/user_management/user_management"
|
2025-02-05 18:45:49 +08:00
|
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Code2SessionLogic struct {
|
|
|
|
|
ctx context.Context
|
|
|
|
|
svcCtx *svc.ServiceContext
|
|
|
|
|
logx.Logger
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewCode2SessionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Code2SessionLogic {
|
|
|
|
|
return &Code2SessionLogic{
|
|
|
|
|
ctx: ctx,
|
|
|
|
|
svcCtx: svcCtx,
|
|
|
|
|
Logger: logx.WithContext(ctx),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *Code2SessionLogic) Code2Session(in *auth_service.Code2SessionRequest) (*auth_service.Code2SessionResponse, error) {
|
2025-02-10 17:30:29 +08:00
|
|
|
|
//获取cli,调用抖音或者微信api
|
2025-02-06 15:35:23 +08:00
|
|
|
|
cli, err := l.svcCtx.Cli.Get(in.AppId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
res, err := cli.Code2Session(l.ctx, in.Code, in.AnonymousCode)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2025-02-10 17:30:29 +08:00
|
|
|
|
|
|
|
|
|
//获取appId
|
|
|
|
|
ac := l.svcCtx.Query.AppAccount
|
|
|
|
|
acModel, err := ac.WithContext(l.ctx).Where(ac.AppID.Eq(in.AppId)).First()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取用户id
|
|
|
|
|
au := l.svcCtx.Query.AppUser
|
|
|
|
|
auModel, err := au.WithContext(l.ctx).Where(au.AppAccountID.Eq(acModel.ID), au.Openid.Eq(res.OpenID)).FirstOrCreate()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果没有用户id,则创建一个空用户
|
|
|
|
|
if auModel.UserID == nil {
|
|
|
|
|
userId, err := l.svcCtx.UserManagerClient.CreateEmptyUser(l.ctx, &user_management.Empty{})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
auModel.UserID = &userId.UserId
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-06 15:35:23 +08:00
|
|
|
|
return &auth_service.Code2SessionResponse{
|
|
|
|
|
OpenId: res.OpenID,
|
|
|
|
|
UnionId: res.UnionID,
|
2025-02-10 17:30:29 +08:00
|
|
|
|
UserId: *auModel.UserID,
|
2025-02-06 15:35:23 +08:00
|
|
|
|
}, nil
|
2025-02-05 18:45:49 +08:00
|
|
|
|
}
|