templatemodel.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package gen
  2. const (
  3. quotationMark = "`"
  4. //templates that do not use caching
  5. noCacheTemplate = `package model
  6. import (
  7. {{.importArray}}
  8. )
  9. var ErrNotFound = mongoc.ErrNotFound
  10. type (
  11. {{.modelName}}Model struct {
  12. *mongoc.Model
  13. }
  14. {{.modelName}} struct {
  15. {{.modelFields}}
  16. }
  17. )
  18. func New{{.modelName}}Model(url, database, collection string, c cache.CacheConf, opts ...cache.Option) *{{.modelName}}Model {
  19. return &{{.modelName}}Model{mongoc.MustNewModel(url, database, collection, c, opts...)}
  20. }
  21. func (m *{{.modelName}}Model) FindOne(id string) (*{{.modelName}}, error) {
  22. session, err := m.Model.TakeSession()
  23. if err != nil {
  24. return nil, err
  25. }
  26. defer m.Model.PutSession(session)
  27. var result {{.modelName}}
  28. err = m.GetCollection(session).FindOneIdNoCache(&result,bson.ObjectIdHex(id))
  29. if err != nil {
  30. return nil, err
  31. }
  32. return &result, nil
  33. }
  34. func (m *{{.modelName}}Model) Delete(id string) error {
  35. session, err := m.TakeSession()
  36. if err != nil {
  37. return err
  38. }
  39. defer m.PutSession(session)
  40. return m.GetCollection(session).RemoveIdNoCache(bson.ObjectIdHex(id))
  41. }
  42. func (m *{{.modelName}}Model) Insert(data *{{.modelName}}) error {
  43. session, err := m.TakeSession()
  44. if err != nil {
  45. return err
  46. }
  47. defer m.PutSession(session)
  48. return m.GetCollection(session).Insert(data)
  49. }
  50. func (m *{{.modelName}}Model) Update(data *{{.modelName}}) error {
  51. session, err := m.TakeSession()
  52. if err != nil {
  53. return err
  54. }
  55. defer m.PutSession(session)
  56. data.UpdateTime = time.Now()
  57. return m.GetCollection(session).UpdateIdNoCache(data.Id, data)
  58. }
  59. `
  60. //use cache template
  61. cacheTemplate = `package model
  62. import (
  63. {{.importArray}}
  64. )
  65. var ErrNotFound = errors.New("not found")
  66. const (
  67. Prefix{{.modelName}}CacheKey = "#{{.modelName}}#cache" //todo please modify this prefix
  68. )
  69. type (
  70. {{.modelName}}Model struct {
  71. *mongoc.Model
  72. }
  73. {{.modelName}} struct {
  74. {{.modelFields}}
  75. }
  76. )
  77. func New{{.modelName}}Model(url, database, collection string, c cache.CacheConf, opts ...cache.Option) *{{.modelName}}Model {
  78. return &{{.modelName}}Model{mongoc.MustNewModel(url, database, collection, c, opts...)}
  79. }
  80. func (m *{{.modelName}}Model) FindOne(id string) (*{{.modelName}}, error) {
  81. key := Prefix{{.modelName}}CacheKey + id
  82. session, err := m.Model.TakeSession()
  83. if err != nil {
  84. return nil, err
  85. }
  86. defer m.Model.PutSession(session)
  87. var result {{.modelName}}
  88. err = m.GetCollection(session).FindOneId(&result, key, bson.ObjectIdHex(id))
  89. switch err {
  90. case nil:
  91. return &result, nil
  92. case mongoc.ErrNotFound:
  93. return nil, ErrNotFound
  94. default:
  95. return nil, err
  96. }
  97. }
  98. func (m *{{.modelName}}Model) Delete(id string) error {
  99. session, err := m.TakeSession()
  100. if err != nil {
  101. return err
  102. }
  103. defer m.PutSession(session)
  104. key := Prefix{{.modelName}}CacheKey + id
  105. return m.GetCollection(session).RemoveId(bson.ObjectIdHex(id), key)
  106. }
  107. func (m *{{.modelName}}Model) Insert(data *{{.modelName}}) error {
  108. session, err := m.TakeSession()
  109. if err != nil {
  110. return err
  111. }
  112. defer m.PutSession(session)
  113. return m.GetCollection(session).Insert(data)
  114. }
  115. func (m *{{.modelName}}Model) Update(data *{{.modelName}}) error {
  116. session, err := m.TakeSession()
  117. if err != nil {
  118. return err
  119. }
  120. defer m.PutSession(session)
  121. data.UpdateTime = time.Now()
  122. key := Prefix{{.modelName}}CacheKey + data.Id.Hex()
  123. return m.GetCollection(session).UpdateId(data.Id, data, key)
  124. }
  125. `
  126. cacheSetFieldtemplate = `func (m *{{.modelName}}Model) Set{{.Name}}(id string, {{.name}} {{.type}}) error {
  127. _, err := m.cache.Del(Prefix{{.modelName}}CacheKey + id)
  128. if err != nil {
  129. return err
  130. }
  131. session, err := m.TakeSession()
  132. if err != nil {
  133. return err
  134. }
  135. defer m.PutSession(session)
  136. update := bson.M{"$set": bson.M{"{{.name}}": {{.name}}, "updateTime": time.Now()}}
  137. return m.GetCollection(session).UpdateId(bson.ObjectIdHex(id), update)
  138. }`
  139. noCacheSetFieldtemplate = `func (m *{{.modelName}}Model) Set{{.Name}}(id string, {{.name}} {{.type}}) error {
  140. session, err := m.TakeSession()
  141. if err != nil {
  142. return err
  143. }
  144. defer m.PutSession(session)
  145. update := bson.M{"$set": bson.M{"{{.name}}": {{.name}}, "updateTime": time.Now()}}
  146. return m.GetCollection(session).UpdateId(bson.ObjectIdHex(id), update)
  147. }`
  148. noCacheGetTemplate = `func (m *{{.modelName}}Model) GetBy{{.Name}}({{.name}} {{.type}}) (*{{.modelName}},error) {
  149. session, err := m.TakeSession()
  150. if err != nil {
  151. return nil,err
  152. }
  153. defer m.PutSession(session)
  154. var result {{.modelName}}
  155. query := bson.M{"{{.name}}":{{.name}}}
  156. err = m.GetCollection(session).FindOneNoCache(&result, query)
  157. if err != nil {
  158. if err == mgo.ErrNotFound {
  159. return nil,ErrNotFound
  160. }
  161. return nil,err
  162. }
  163. return &result,nil
  164. }`
  165. // GetByField return single model
  166. getTemplate = `func (m *{{.modelName}}Model) GetBy{{.Name}}({{.name}} {{.type}}) (*{{.modelName}},error) {
  167. session, err := m.TakeSession()
  168. if err != nil {
  169. return nil,err
  170. }
  171. defer m.PutSession(session)
  172. var result {{.modelName}}
  173. query := bson.M{"{{.name}}":{{.name}}}
  174. key := getCachePrimaryKeyBy{{.Name}}({{.name}})
  175. err = m.GetCollection(session).FindOne(&result,key,query)
  176. if err != nil {
  177. if err == mgo.ErrNotFound {
  178. return nil,ErrNotFound
  179. }
  180. return nil,err
  181. }
  182. return &result,nil
  183. }
  184. func getCachePrimaryKeyBy{{.Name}}({{.name}} {{.type}}) string {
  185. return "" //todo 请补全这里
  186. }
  187. `
  188. findTemplate = `func (m *{{.modelName}}Model) FindBy{{.Name}}({{.name}} string) ([]{{.modelName}},error) {
  189. session, err := m.TakeSession()
  190. if err != nil {
  191. return nil,err
  192. }
  193. defer m.PutSession(session)
  194. query := bson.M{"{{.name}}":{{.name}}}
  195. var result []{{.modelName}}
  196. err = m.GetCollection(session).FindAllNoCache(&result,query)
  197. if err != nil {
  198. return nil,err
  199. }
  200. return result,nil
  201. }`
  202. )