user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package model
  2. import (
  3. "fmt"
  4. "sparrow/pkg/models"
  5. "github.com/jinzhu/gorm"
  6. )
  7. // SignedString 签名
  8. const SignedString = "www.yehaoji.com"
  9. const (
  10. ErrUserNameOrPassCode = 20001
  11. ErrUserNameExsitCode = 20002
  12. ErrPhoneExistCode = 20003
  13. ErrEmailExistCode = 20004
  14. )
  15. type User struct {
  16. db *gorm.DB
  17. }
  18. // Init 初始化
  19. func (a *User) Init(_db *gorm.DB) *User {
  20. a.db = _db
  21. return a
  22. }
  23. // Create create
  24. func (a *User) Create(user *models.User) error {
  25. return a.db.Save(user).Error
  26. }
  27. // LoginCheck 登陆检测
  28. func (a *User) LoginCheck(loginname, loginpass string) (bool, *models.User, error) {
  29. user := &models.User{}
  30. err := a.db.
  31. Where("(user_name = ? or phone = ? or email = ?) AND user_pass = ?",
  32. loginname,
  33. loginname,
  34. loginname,
  35. loginpass).First(user).
  36. Error
  37. if err != nil {
  38. return false, nil, err
  39. }
  40. if user.ID > 0 {
  41. vendor := models.Vendor{}
  42. // check cache
  43. cache := getCache()
  44. key := fmt.Sprintf("Vendor:%d", user.VendorID)
  45. if v, ok := cache.Get(key); ok {
  46. user.Vendor = v.(models.Vendor)
  47. } else {
  48. a.db.Model(user).Related(&vendor)
  49. cache.Set(key, vendor)
  50. user.Vendor = vendor
  51. }
  52. return true, user, nil
  53. }
  54. return false, nil, nil
  55. }
  56. // UpdatePassword 更新密码
  57. func (a *User) UpdatePassword(userid uint, oldpass, newpass string) (bool, error) {
  58. var count int
  59. user := &models.User{}
  60. err := a.db.Model(user).Where(map[string]interface{}{
  61. "id": userid,
  62. "user_pass": oldpass,
  63. }).Count(&count).Error
  64. //.Update("user_pass", newpass).Error
  65. if err != nil {
  66. return false, err
  67. }
  68. if count > 0 {
  69. err = a.db.Model(user).Where(userid).Update("user_pass", newpass).Error
  70. if err != nil {
  71. return false, err
  72. }
  73. } else {
  74. return false, nil
  75. }
  76. return true, nil
  77. }
  78. // CheckUserName 检测用户名
  79. func (a *User) CheckUserName(name string) (bool, error) {
  80. user := models.User{}
  81. var count int
  82. err := a.db.First(&user).
  83. Where("user_name = ?", name).Count(&count).Error
  84. if err != nil && err == gorm.ErrRecordNotFound {
  85. return false, nil
  86. }
  87. if count > 0 {
  88. return true, nil
  89. }
  90. return false, nil
  91. }
  92. // CheckPhone 检测手机号
  93. func (a *User) CheckPhone(name string) (bool, error) {
  94. user := models.User{}
  95. var count int
  96. err := a.db.First(&user).
  97. Where("user_name = ?", name).Count(&count).Error
  98. if err != nil && err == gorm.ErrRecordNotFound {
  99. return false, nil
  100. }
  101. if count > 0 {
  102. return true, nil
  103. }
  104. return false, nil
  105. }
  106. // CheckEmail 检测Email
  107. func (a *User) CheckEmail(name string) (bool, error) {
  108. user := models.User{}
  109. var count int
  110. err := a.db.First(&user).
  111. Where("user_name = ?", name).Count(&count).Error
  112. if err != nil && err == gorm.ErrRecordNotFound {
  113. return false, nil
  114. }
  115. if count > 0 {
  116. return true, nil
  117. }
  118. return false, nil
  119. }