user.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. package daytask
  2. import (
  3. "app/commons/model/entity"
  4. "github.com/gin-gonic/gin"
  5. )
  6. // UserInfo 用户信息
  7. func (s *Server) UserInfo(c *gin.Context) {
  8. ctx := s.FromContext(c)
  9. db := s.DB()
  10. userId := ctx.UserId()
  11. user := &entity.DtUser{}
  12. if err := db.Where("id = ?", userId).First(user).Error; err != nil {
  13. ctx.Fail("user_not_found")
  14. return
  15. }
  16. // 获取用户等级
  17. level := &entity.DtUserLevel{}
  18. db.Where("id = ?", user.LevelId).First(level)
  19. ctx.OK(gin.H{
  20. "user": user,
  21. "level": level,
  22. })
  23. }
  24. // UserUpdate 更新用户信息
  25. func (s *Server) UserUpdate(c *gin.Context) {
  26. ctx := s.FromContext(c)
  27. db := s.DB()
  28. userId := ctx.UserId()
  29. type UpdateRequest struct {
  30. Nickname string `json:"nickname"`
  31. Avatar string `json:"avatar"`
  32. RealName string `json:"realName"`
  33. IdCard string `json:"idCard"`
  34. }
  35. var req UpdateRequest
  36. if err := c.ShouldBindJSON(&req); err != nil {
  37. ctx.Fail("invalid_params")
  38. return
  39. }
  40. updates := make(map[string]interface{})
  41. if req.Nickname != "" {
  42. updates["nickname"] = req.Nickname
  43. }
  44. if req.Avatar != "" {
  45. updates["avatar"] = req.Avatar
  46. }
  47. // 实名信息只能设置一次
  48. user := &entity.DtUser{}
  49. db.Where("id = ?", userId).First(user)
  50. if req.RealName != "" && user.RealName == "" {
  51. updates["real_name"] = req.RealName
  52. }
  53. if req.IdCard != "" && user.IdCard == "" {
  54. updates["id_card"] = req.IdCard
  55. updates["is_real_name"] = 1
  56. }
  57. if len(updates) > 0 {
  58. db.Model(&entity.DtUser{}).Where("id = ?", userId).Updates(updates)
  59. }
  60. ctx.OK(nil)
  61. }
  62. // UserPassword 修改密码
  63. func (s *Server) UserPassword(c *gin.Context) {
  64. ctx := s.FromContext(c)
  65. db := s.DB()
  66. userId := ctx.UserId()
  67. type PasswordRequest struct {
  68. OldPassword string `json:"oldPassword" binding:"required"`
  69. NewPassword string `json:"newPassword" binding:"required,min=6"`
  70. }
  71. var req PasswordRequest
  72. if err := c.ShouldBindJSON(&req); err != nil {
  73. ctx.Fail("invalid_params")
  74. return
  75. }
  76. user := &entity.DtUser{}
  77. if err := db.Where("id = ?", userId).First(user).Error; err != nil {
  78. ctx.Fail("user_not_found")
  79. return
  80. }
  81. // TODO: 验证旧密码 (需要加密比对)
  82. // if !verifyPassword(req.OldPassword, user.Password) {
  83. // ctx.Fail("old_password_error")
  84. // return
  85. // }
  86. // TODO: 加密新密码
  87. // newPasswordHash := hashPassword(req.NewPassword)
  88. db.Model(&entity.DtUser{}).Where("id = ?", userId).Update("password", req.NewPassword)
  89. ctx.OK(nil)
  90. }
  91. // UserAvatar 修改头像
  92. func (s *Server) UserAvatar(c *gin.Context) {
  93. ctx := s.FromContext(c)
  94. db := s.DB()
  95. userId := ctx.UserId()
  96. type AvatarRequest struct {
  97. Avatar string `json:"avatar" binding:"required"`
  98. }
  99. var req AvatarRequest
  100. if err := c.ShouldBindJSON(&req); err != nil {
  101. ctx.Fail("invalid_params")
  102. return
  103. }
  104. db.Model(&entity.DtUser{}).Where("id = ?", userId).Update("avatar", req.Avatar)
  105. ctx.OK(nil)
  106. }
  107. // PaymentList 收款账户列表
  108. func (s *Server) PaymentList(c *gin.Context) {
  109. ctx := s.FromContext(c)
  110. db := s.DB()
  111. userId := ctx.UserId()
  112. payments := make([]*entity.DtUserPayment, 0)
  113. db.Model(&entity.DtUserPayment{}).
  114. Where("user_id = ? AND status = ?", userId, 1).
  115. Order("is_default DESC, id DESC").
  116. Find(&payments)
  117. ctx.OK(payments)
  118. }
  119. // PaymentAdd 添加收款账户
  120. func (s *Server) PaymentAdd(c *gin.Context) {
  121. ctx := s.FromContext(c)
  122. db := s.DB()
  123. userId := ctx.UserId()
  124. type PaymentRequest struct {
  125. Type string `json:"type" binding:"required"`
  126. Name string `json:"name"`
  127. Account string `json:"account" binding:"required"`
  128. BankName string `json:"bankName"`
  129. BankBranch string `json:"bankBranch"`
  130. Qrcode string `json:"qrcode"`
  131. }
  132. var req PaymentRequest
  133. if err := c.ShouldBindJSON(&req); err != nil {
  134. ctx.Fail("invalid_params")
  135. return
  136. }
  137. // 检查是否已存在相同类型的账户
  138. var count int64
  139. db.Model(&entity.DtUserPayment{}).
  140. Where("user_id = ? AND type = ? AND account = ?", userId, req.Type, req.Account).
  141. Count(&count)
  142. if count > 0 {
  143. ctx.Fail("payment_exists")
  144. return
  145. }
  146. // 检查是否有默认账户
  147. var defaultCount int64
  148. db.Model(&entity.DtUserPayment{}).
  149. Where("user_id = ? AND is_default = ?", userId, 1).
  150. Count(&defaultCount)
  151. payment := &entity.DtUserPayment{
  152. UserId: userId,
  153. Type: req.Type,
  154. Name: req.Name,
  155. Account: req.Account,
  156. BankName: req.BankName,
  157. BankBranch: req.BankBranch,
  158. Qrcode: req.Qrcode,
  159. IsDefault: 0,
  160. Status: 1,
  161. }
  162. // 如果没有默认账户,设为默认
  163. if defaultCount == 0 {
  164. payment.IsDefault = 1
  165. }
  166. db.Create(payment)
  167. ctx.OK(payment)
  168. }
  169. // PaymentDelete 删除收款账户
  170. func (s *Server) PaymentDelete(c *gin.Context) {
  171. ctx := s.FromContext(c)
  172. db := s.DB()
  173. userId := ctx.UserId()
  174. type DeleteRequest struct {
  175. Id int64 `json:"id" binding:"required"`
  176. }
  177. var req DeleteRequest
  178. if err := c.ShouldBindJSON(&req); err != nil {
  179. ctx.Fail("invalid_params")
  180. return
  181. }
  182. db.Where("id = ? AND user_id = ?", req.Id, userId).Delete(&entity.DtUserPayment{})
  183. ctx.OK(nil)
  184. }
  185. // PaymentDefault 设置默认账户
  186. func (s *Server) PaymentDefault(c *gin.Context) {
  187. ctx := s.FromContext(c)
  188. db := s.DB()
  189. userId := ctx.UserId()
  190. type DefaultRequest struct {
  191. Id int64 `json:"id" binding:"required"`
  192. }
  193. var req DefaultRequest
  194. if err := c.ShouldBindJSON(&req); err != nil {
  195. ctx.Fail("invalid_params")
  196. return
  197. }
  198. // 取消其他默认
  199. db.Model(&entity.DtUserPayment{}).
  200. Where("user_id = ?", userId).
  201. Update("is_default", 0)
  202. // 设置新默认
  203. db.Model(&entity.DtUserPayment{}).
  204. Where("id = ? AND user_id = ?", req.Id, userId).
  205. Update("is_default", 1)
  206. ctx.OK(nil)
  207. }
  208. // SocialList 社交账号列表
  209. func (s *Server) SocialList(c *gin.Context) {
  210. ctx := s.FromContext(c)
  211. db := s.DB()
  212. userId := ctx.UserId()
  213. socials := make([]*entity.DtUserSocial, 0)
  214. db.Model(&entity.DtUserSocial{}).
  215. Where("user_id = ?", userId).
  216. Find(&socials)
  217. ctx.OK(socials)
  218. }
  219. // SocialBind 绑定社交账号
  220. func (s *Server) SocialBind(c *gin.Context) {
  221. ctx := s.FromContext(c)
  222. db := s.DB()
  223. userId := ctx.UserId()
  224. type BindRequest struct {
  225. Platform string `json:"platform" binding:"required"`
  226. Account string `json:"account" binding:"required"`
  227. Nickname string `json:"nickname"`
  228. }
  229. var req BindRequest
  230. if err := c.ShouldBindJSON(&req); err != nil {
  231. ctx.Fail("invalid_params")
  232. return
  233. }
  234. // 检查是否已绑定
  235. var existing entity.DtUserSocial
  236. err := db.Where("user_id = ? AND platform = ?", userId, req.Platform).First(&existing).Error
  237. if err == nil {
  238. // 更新
  239. db.Model(&entity.DtUserSocial{}).
  240. Where("id = ?", existing.Id).
  241. Updates(map[string]interface{}{
  242. "account": req.Account,
  243. "nickname": req.Nickname,
  244. })
  245. } else {
  246. // 新增
  247. social := &entity.DtUserSocial{
  248. UserId: userId,
  249. Platform: req.Platform,
  250. Account: req.Account,
  251. Nickname: req.Nickname,
  252. Status: 1,
  253. }
  254. db.Create(social)
  255. }
  256. ctx.OK(nil)
  257. }