user.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package api
  2. import (
  3. "errors"
  4. "moutai/log"
  5. "time"
  6. "moutai/db/model"
  7. "moutai/db/repo"
  8. "moutai/utils"
  9. "github.com/gin-gonic/gin"
  10. "go.mongodb.org/mongo-driver/bson"
  11. "go.mongodb.org/mongo-driver/bson/primitive"
  12. )
  13. func UserLoginPassword(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  14. var form model.User
  15. err := c.ShouldBindJSON(&form)
  16. if err != nil {
  17. return nil, err
  18. }
  19. // 正常用户登录
  20. user := &model.User{}
  21. found, err := repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
  22. CollectName: repo.CollectionUser,
  23. Query: repo.Map{
  24. "loginName": form.LoginName,
  25. "password": utils.UtilMd5(form.Password),
  26. },
  27. }, user)
  28. if err != nil {
  29. return nil, err
  30. }
  31. if !found {
  32. return nil, errors.New("账号/密码不正确!")
  33. }
  34. if *user.State == -1 {
  35. return nil, errors.New("该账号已被禁用!")
  36. }
  37. jwtU := &JWTUser{ID: user.GetID()}
  38. token, _, err := apictx.Svc.JWT.JwtCreateToken(jwtU)
  39. if err != nil {
  40. return nil, err
  41. }
  42. // 前端返回处理
  43. user.Password = ""
  44. out := map[string]interface{}{
  45. "token": token,
  46. "user": user,
  47. }
  48. return out, nil
  49. }
  50. // 用户唯一
  51. // db.users.createIndex({ loginName: 1 }, { unique: true })
  52. func CreateUser(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  53. user := &model.User{}
  54. err := c.ShouldBindJSON(&user)
  55. if err != nil {
  56. log.Error(err)
  57. return nil, err
  58. }
  59. // 验证登录名是否存在
  60. found, err := repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
  61. CollectName: repo.CollectionUser,
  62. Query: repo.Map{"loginName": user.LoginName},
  63. }, user)
  64. if err != nil {
  65. return nil, err
  66. }
  67. if found {
  68. return nil, errors.New("该账号已存在")
  69. }
  70. // 正常状态
  71. state := 1
  72. user.State = &state
  73. user.Password = UtilMd5(user.Password)
  74. user.CreateTime = time.Now()
  75. user.UpdateTime = time.Now()
  76. return repo.RepoAddDoc(apictx.CreateRepoCtx(), repo.CollectionUser, &user)
  77. }
  78. func DeleteUser(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  79. _id := c.Param("id")
  80. id, _ := primitive.ObjectIDFromHex(_id)
  81. if id.IsZero() {
  82. return nil, errors.New("id错误")
  83. }
  84. return repo.RepoDeleteDoc(apictx.CreateRepoCtx(), repo.CollectionUser, _id)
  85. }
  86. // 用户列表
  87. // /user/list?roleId=xxx&name=xxx
  88. func UserList(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  89. page, size, query := UtilQueryPageSize(c)
  90. _roleId := c.Query("roleId")
  91. roleId, _ := primitive.ObjectIDFromHex(_roleId)
  92. name := c.Query("name")
  93. if !roleId.IsZero() {
  94. query["roleId"] = roleId
  95. }
  96. if len(name) > 0 {
  97. query["name"] = bson.M{"$regex": name, "$options": "$i"}
  98. }
  99. result, err := repo.RepoPageSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
  100. CollectName: repo.CollectionUser,
  101. Page: page,
  102. Size: size,
  103. Query: query,
  104. Sort: bson.D{bson.E{Key: "createTime", Value: -1}, bson.E{Key: "_id", Value: -1}},
  105. Project: []string{"roleId", "name", "loginName", "avatar", "state", "createTime", "updateTime"},
  106. })
  107. role := model.Role{}
  108. if len(result.List) > 0 {
  109. for i, u := range result.List {
  110. if v, ok := u["roleId"]; ok {
  111. // 查询角色信息
  112. roleId := v.(primitive.ObjectID)
  113. repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
  114. CollectName: repo.CollectionRoles,
  115. Query: repo.Map{"_id": roleId},
  116. }, &role)
  117. }
  118. // 拼接角色信息
  119. result.List[i]["roleInfo"] = &role
  120. }
  121. }
  122. return result, err
  123. }
  124. func UpdateUser(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  125. user := &model.User{}
  126. err := c.ShouldBindJSON(&user)
  127. if err != nil {
  128. log.Error(err)
  129. return nil, err
  130. }
  131. if user.Id.IsZero() {
  132. return nil, errors.New("id错误")
  133. }
  134. if len(user.Password) > 0 {
  135. user.Password = UtilMd5(user.Password)
  136. }
  137. return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), repo.CollectionUser, user.Id.Hex(), user)
  138. }
  139. func DisableUser(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  140. _id := c.Param("id")
  141. id, _ := primitive.ObjectIDFromHex(_id)
  142. if id.IsZero() {
  143. return nil, errors.New("id错误")
  144. }
  145. state := -1
  146. return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), repo.CollectionUser, _id, model.User{State: &state})
  147. }
  148. func EnableUser(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  149. _id := c.Param("id")
  150. id, _ := primitive.ObjectIDFromHex(_id)
  151. if id.IsZero() {
  152. return nil, errors.New("id错误")
  153. }
  154. state := 1
  155. return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), repo.CollectionUser, _id, model.User{State: &state})
  156. }
  157. // 获取自己的信息
  158. func UserProfile(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  159. return GetUserById(apictx, apictx.User.ID)
  160. }
  161. // 根据id获取用户信息
  162. func GetUserById(apictx *ApiSession, id string) (*model.User, error) {
  163. user := &model.User{}
  164. found, err := repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
  165. CollectName: repo.CollectionUser,
  166. Query: repo.Map{"_id": id},
  167. }, user)
  168. if err != nil {
  169. log.Error(err)
  170. return nil, err
  171. }
  172. if !found {
  173. return nil, errors.New("未找到该数据")
  174. }
  175. role := model.Role{}
  176. repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
  177. CollectName: repo.CollectionRoles,
  178. Query: repo.Map{"_id": user.RoleId},
  179. }, &role)
  180. user.RoleInfo = &role
  181. user.Password = ""
  182. return user, nil
  183. }