From d116f5d93823bd8e812bfd31b26000d87fcc9fbe Mon Sep 17 00:00:00 2001 From: Sebastian Frank Date: Wed, 9 Feb 2022 20:21:08 +0100 Subject: [PATCH] db interface --- dbinterface.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- handler.go | 12 +++++----- helper.go | 4 ++-- hooks.go | 2 +- login.go | 3 +-- register.go | 8 +++---- 8 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 dbinterface.go diff --git a/dbinterface.go b/dbinterface.go new file mode 100644 index 0000000..1b26f39 --- /dev/null +++ b/dbinterface.go @@ -0,0 +1,65 @@ +package mgoapi + +import ( + "gitbase.de/gopackage/mgocrud/v2" + "gopkg.in/mgo.v2" + "gopkg.in/mgo.v2/bson" +) + +type Session interface { + Close() + Copy() Session + DB(name string) Database +} + +type Database interface { + Session() Session + C(name string) Collection + Name() string + EnsureIndex(m mgocrud.ModelInterface) error + ValidateObject(m mgocrud.ModelInterface, changes bson.M) error + ReadDocument(m mgocrud.ModelInterface, selector bson.M) error + CreateDocument(m mgocrud.ModelInterface) error + ReadCollection(results interface{}, filter bson.M, selector bson.M, offset int, limit int, sort []string, pipelineModifier mgocrud.PipelineModifierFunction) error + ReadCollectionCount(m mgocrud.ModelInterface, filter bson.M) (count int, err error) + UpdateDocument(m mgocrud.ModelInterface, changes bson.M) error + UpsertDocument(m mgocrud.ModelInterface, changes bson.M) error + DeleteDocument(m mgocrud.ModelInterface) error + DeleteDocuments(m mgocrud.ModelInterface, filter bson.M) (removed int, err error) +} + +type Collection interface { + Insert(docs ...interface{}) error + UpdateId(id interface{}, update interface{}) error + RemoveId(id interface{}) error + Upsert(selector interface{}, update interface{}) (ChangeInfo, error) + RemoveAll(filter interface{}) (ChangeInfo, error) + FindId(id interface{}) Query + Find(query interface{}) Query + EnsureIndex(index Index) error + Pipe(pipeline interface{}) Pipe +} + +type ChangeInfo interface { + Matched() int + Removed() int + Updated() int +} + +type Query interface { + Select(selector interface{}) Query + One(result interface{}) error + Sort(fields ...string) Query + Skip(n int) Query + Limit(n int) Query + All(result interface{}) error + Count() (int, error) +} + +type Index interface { + NewMgoIndex(index mgo.Index) Index +} + +type Pipe interface { + All(result interface{}) error +} diff --git a/go.mod b/go.mod index b9a30d2..7548007 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module gitbase.de/gopackage/mgoapi/v2 go 1.16 require ( - gitbase.de/gopackage/mgocrud/v2 v2.0.4 + gitbase.de/gopackage/mgocrud/v2 v2.0.5 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/gin-gonic/gin v1.6.3 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 diff --git a/go.sum b/go.sum index b17cf52..21f6b56 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -gitbase.de/gopackage/mgocrud/v2 v2.0.4 h1:T+7XJ3UxuRI5Mc1x0a1L1AiTZ3u1jx/XP7E1VhVM6WY= -gitbase.de/gopackage/mgocrud/v2 v2.0.4/go.mod h1:eAIqxjo60/nP/S+YA25SBLQZ98WUrHwpvjE7Zl+ewTM= +gitbase.de/gopackage/mgocrud/v2 v2.0.5 h1:sgRJXw0ZvNDtsjmIhNDoe/8pO0Bed313aXFX6SlW6fQ= +gitbase.de/gopackage/mgocrud/v2 v2.0.5/go.mod h1:eAIqxjo60/nP/S+YA25SBLQZ98WUrHwpvjE7Zl+ewTM= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/handler.go b/handler.go index eb22725..a604144 100644 --- a/handler.go +++ b/handler.go @@ -143,7 +143,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc { queryCount := c.Query("count") if queryCount == "1" || strings.ToLower(queryCount) == "true" { - count, err := mgocrud.ReadCollectionCount(db, m, validFilter) + count, err := db.ReadCollectionCount(m, validFilter) if err != nil { c.JSON(500, errorObject(err)) return @@ -169,7 +169,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc { } } - err = mgocrud.ReadCollection(db, results, validFilter, validSelect, offset, limit, clearedSort, pipelineModFunc) + err = db.ReadCollection(results, validFilter, validSelect, offset, limit, clearedSort, pipelineModFunc) if err != nil { c.JSON(500, errorObject(err)) return @@ -218,7 +218,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc return } - err := mgocrud.CreateDocument(db, newM) + err := db.CreateDocument(newM) if err != nil { c.JSON(500, errorObject(err)) return @@ -226,7 +226,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc readM := newModelOf(newM).(mgocrud.ModelInterface) readM.SetID(newM.GetID()) - err = mgocrud.ReadDocument(db, readM, nil) + err = db.ReadDocument(readM, nil) if err != nil { c.JSON(500, errorObject(err)) return @@ -358,7 +358,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc { return } - err = mgocrud.UpdateDocument(db, orgM, changes) + err = db.UpdateDocument(orgM, changes) if err != nil { c.JSON(500, errorObject(err)) return @@ -413,7 +413,7 @@ func (api *API) collectionDeleteHandler(m mgocrud.ModelInterface) gin.HandlerFun return } - err = mgocrud.DeleteDocument(db, orgM) + err = db.DeleteDocument(orgM) if err != nil { c.JSON(500, errorObject(err)) } diff --git a/helper.go b/helper.go index d99f471..0b3b094 100644 --- a/helper.go +++ b/helper.go @@ -154,14 +154,14 @@ func getModelMeta(m mgocrud.ModelInterface) []map[string]interface{} { return getStructMeta(modelType, dontRecurse) } -func getDocument(c *gin.Context, db *mgocrud.Database, m mgocrud.ModelInterface, selector bson.M) (mgocrud.ModelInterface, error) { +func getDocument(c *gin.Context, db Database, m mgocrud.ModelInterface, selector bson.M) (mgocrud.ModelInterface, error) { objectID, err := string2ObjectID(c.Param("id")) if err != nil { return nil, err } newM := newModelOf(m).(mgocrud.ModelInterface) newM.SetID(objectID) - err = mgocrud.ReadDocument(db, newM, selector) + err = db.ReadDocument(newM, selector) if err != nil { return nil, err } diff --git a/hooks.go b/hooks.go index 8fd3b7e..4211e2d 100644 --- a/hooks.go +++ b/hooks.go @@ -71,7 +71,7 @@ func validateObject(c *Context, m mgocrud.ModelInterface, changes bson.M) error } } - return mgocrud.ValidateObject(c.DB, m, changes) + return c.DB.ValidateObject(m, changes) } func savedObject(c *Context, m mgocrud.ModelInterface, changes bson.M) error { diff --git a/login.go b/login.go index 5368421..b1b0776 100644 --- a/login.go +++ b/login.go @@ -5,7 +5,6 @@ import ( "reflect" "time" - "gitbase.de/gopackage/mgocrud/v2" jwt "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" @@ -13,7 +12,7 @@ import ( // LoginModel is interface for modules which can be used for the login route type LoginModel interface { - LoginCheck(db *mgocrud.Database) (tokenData interface{}, err error) + LoginCheck(db Database) (tokenData interface{}, err error) LoginResponse(token string) (interface{}, error) } diff --git a/register.go b/register.go index 74a1c6a..e2e2fe5 100644 --- a/register.go +++ b/register.go @@ -7,7 +7,7 @@ import ( // API is wrapper for one RouterGroup and mgo DB type API struct { - DBSession *mgocrud.Session + DBSession Session DBName string routerGroup *gin.RouterGroup jwtSecret []byte @@ -18,11 +18,11 @@ type API struct { type Context struct { *gin.Context API *API - DB *mgocrud.Database + DB Database } // New returns new instance of the API -func New(session *mgocrud.Session, dbname string, routerGroup *gin.RouterGroup) *API { +func New(session Session, dbname string, routerGroup *gin.RouterGroup) *API { return &API{ DBSession: session, DBName: dbname, @@ -41,7 +41,7 @@ func (api *API) RegisterModel(m mgocrud.ModelInterface) { defer session.Close() db := session.DB(api.DBName) - err := mgocrud.EnsureIndex(db, m) + err := db.EnsureIndex(m) if err != nil { panic(err) }