package user import ( "context" "time" "photography-backend/internal/model" "photography-backend/internal/svc" "photography-backend/internal/types" "photography-backend/pkg/errorx" "photography-backend/pkg/utils/hash" "github.com/zeromicro/go-zero/core/logx" ) type CreateUserLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 创建用户 func NewCreateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateUserLogic { return &CreateUserLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *CreateUserLogic) CreateUser(req *types.CreateUserRequest) (resp *types.CreateUserResponse, err error) { // 检查用户名是否已存在 existingUser, err := l.svcCtx.UserModel.FindOneByUsername(l.ctx, req.Username) if err == nil && existingUser != nil { return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.UserExists, Message: "用户名已存在", }, }, nil } // 检查邮箱是否已存在 existingUser, err = l.svcCtx.UserModel.FindOneByEmail(l.ctx, req.Email) if err == nil && existingUser != nil { return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.UserExists, Message: "邮箱已存在", }, }, nil } // 密码加密 hashedPassword, err := hash.HashPassword(req.Password) if err != nil { logx.WithContext(l.ctx).Error("密码加密失败: ", err) return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.ServerError, Message: "密码加密失败", }, }, nil } // 创建用户 user := &model.User{ Username: req.Username, Email: req.Email, Password: hashedPassword, Avatar: "", // 默认空头像 Status: 1, // 默认启用状态 CreatedAt: time.Now(), UpdatedAt: time.Now(), } result, err := l.svcCtx.UserModel.Insert(l.ctx, user) if err != nil { logx.WithContext(l.ctx).Error("创建用户失败: ", err) return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.ServerError, Message: "创建用户失败", }, }, nil } // 获取新创建用户的ID userId, err := result.LastInsertId() if err != nil { logx.WithContext(l.ctx).Error("获取用户ID失败: ", err) return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.ServerError, Message: "获取用户ID失败", }, }, nil } // 返回用户信息(不包含密码) return &types.CreateUserResponse{ BaseResponse: types.BaseResponse{ Code: errorx.Success, Message: "创建用户成功", }, Data: types.User{ Id: userId, Username: user.Username, Email: user.Email, Avatar: user.Avatar, Status: int(user.Status), CreatedAt: user.CreatedAt.Unix(), UpdatedAt: user.UpdatedAt.Unix(), }, }, nil }