user.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package service
  2. import (
  3. "context"
  4. "errors"
  5. "icloudapp.cn/tools/entity"
  6. _ "icloudapp.cn/tools/entity"
  7. "icloudapp.cn/tools/repository/mysql"
  8. _ "icloudapp.cn/tools/repository/mysql"
  9. "icloudapp.cn/tools/util"
  10. )
  11. type User struct {
  12. ctx context.Context
  13. }
  14. func NewUser(ctx context.Context) *User {
  15. return &User{ctx}
  16. }
  17. func (u *User) TableName() string {
  18. return "user"
  19. }
  20. func (u *User) UserInfoByID(uid int64) (entity.UserInfo, error) {
  21. var userInfo entity.UserInfo
  22. var user entity.User
  23. result := mysql.DBConn.Select(
  24. "uid",
  25. "nickname",
  26. "password",
  27. "salt",
  28. "avatar",
  29. "create_at",
  30. "update_at",
  31. ).Where("uid = ?", uid).Table(u.TableName()).Find(&user)
  32. if result.Error != nil {
  33. userInfo.Code = entity.CodeServerBusy
  34. userInfo.Msg = result.Error.Error()
  35. return userInfo, result.Error
  36. }
  37. if result.RowsAffected == 0 {
  38. user.Uid = 0
  39. userInfo.Code = entity.CodeDataDoesNotExist
  40. }
  41. userInfo.Body = user
  42. return userInfo, nil
  43. }
  44. // UserInfoByUsername 通过nickname获取用户信息
  45. func (u *User) UserInfoByUsername(username string) (userInfo *entity.User, err error) {
  46. result := mysql.DBConn.Select(
  47. "uid",
  48. "nickname",
  49. "password",
  50. "salt",
  51. "avatar",
  52. "create_at",
  53. "update_at",
  54. ).Where("nickname = ?", username).Table(u.TableName()).Find(&userInfo)
  55. if result.Error != nil {
  56. return userInfo, util.NewError(result.Error.Error())
  57. }
  58. if result.RowsAffected == 0 {
  59. userInfo.Uid = 0
  60. }
  61. return userInfo, nil
  62. }
  63. // UserInfoByEmail 通过邮箱获取用户信息
  64. func (u *User) UserInfoByEmail(email string) (userInfo *entity.User, err error) {
  65. result := mysql.DBConn.Select(
  66. "uid",
  67. "nickname",
  68. "password",
  69. "salt",
  70. "avatar",
  71. "create_at",
  72. "update_at",
  73. ).Where("email = ?", email).Table(u.TableName()).Find(&userInfo)
  74. if result.Error != nil {
  75. return nil, util.NewError(result.Error.Error())
  76. }
  77. if result.RowsAffected == 0 {
  78. userInfo.Email = ""
  79. }
  80. return userInfo, nil
  81. }
  82. // Register 用户注册
  83. func (u *User) Register(register entity.User) (userInfo entity.UserInfo, err error) {
  84. //check nickname, email 是否已注册
  85. existUsername, errInfo := u.UserInfoByUsername(register.Username)
  86. if errInfo != nil {
  87. userInfo.Msg = entity.CodeServerBusy.Msg()
  88. userInfo.Code = entity.CodeServerBusy
  89. return userInfo, errors.New(errInfo.Error())
  90. }
  91. if existUsername.Uid > 0 {
  92. userInfo.Msg = "用户名已经被注册"
  93. userInfo.Code = entity.CodeUserExist
  94. userInfo.Body = *existUsername
  95. return userInfo, entity.CodeUserExist.Error()
  96. }
  97. existEmail, err := u.UserInfoByEmail(register.Email)
  98. if err != nil {
  99. userInfo.Msg = entity.CodeServerBusy.Msg()
  100. userInfo.Code = entity.CodeServerBusy
  101. return userInfo, errors.New(errInfo.Error())
  102. }
  103. if existEmail.Uid > 0 {
  104. userInfo.Msg = entity.CodeEmailExist.Msg()
  105. userInfo.Code = entity.CodeEmailExist
  106. userInfo.Body = *existEmail
  107. return userInfo, entity.CodeEmailExist.Error()
  108. }
  109. dbErr := mysql.DBConn.Table(u.TableName()).Create(&register)
  110. if dbErr.Error != nil {
  111. return userInfo, errors.New(dbErr.Error.Error())
  112. }
  113. userInfo.Body = register
  114. return userInfo, nil
  115. }