fix: some api bug

This commit is contained in:
wwweww
2026-03-31 22:12:06 +08:00
parent c5ff4f0216
commit e7970ac25f
219 changed files with 16195 additions and 2126 deletions
@@ -0,0 +1,113 @@
package logic
import (
"context"
"encoding/json"
"errors"
"juwan-backend/app/snowflake/rpc/snowflake"
"juwan-backend/app/user_verifications/rpc/internal/models"
"juwan-backend/app/user_verifications/rpc/internal/models/schema"
"juwan-backend/app/user_verifications/rpc/internal/models/userverifications"
"juwan-backend/app/user_verifications/rpc/internal/svc"
"juwan-backend/app/user_verifications/rpc/pb"
"juwan-backend/app/users/rpc/usercenter"
"slices"
"github.com/zeromicro/go-zero/core/logx"
)
type AddOrUpdateUserVerificationsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewAddOrUpdateUserVerificationsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddOrUpdateUserVerificationsLogic {
return &AddOrUpdateUserVerificationsLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *AddOrUpdateUserVerificationsLogic) AddOrUpdateUserVerifications(in *pb.AddOrUpdateUserVerificationsReq) (*pb.AddOrUpdateUserVerificationsResp, error) {
NotFoundError := &models.NotFoundError{}
var materials schema.MaterialStruct
uv, vErr := l.svcCtx.UserVeriModelRO.Query().
Where(
userverifications.UserIDEQ(in.UserId),
userverifications.RoleEQ(in.Role),
userverifications.StatusNEQ("rejected"),
).
First(l.ctx)
if vErr != nil && !errors.As(vErr, &NotFoundError) {
logx.Errorf("add or update user verifications: get user err:%v", vErr)
return nil, errors.New("")
}
isRole, err := l.checkIsRole(in.UserId, in.Role)
if err != nil {
logx.Errorf("add or update user verifications: check user err:%v", err)
return nil, errors.New("check user role failed")
}
if isRole {
return nil, errors.New("user already has the role")
}
jsonErr := json.Unmarshal([]byte(in.Material), &materials)
if jsonErr != nil {
logx.Errorf("add or update user verifications: marshal materials err:%v", jsonErr)
return nil, errors.New("invalid materials")
}
idResp, rpcErr := l.svcCtx.SnowflakeRpc.NextId(l.ctx, &snowflake.NextIdReq{})
if errors.As(vErr, &NotFoundError) {
if rpcErr != nil {
logx.Errorf("add or update user verifications: get next id err:%v", rpcErr)
return nil, errors.New("generate id failed: ")
}
uv, err = l.svcCtx.UserVeriModelRW.Create().
SetID(idResp.Id).
SetUserID(in.UserId).
SetRole(in.Role).
SetMaterials(materials).
SetRejectReason("").
SetReviewedBy(0).
Save(l.ctx)
if err != nil {
logx.Errorf("add or update user verifications: create user verifications err:%v", err)
return nil, errors.New("create user verifications failed")
}
} else {
uv, err = uv.Update().
SetRole(in.Role).
SetMaterials(materials).
Save(l.ctx)
if err != nil {
logx.Errorf("add or update user verifications: update user verifications err:%v", err)
return nil, errors.New("update user verifications failed")
}
}
return &pb.AddOrUpdateUserVerificationsResp{
Success: true,
}, nil
}
func (l *AddOrUpdateUserVerificationsLogic) checkIsRole(userid int64, role string) (bool, error) {
user, err := l.svcCtx.UserRpc.GetUsersById(l.ctx, &usercenter.GetUsersByIdReq{
Id: userid,
})
logx.Debug("checkIsRole user:", user)
if err != nil {
return false, err
}
logx.Debug("checkIsRole user verified roles:", user.Users.VerifiedRoles)
if slices.Contains(user.Users.VerifiedRoles, role) {
return true, nil
}
return false, nil
}
@@ -0,0 +1,58 @@
package logic
import (
"context"
"errors"
"juwan-backend/app/user_verifications/rpc/internal/models/userverifications"
"juwan-backend/app/user_verifications/rpc/internal/svc"
"juwan-backend/app/user_verifications/rpc/pb"
"github.com/jinzhu/copier"
"github.com/zeromicro/go-zero/core/logx"
)
type ListUserVerificationsByUserIdLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewListUserVerificationsByUserIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListUserVerificationsByUserIdLogic {
return &ListUserVerificationsByUserIdLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *ListUserVerificationsByUserIdLogic) ListUserVerificationsByUserId(in *pb.ListUserVerificationsByUserIdReq) (*pb.ListUserVerificationsByUserIdResp, error) {
all, err := l.svcCtx.UserVeriModelRO.Query().
Where(userverifications.UserIDEQ(in.UserId)).
All(l.ctx)
if err != nil {
logx.Errorf("ListUserVerificationsByUserId err: %v", err)
return nil, errors.New("list user verifications by user id err")
}
list := make([]*pb.UserVerifications, 0, len(all))
for _, v := range all {
var temp pb.UserVerifications
err = copier.Copy(&temp, v)
if err != nil {
logx.Errorf("copy user verifications err: %v", err)
continue
}
temp.CreatedAt = v.CreatedAt.Unix()
temp.UpdatedAt = v.UpdatedAt.Unix()
if v.ReviewedAt != nil {
temp.ReviewedAt = v.ReviewedAt.Unix()
}
list = append(list, &temp)
}
return &pb.ListUserVerificationsByUserIdResp{
UserVerifications: list,
}, nil
}
@@ -31,11 +31,7 @@ func (l *SearchUserVerificationsLogic) SearchUserVerifications(in *pb.SearchUser
logx.Errorf("Limit exceeds max limit: %d", in.Limit)
return nil, errors.New("limit exceeds max limit")
}
verifications, err := l.svcCtx.UserVeriModelRO.Query().Where(userverifications.Or(
userverifications.UserIDEQ(in.UserId),
userverifications.StatusEQ(in.Status),
userverifications.Role(in.Role),
)).
verifications, err := l.svcCtx.UserVeriModelRO.Query().Where(userverifications.UserIDEQ(in.UserId)).
Offset(int(in.Page * in.Limit)).
Limit(int(in.Limit)).
All(l.ctx)