user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package user
  2. import (
  3. "context"
  4. "UserManager/internal/model"
  5. "UserManager/internal/service"
  6. "github.com/gogf/gf/v2/errors/gerror"
  7. "github.com/gogf/gf/v2/frame/g"
  8. )
  9. type cUser struct{}
  10. var User = cUser{} // 全局实例,方便路由绑定
  11. // RegisterReq 接收参数
  12. type RegisterReq struct {
  13. g.Meta `path:"/register" method:"post"`
  14. Passport string `v:"required|length:3,16"`
  15. Password string `v:"required|length:6,20"`
  16. Nickname string
  17. }
  18. type RegisterRes struct{} // 空响应
  19. // ListReq 用户列表请求
  20. type ListReq struct {
  21. g.Meta `path:"/list" method:"get"`
  22. Page int `d:"1" v:"min:1"`
  23. PageSize int `d:"10" v:"min:1|max:100"`
  24. Passport string
  25. Nickname string
  26. }
  27. // ListRes 用户列表响应
  28. type ListRes struct {
  29. List []*model.UserOutput `json:"list"`
  30. Total int `json:"total"`
  31. Page int `json:"page"`
  32. }
  33. // GetByPassportReq 根据账号查询请求
  34. type GetByPassportReq struct {
  35. g.Meta `path:"/get" method:"get"`
  36. Passport string `v:"required"`
  37. }
  38. // GetByPassportRes 根据账号查询响应
  39. type GetByPassportRes *model.UserOutput
  40. func (c *cUser) Register(ctx context.Context, req *RegisterReq) (res *RegisterRes, err error) {
  41. err = service.User().Register(ctx, model.UserRegisterInput{
  42. Passport: req.Passport,
  43. Password: req.Password,
  44. Nickname: req.Nickname,
  45. })
  46. return
  47. }
  48. func (c *cUser) List(ctx context.Context, req *ListReq) (res *ListRes, err error) {
  49. output, err := service.User().GetList(ctx, model.UserListInput{
  50. Page: req.Page,
  51. PageSize: req.PageSize,
  52. Passport: req.Passport,
  53. Nickname: req.Nickname,
  54. })
  55. if err != nil {
  56. return nil, err
  57. }
  58. return &ListRes{
  59. List: output.List,
  60. Total: output.Total,
  61. Page: output.Page,
  62. }, nil
  63. }
  64. func (c *cUser) GetByPassport(ctx context.Context, req *GetByPassportReq) (res *GetByPassportRes, err error) {
  65. output, err := service.User().GetByPassport(ctx, req.Passport)
  66. if err != nil {
  67. return nil, err
  68. }
  69. return (*GetByPassportRes)(&output), nil
  70. }
  71. type LoginReq struct {
  72. g.Meta `path:"/login" method:"post"`
  73. Passport string `v:"required" json:"passport"`
  74. Password string `v:"required" json:"password"`
  75. }
  76. // LoginRes 登录响应
  77. type LoginRes struct {
  78. Token string `json:"token"`
  79. UserInfo *model.UserOutput `json:"user_info"`
  80. }
  81. func (c *cUser) Login(ctx context.Context, req *LoginReq) (res *LoginRes, err error) {
  82. output, err := service.User().Login(ctx, model.UserLoginInput{
  83. Passport: req.Passport,
  84. Password: req.Password,
  85. })
  86. if err != nil {
  87. // 在这里统一转换错误信息
  88. return nil, gerror.New("登录失败,请检查账号密码")
  89. }
  90. return &LoginRes{
  91. Token: output.Token,
  92. UserInfo: output.UserInfo,
  93. }, nil
  94. }