usermodel.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package model
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "git.i2edu.net/i2/go-zero/core/stores/sqlc"
  8. "git.i2edu.net/i2/go-zero/core/stores/sqlx"
  9. "git.i2edu.net/i2/go-zero/core/stringx"
  10. "git.i2edu.net/i2/go-zero/tools/goctl/model/sql/builderx"
  11. )
  12. var (
  13. userFieldNames = builderx.RawFieldNames(&User{})
  14. userRows = strings.Join(userFieldNames, ",")
  15. userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
  16. userRowsWithPlaceHolder = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
  17. )
  18. type (
  19. // UserModel defines a model for user
  20. UserModel interface {
  21. Insert(data User) (sql.Result, error)
  22. FindOne(id int64) (*User, error)
  23. FindOneByUser(user string) (*User, error)
  24. FindOneByMobile(mobile string) (*User, error)
  25. FindOneByName(name string) (*User, error)
  26. Update(data User) error
  27. Delete(id int64) error
  28. }
  29. defaultUserModel struct {
  30. conn sqlx.SqlConn
  31. table string
  32. }
  33. // User defines an data structure for mysql
  34. User struct {
  35. ID int64 `db:"id"`
  36. User string `db:"user"` // 用户
  37. Name string `db:"name"` // 用户名称
  38. Password string `db:"password"` // 用户密码
  39. Mobile string `db:"mobile"` // 手机号
  40. Gender string `db:"gender"` // 男|女|未公开
  41. Nickname string `db:"nickname"` // 用户昵称
  42. CreateTime time.Time `db:"create_time"`
  43. UpdateTime time.Time `db:"update_time"`
  44. }
  45. )
  46. // NewUserModel creates an instance for UserModel
  47. func NewUserModel(conn sqlx.SqlConn) UserModel {
  48. return &defaultUserModel{
  49. conn: conn,
  50. table: "`user`",
  51. }
  52. }
  53. func (m *defaultUserModel) Insert(data User) (sql.Result, error) {
  54. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, userRowsExpectAutoSet)
  55. ret, err := m.conn.Exec(query, data.User, data.Name, data.Password, data.Mobile, data.Gender, data.Nickname)
  56. return ret, err
  57. }
  58. func (m *defaultUserModel) FindOne(id int64) (*User, error) {
  59. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRows, m.table)
  60. var resp User
  61. err := m.conn.QueryRow(&resp, query, id)
  62. switch err {
  63. case nil:
  64. return &resp, nil
  65. case sqlc.ErrNotFound:
  66. return nil, ErrNotFound
  67. default:
  68. return nil, err
  69. }
  70. }
  71. func (m *defaultUserModel) FindOneByUser(user string) (*User, error) {
  72. var resp User
  73. query := fmt.Sprintf("select %s from %s where `user` = ? limit 1", userRows, m.table)
  74. err := m.conn.QueryRow(&resp, query, user)
  75. switch err {
  76. case nil:
  77. return &resp, nil
  78. case sqlc.ErrNotFound:
  79. return nil, ErrNotFound
  80. default:
  81. return nil, err
  82. }
  83. }
  84. func (m *defaultUserModel) FindOneByMobile(mobile string) (*User, error) {
  85. var resp User
  86. query := fmt.Sprintf("select %s from %s where `mobile` = ? limit 1", userRows, m.table)
  87. err := m.conn.QueryRow(&resp, query, mobile)
  88. switch err {
  89. case nil:
  90. return &resp, nil
  91. case sqlc.ErrNotFound:
  92. return nil, ErrNotFound
  93. default:
  94. return nil, err
  95. }
  96. }
  97. func (m *defaultUserModel) FindOneByName(name string) (*User, error) {
  98. var resp User
  99. query := fmt.Sprintf("select %s from %s where `name` = ? limit 1", userRows, m.table)
  100. err := m.conn.QueryRow(&resp, query, name)
  101. switch err {
  102. case nil:
  103. return &resp, nil
  104. case sqlc.ErrNotFound:
  105. return nil, ErrNotFound
  106. default:
  107. return nil, err
  108. }
  109. }
  110. func (m *defaultUserModel) Update(data User) error {
  111. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, userRowsWithPlaceHolder)
  112. _, err := m.conn.Exec(query, data.User, data.Name, data.Password, data.Mobile, data.Gender, data.Nickname, data.ID)
  113. return err
  114. }
  115. func (m *defaultUserModel) Delete(id int64) error {
  116. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  117. _, err := m.conn.Exec(query, id)
  118. return err
  119. }