TestUserInfoModel.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package camel
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "github.com/tal-tech/go-zero/core/stores/cache"
  8. "github.com/tal-tech/go-zero/core/stores/sqlc"
  9. "github.com/tal-tech/go-zero/core/stores/sqlx"
  10. "github.com/tal-tech/go-zero/core/stringx"
  11. "github.com/tal-tech/go-zero/tools/goctl/model/sql/builderx"
  12. )
  13. var (
  14. testUserInfoFieldNames = builderx.FieldNames(&TestUserInfo{})
  15. testUserInfoRows = strings.Join(testUserInfoFieldNames, ",")
  16. testUserInfoRowsExpectAutoSet = strings.Join(stringx.Remove(testUserInfoFieldNames, "id", "create_time", "update_time"), ",")
  17. testUserInfoRowsWithPlaceHolder = strings.Join(stringx.Remove(testUserInfoFieldNames, "id", "create_time", "update_time"), "=?,") + "=?"
  18. cacheTestUserInfoIdPrefix = "cache#TestUserInfo#id#"
  19. cacheTestUserInfoNanosecondPrefix = "cache#TestUserInfo#nanosecond#"
  20. )
  21. type (
  22. TestUserInfoModel struct {
  23. sqlc.CachedConn
  24. table string
  25. }
  26. TestUserInfo struct {
  27. Id int64 `db:"id"`
  28. Nanosecond int64 `db:"nanosecond"`
  29. Data string `db:"data"`
  30. CreateTime time.Time `db:"create_time"`
  31. UpdateTime time.Time `db:"update_time"`
  32. }
  33. )
  34. func NewTestUserInfoModel(conn sqlx.SqlConn, c cache.CacheConf) *TestUserInfoModel {
  35. return &TestUserInfoModel{
  36. CachedConn: sqlc.NewConn(conn, c),
  37. table: "test_user_info",
  38. }
  39. }
  40. func (m *TestUserInfoModel) Insert(data TestUserInfo) (sql.Result, error) {
  41. testUserInfoNanosecondKey := fmt.Sprintf("%s%v", cacheTestUserInfoNanosecondPrefix, data.Nanosecond)
  42. ret, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  43. query := fmt.Sprintf("insert into %s (%s) values (?, ?)", m.table, testUserInfoRowsExpectAutoSet)
  44. return conn.Exec(query, data.Nanosecond, data.Data)
  45. }, testUserInfoNanosecondKey)
  46. return ret, err
  47. }
  48. func (m *TestUserInfoModel) FindOne(id int64) (*TestUserInfo, error) {
  49. testUserInfoIdKey := fmt.Sprintf("%s%v", cacheTestUserInfoIdPrefix, id)
  50. var resp TestUserInfo
  51. err := m.QueryRow(&resp, testUserInfoIdKey, func(conn sqlx.SqlConn, v interface{}) error {
  52. query := fmt.Sprintf("select %s from %s where id = ? limit 1", testUserInfoRows, m.table)
  53. return conn.QueryRow(v, query, id)
  54. })
  55. switch err {
  56. case nil:
  57. return &resp, nil
  58. case sqlc.ErrNotFound:
  59. return nil, ErrNotFound
  60. default:
  61. return nil, err
  62. }
  63. }
  64. func (m *TestUserInfoModel) FindOneByNanosecond(nanosecond int64) (*TestUserInfo, error) {
  65. testUserInfoNanosecondKey := fmt.Sprintf("%s%v", cacheTestUserInfoNanosecondPrefix, nanosecond)
  66. var resp TestUserInfo
  67. err := m.QueryRowIndex(&resp, testUserInfoNanosecondKey, m.formatPrimary, func(conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
  68. query := fmt.Sprintf("select %s from %s where nanosecond = ? limit 1", testUserInfoRows, m.table)
  69. if err := conn.QueryRow(&resp, query, nanosecond); err != nil {
  70. return nil, err
  71. }
  72. return resp.Id, nil
  73. }, m.queryPrimary)
  74. switch err {
  75. case nil:
  76. return &resp, nil
  77. case sqlc.ErrNotFound:
  78. return nil, ErrNotFound
  79. default:
  80. return nil, err
  81. }
  82. }
  83. func (m *TestUserInfoModel) Update(data TestUserInfo) error {
  84. testUserInfoIdKey := fmt.Sprintf("%s%v", cacheTestUserInfoIdPrefix, data.Id)
  85. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  86. query := fmt.Sprintf("update %s set %s where id = ?", m.table, testUserInfoRowsWithPlaceHolder)
  87. return conn.Exec(query, data.Nanosecond, data.Data, data.Id)
  88. }, testUserInfoIdKey)
  89. return err
  90. }
  91. func (m *TestUserInfoModel) Delete(id int64) error {
  92. data, err := m.FindOne(id)
  93. if err != nil {
  94. return err
  95. }
  96. testUserInfoNanosecondKey := fmt.Sprintf("%s%v", cacheTestUserInfoNanosecondPrefix, data.Nanosecond)
  97. testUserInfoIdKey := fmt.Sprintf("%s%v", cacheTestUserInfoIdPrefix, id)
  98. _, err = m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  99. query := fmt.Sprintf("delete from %s where id = ?", m.table)
  100. return conn.Exec(query, id)
  101. }, testUserInfoIdKey, testUserInfoNanosecondKey)
  102. return err
  103. }
  104. func (m *TestUserInfoModel) formatPrimary(primary interface{}) string {
  105. return fmt.Sprintf("%s%v", cacheTestUserInfoIdPrefix, primary)
  106. }
  107. func (m *TestUserInfoModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
  108. query := fmt.Sprintf("select %s from %s where id = ? limit 1", testUserInfoRows, m.table)
  109. return conn.QueryRow(v, query, primary)
  110. }