4 Commits

Author SHA1 Message Date
0a966a637b db connect 2022-02-09 21:12:04 +01:00
b59be1a9d7 db interface 2022-02-09 20:33:13 +01:00
d116f5d938 db interface 2022-02-09 20:21:08 +01:00
2b4f13f807 mgocrud v2.0.4 2022-02-09 18:57:26 +01:00
8 changed files with 93 additions and 28 deletions

66
dbinterface.go Normal file
View File

@@ -0,0 +1,66 @@
package mgoapi
import (
"gitbase.de/gopackage/mgocrud/v2"
"gopkg.in/mgo.v2/bson"
)
type Connection interface {
Close()
NewSession() Session
}
type Session interface {
Close()
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{}
type Pipe interface {
All(result interface{}) error
}

2
go.mod
View File

@@ -3,7 +3,7 @@ module gitbase.de/gopackage/mgoapi/v2
go 1.16 go 1.16
require ( require (
gitbase.de/gopackage/mgocrud/v2 v2.0.3 gitbase.de/gopackage/mgocrud/v2 v2.0.8
github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/gin-gonic/gin v1.6.3 github.com/gin-gonic/gin v1.6.3
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22

4
go.sum
View File

@@ -1,5 +1,5 @@
gitbase.de/gopackage/mgocrud/v2 v2.0.3 h1:uWNi5YX9eo1tdys3XZGKVvEjQ7fv14rQ3PNgNlR9XDs= gitbase.de/gopackage/mgocrud/v2 v2.0.8 h1:129q3/5c4kFB0WnVZZXd+jhpR5FYjYjzmcoZxLPPjiY=
gitbase.de/gopackage/mgocrud/v2 v2.0.3/go.mod h1:eAIqxjo60/nP/S+YA25SBLQZ98WUrHwpvjE7Zl+ewTM= gitbase.de/gopackage/mgocrud/v2 v2.0.8/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.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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -15,7 +15,7 @@ import (
func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFunc { func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
@@ -79,7 +79,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
results := x.Interface() results := x.Interface()
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
@@ -143,7 +143,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
queryCount := c.Query("count") queryCount := c.Query("count")
if queryCount == "1" || strings.ToLower(queryCount) == "true" { if queryCount == "1" || strings.ToLower(queryCount) == "true" {
count, err := mgocrud.ReadCollectionCount(db, m, validFilter) count, err := db.ReadCollectionCount(m, validFilter)
if err != nil { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
return 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 { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
return return
@@ -205,7 +205,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
return return
} }
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
@@ -218,7 +218,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
return return
} }
err := mgocrud.CreateDocument(db, newM) err := db.CreateDocument(newM)
if err != nil { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
return return
@@ -226,7 +226,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
readM := newModelOf(newM).(mgocrud.ModelInterface) readM := newModelOf(newM).(mgocrud.ModelInterface)
readM.SetID(newM.GetID()) readM.SetID(newM.GetID())
err = mgocrud.ReadDocument(db, readM, nil) err = db.ReadDocument(readM, nil)
if err != nil { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
return return
@@ -257,7 +257,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc { func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
@@ -358,7 +358,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
return return
} }
err = mgocrud.UpdateDocument(db, orgM, changes) err = db.UpdateDocument(orgM, changes)
if err != nil { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
return return
@@ -399,7 +399,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
func (api *API) collectionDeleteHandler(m mgocrud.ModelInterface) gin.HandlerFunc { func (api *API) collectionDeleteHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
@@ -413,7 +413,7 @@ func (api *API) collectionDeleteHandler(m mgocrud.ModelInterface) gin.HandlerFun
return return
} }
err = mgocrud.DeleteDocument(db, orgM) err = db.DeleteDocument(orgM)
if err != nil { if err != nil {
c.JSON(500, errorObject(err)) c.JSON(500, errorObject(err))
} }

View File

@@ -154,14 +154,14 @@ func getModelMeta(m mgocrud.ModelInterface) []map[string]interface{} {
return getStructMeta(modelType, dontRecurse) 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")) objectID, err := string2ObjectID(c.Param("id"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
newM := newModelOf(m).(mgocrud.ModelInterface) newM := newModelOf(m).(mgocrud.ModelInterface)
newM.SetID(objectID) newM.SetID(objectID)
err = mgocrud.ReadDocument(db, newM, selector) err = db.ReadDocument(newM, selector)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -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 { func savedObject(c *Context, m mgocrud.ModelInterface, changes bson.M) error {

View File

@@ -5,7 +5,6 @@ import (
"reflect" "reflect"
"time" "time"
"gitbase.de/gopackage/mgocrud/v2"
jwt "github.com/dgrijalva/jwt-go" jwt "github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -13,7 +12,7 @@ import (
// LoginModel is interface for modules which can be used for the login route // LoginModel is interface for modules which can be used for the login route
type LoginModel interface { type LoginModel interface {
LoginCheck(db *mgocrud.Database) (tokenData interface{}, err error) LoginCheck(db Database) (tokenData interface{}, err error)
LoginResponse(token string) (interface{}, error) LoginResponse(token string) (interface{}, error)
} }
@@ -27,7 +26,7 @@ func (api *API) loginPostHandler(m LoginModel) func(c *gin.Context) {
return return
} }
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)

View File

@@ -7,7 +7,7 @@ import (
// API is wrapper for one RouterGroup and mgo DB // API is wrapper for one RouterGroup and mgo DB
type API struct { type API struct {
DBSession *mgocrud.Session DBConnection Connection
DBName string DBName string
routerGroup *gin.RouterGroup routerGroup *gin.RouterGroup
jwtSecret []byte jwtSecret []byte
@@ -18,13 +18,13 @@ type API struct {
type Context struct { type Context struct {
*gin.Context *gin.Context
API *API API *API
DB *mgocrud.Database DB Database
} }
// New returns new instance of the API // New returns new instance of the API
func New(session *mgocrud.Session, dbname string, routerGroup *gin.RouterGroup) *API { func New(connection Connection, dbname string, routerGroup *gin.RouterGroup) *API {
return &API{ return &API{
DBSession: session, DBConnection: connection,
DBName: dbname, DBName: dbname,
routerGroup: routerGroup, routerGroup: routerGroup,
} }
@@ -37,11 +37,11 @@ func (api *API) RegisterModel(m mgocrud.ModelInterface) {
modelRegistry = append(modelRegistry, m) modelRegistry = append(modelRegistry, m)
session := api.DBSession.Copy() session := api.DBConnection.NewSession()
defer session.Close() defer session.Close()
db := session.DB(api.DBName) db := session.DB(api.DBName)
err := mgocrud.EnsureIndex(db, m) err := db.EnsureIndex(m)
if err != nil { if err != nil {
panic(err) panic(err)
} }