createUserLogic.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package user
  2. import (
  3. "context"
  4. "strings"
  5. "time"
  6. "perms-system-server/internal/consts"
  7. authHelper "perms-system-server/internal/logic/auth"
  8. userModel "perms-system-server/internal/model/user"
  9. "perms-system-server/internal/response"
  10. "perms-system-server/internal/svc"
  11. "perms-system-server/internal/types"
  12. "perms-system-server/internal/util"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. "golang.org/x/crypto/bcrypt"
  15. )
  16. type CreateUserLogic struct {
  17. logx.Logger
  18. ctx context.Context
  19. svcCtx *svc.ServiceContext
  20. }
  21. func NewCreateUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateUserLogic {
  22. return &CreateUserLogic{
  23. Logger: logx.WithContext(ctx),
  24. ctx: ctx,
  25. svcCtx: svcCtx,
  26. }
  27. }
  28. func (l *CreateUserLogic) CreateUser(req *types.CreateUserReq) (resp *types.IdResp, err error) {
  29. if err := authHelper.RequireProductAdmin(l.ctx); err != nil {
  30. return nil, err
  31. }
  32. if req.Email != "" && !util.IsValidEmail(req.Email) {
  33. return nil, response.ErrBadRequest("邮箱格式不正确")
  34. }
  35. if req.Phone != "" && !util.IsValidPhone(req.Phone) {
  36. return nil, response.ErrBadRequest("手机号格式不正确")
  37. }
  38. _, findErr := l.svcCtx.SysUserModel.FindOneByUsername(l.ctx, req.Username)
  39. if findErr == nil {
  40. return nil, response.ErrConflict("用户名已存在")
  41. }
  42. hashedPwd, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost)
  43. if err != nil {
  44. return nil, err
  45. }
  46. now := time.Now().Unix()
  47. result, err := l.svcCtx.SysUserModel.Insert(l.ctx, &userModel.SysUser{
  48. Username: req.Username,
  49. Password: string(hashedPwd),
  50. Nickname: req.Nickname,
  51. Email: req.Email,
  52. Phone: req.Phone,
  53. Remark: req.Remark,
  54. DeptId: req.DeptId,
  55. IsSuperAdmin: consts.IsSuperAdminNo,
  56. MustChangePassword: consts.MustChangePasswordNo,
  57. Status: consts.StatusEnabled,
  58. CreateTime: now,
  59. UpdateTime: now,
  60. })
  61. if err != nil {
  62. if strings.Contains(err.Error(), "1062") || strings.Contains(err.Error(), "Duplicate entry") {
  63. return nil, response.ErrConflict("用户名已存在")
  64. }
  65. return nil, err
  66. }
  67. id, _ := result.LastInsertId()
  68. return &types.IdResp{Id: id}, nil
  69. }