业务逻辑封装

    数据校验

    实现代码

    1. package user
    2. import (
    3. "errors"
    4. "fmt"
    5. "github.com/gogf/gf-demos/app/model/user"
    6. "github.com/gogf/gf/net/ghttp"
    7. "github.com/gogf/gf/os/gtime"
    8. "github.com/gogf/gf/util/gconv"
    9. "github.com/gogf/gf/util/gvalid"
    10. )
    11. const (
    12. USER_SESSION_MARK = "user_info"
    13. )
    14. // 注册输入参数
    15. type SignUpInput struct {
    16. Passport string `v:"required|length:6,16#账号不能为空|账号长度应当在:min到:max之间"`
    17. Password string `v:"required|length:6,16#请输入确认密码|密码长度应当在:min到:max之间"`
    18. Password2 string `v:"required|length:6,16|same:Password#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等"`
    19. Nickname string
    20. }
    21. // 用户注册
    22. func SignUp(data *SignUpInput) error {
    23. // 输入参数检查
    24. if e := gvalid.CheckStruct(data, nil); e != nil {
    25. return errors.New(e.String())
    26. if data.Nickname == "" {
    27. data.Nickname = data.Passport
    28. }
    29. // 账号唯一性数据检查
    30. if !CheckPassport(data.Passport) {
    31. return errors.New(fmt.Sprintf("账号 %s 已经存在", data.Passport))
    32. }
    33. // 昵称唯一性数据检查
    34. if !CheckNickName(data.Nickname) {
    35. return errors.New(fmt.Sprintf("昵称 %s 已经存在", data.Nickname))
    36. }
    37. // 将输入参数赋值到数据库实体对象上
    38. var entity *user.Entity
    39. if err := gconv.Struct(data, &entity); err != nil {
    40. return err
    41. }
    42. // 记录账号创建/注册时间
    43. entity.CreateTime = gtime.Now()
    44. if _, err := user.Save(entity); err != nil {
    45. return err
    46. }
    47. return nil
    48. }
    49. // 判断用户是否已经登录
    50. func IsSignedIn(session *ghttp.Session) bool {
    51. return session.Contains(USER_SESSION_MARK)
    52. }
    53. // 用户登录,成功返回用户信息,否则返回nil; passport应当会md5值字符串
    54. func SignIn(passport, password string, session *ghttp.Session) error {
    55. one, err := user.FindOne("passport=? and password=?", passport, password)
    56. if err != nil {
    57. if one == nil {
    58. return errors.New("账号或密码错误")
    59. }
    60. return session.Set(USER_SESSION_MARK, one)
    61. }
    62. // 用户注销
    63. func SignOut(session *ghttp.Session) error {
    64. return session.Remove(USER_SESSION_MARK)
    65. }
    66. // 检查账号是否符合规范(目前仅检查唯一性),存在返回false,否则true
    67. func CheckPassport(passport string) bool {
    68. if i, err := user.FindCount("passport", passport); err != nil {
    69. return false
    70. } else {
    71. return i == 0
    72. }
    73. }
    74. // 检查昵称是否符合规范(目前仅检查唯一性),存在返回false,否则true
    75. func CheckNickName(nickname string) bool {
    76. if i, err := user.FindCount("nickname", nickname); err != nil {
    77. return false
    78. } else {
    79. return i == 0
    80. }
    81. }
    82. // 获得用户信息详情
    83. func GetProfile(session *ghttp.Session) (u *user.Entity) {
    84. _ = session.GetStruct(USER_SESSION_MARK, &u)
    85. return