model.tpl 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package model
  2. import (
  3. "context"
  4. "github.com/globalsign/mgo/bson"
  5. {{if .Cache}}cachec "github.com/zeromicro/go-zero/core/stores/cache"
  6. "github.com/zeromicro/go-zero/core/stores/mongoc"{{else}}"github.com/zeromicro/go-zero/core/stores/mongo"{{end}}
  7. )
  8. {{if .Cache}}var prefix{{.Type}}CacheKey = "cache:{{.Type}}:"{{end}}
  9. type {{.Type}}Model interface{
  10. Insert(ctx context.Context,data *{{.Type}}) error
  11. FindOne(ctx context.Context,id string) (*{{.Type}}, error)
  12. Update(ctx context.Context,data *{{.Type}}) error
  13. Delete(ctx context.Context,id string) error
  14. }
  15. type default{{.Type}}Model struct {
  16. {{if .Cache}}*mongoc.Model{{else}}*mongo.Model{{end}}
  17. }
  18. func New{{.Type}}Model(url, collection string{{if .Cache}}, c cachec.CacheConf{{end}}) {{.Type}}Model {
  19. return &default{{.Type}}Model{
  20. Model: {{if .Cache}}mongoc.MustNewModel(url, collection, c){{else}}mongo.MustNewModel(url, collection){{end}},
  21. }
  22. }
  23. func (m *default{{.Type}}Model) Insert(ctx context.Context, data *{{.Type}}) error {
  24. if !data.ID.Valid() {
  25. data.ID = bson.NewObjectId()
  26. }
  27. session, err := m.TakeSession()
  28. if err != nil {
  29. return err
  30. }
  31. defer m.PutSession(session)
  32. return m.GetCollection(session).Insert(data)
  33. }
  34. func (m *default{{.Type}}Model) FindOne(ctx context.Context, id string) (*{{.Type}}, error) {
  35. if !bson.IsObjectIdHex(id) {
  36. return nil, ErrInvalidObjectId
  37. }
  38. session, err := m.TakeSession()
  39. if err != nil {
  40. return nil, err
  41. }
  42. defer m.PutSession(session)
  43. var data {{.Type}}
  44. {{if .Cache}}key := prefix{{.Type}}CacheKey + id
  45. err = m.GetCollection(session).FindOneId(&data, key, bson.ObjectIdHex(id))
  46. {{- else}}
  47. err = m.GetCollection(session).FindId(bson.ObjectIdHex(id)).One(&data)
  48. {{- end}}
  49. switch err {
  50. case nil:
  51. return &data,nil
  52. case {{if .Cache}}mongoc.ErrNotFound{{else}}mongo.ErrNotFound{{end}}:
  53. return nil,ErrNotFound
  54. default:
  55. return nil,err
  56. }
  57. }
  58. func (m *default{{.Type}}Model) Update(ctx context.Context, data *{{.Type}}) error {
  59. session, err := m.TakeSession()
  60. if err != nil {
  61. return err
  62. }
  63. defer m.PutSession(session)
  64. {{if .Cache}}key := prefix{{.Type}}CacheKey + data.ID.Hex()
  65. return m.GetCollection(session).UpdateId(data.ID, data, key)
  66. {{- else}}
  67. return m.GetCollection(session).UpdateId(data.ID, data)
  68. {{- end}}
  69. }
  70. func (m *default{{.Type}}Model) Delete(ctx context.Context, id string) error {
  71. session, err := m.TakeSession()
  72. if err != nil {
  73. return err
  74. }
  75. defer m.PutSession(session)
  76. {{if .Cache}}key := prefix{{.Type}}CacheKey + id
  77. return m.GetCollection(session).RemoveId(bson.ObjectIdHex(id), key)
  78. {{- else}}
  79. return m.GetCollection(session).RemoveId(bson.ObjectIdHex(id))
  80. {{- end}}
  81. }