configs_model.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package model
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "github.com/tal-tech/go-zero/core/stores/cache"
  7. "github.com/tal-tech/go-zero/core/stores/sqlc"
  8. "github.com/tal-tech/go-zero/core/stores/sqlx"
  9. "github.com/tal-tech/go-zero/core/stringx"
  10. "github.com/tal-tech/go-zero/tools/goctl/model/sql/builderx"
  11. )
  12. var (
  13. configsFieldNames = builderx.RawFieldNames(&Configs{})
  14. configsRows = strings.Join(configsFieldNames, ",")
  15. configsRowsExpectAutoSet = strings.Join(stringx.Remove(configsFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
  16. configsRowsWithPlaceHolder = strings.Join(stringx.Remove(configsFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
  17. cacheConfigsIdPrefix = "cache:configs:id:"
  18. cacheConfigsConfKeyPrefix = "cache:configs:confKey:"
  19. )
  20. type (
  21. ConfigsModel interface {
  22. Insert(data Configs) (sql.Result, error)
  23. FindOne(id int64) (*Configs, error)
  24. FindOneByConfKey(confKey string) (*Configs, error)
  25. Update(data Configs) error
  26. Delete(id int64) error
  27. FindAll() ([]Configs, error)
  28. }
  29. defaultConfigsModel struct {
  30. sqlc.CachedConn
  31. table string
  32. }
  33. Configs struct {
  34. Id int64 `db:"id"`
  35. ConfName string `db:"conf_name"`
  36. ConfKey string `db:"conf_key"`
  37. ConfValue string `db:"conf_value"`
  38. }
  39. )
  40. func NewConfigsModel(conn sqlx.SqlConn, c cache.CacheConf) ConfigsModel {
  41. return &defaultConfigsModel{
  42. CachedConn: sqlc.NewConn(conn, c),
  43. table: "`configs`",
  44. }
  45. }
  46. func (m *defaultConfigsModel) Insert(data Configs) (sql.Result, error) {
  47. configsConfKeyKey := fmt.Sprintf("%s%v", cacheConfigsConfKeyPrefix, data.ConfKey)
  48. ret, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  49. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?)", m.table, configsRowsExpectAutoSet)
  50. return conn.Exec(query, data.ConfName, data.ConfKey, data.ConfValue)
  51. }, configsConfKeyKey)
  52. return ret, err
  53. }
  54. func (m *defaultConfigsModel) FindOne(id int64) (*Configs, error) {
  55. configsIdKey := fmt.Sprintf("%s%v", cacheConfigsIdPrefix, id)
  56. var resp Configs
  57. err := m.QueryRow(&resp, configsIdKey, func(conn sqlx.SqlConn, v interface{}) error {
  58. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", configsRows, m.table)
  59. return conn.QueryRow(v, query, id)
  60. })
  61. switch err {
  62. case nil:
  63. return &resp, nil
  64. case sqlc.ErrNotFound:
  65. return nil, ErrNotFound
  66. default:
  67. return nil, err
  68. }
  69. }
  70. func (m *defaultConfigsModel) FindOneByConfKey(confKey string) (*Configs, error) {
  71. configsConfKeyKey := fmt.Sprintf("%s%v", cacheConfigsConfKeyPrefix, confKey)
  72. var resp Configs
  73. err := m.QueryRowIndex(&resp, configsConfKeyKey, m.formatPrimary, func(conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
  74. query := fmt.Sprintf("select %s from %s where `conf_key` = ? limit 1", configsRows, m.table)
  75. if err := conn.QueryRow(&resp, query, confKey); err != nil {
  76. return nil, err
  77. }
  78. return resp.Id, nil
  79. }, m.queryPrimary)
  80. switch err {
  81. case nil:
  82. return &resp, nil
  83. case sqlc.ErrNotFound:
  84. return nil, ErrNotFound
  85. default:
  86. return nil, err
  87. }
  88. }
  89. func (m *defaultConfigsModel) Update(data Configs) error {
  90. configsIdKey := fmt.Sprintf("%s%v", cacheConfigsIdPrefix, data.Id)
  91. configsConfKeyKey := fmt.Sprintf("%s%v", cacheConfigsConfKeyPrefix, data.ConfKey)
  92. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  93. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, configsRowsWithPlaceHolder)
  94. return conn.Exec(query, data.ConfName, data.ConfKey, data.ConfValue, data.Id)
  95. }, configsIdKey, configsConfKeyKey)
  96. return err
  97. }
  98. func (m *defaultConfigsModel) Delete(id int64) error {
  99. data, err := m.FindOne(id)
  100. if err != nil {
  101. return err
  102. }
  103. configsIdKey := fmt.Sprintf("%s%v", cacheConfigsIdPrefix, id)
  104. configsConfKeyKey := fmt.Sprintf("%s%v", cacheConfigsConfKeyPrefix, data.ConfKey)
  105. _, err = m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  106. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  107. return conn.Exec(query, id)
  108. }, configsIdKey, configsConfKeyKey)
  109. return err
  110. }
  111. func (m *defaultConfigsModel) formatPrimary(primary interface{}) string {
  112. return fmt.Sprintf("%s%v", cacheConfigsIdPrefix, primary)
  113. }
  114. func (m *defaultConfigsModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
  115. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", configsRows, m.table)
  116. return conn.QueryRow(v, query, primary)
  117. }
  118. func (m *defaultConfigsModel) FindAll() ([]Configs, error) {
  119. configs := make([]Configs, 0)
  120. querySql := fmt.Sprintf("select %s from %s", configsRows, m.table)
  121. err := m.CachedConn.QueryRowsNoCache(&configs, querySql)
  122. if err != nil {
  123. if err == sqlx.ErrNotFound {
  124. return nil, ErrNotFound
  125. }
  126. return nil, err
  127. }
  128. return configs, err
  129. }