1
0
Fork 0

the contextkey now refers now to the function for getting the database.

Dieser Commit ist enthalten in:
Sebastian Tobie 2021-02-28 14:01:31 +01:00
Ursprung 1f800c0089
Commit 7896a45398
1 geänderte Dateien mit 18 neuen und 6 gelöschten Zeilen

Datei anzeigen

@ -17,6 +17,10 @@ import (
// ContextKey is the key that is used in a gin.Context to get the Middleware // ContextKey is the key that is used in a gin.Context to get the Middleware
const ContextKey string = "db" const ContextKey string = "db"
// ConnGet is an function that returns an connection instance.
type ConnGet func(string) *pgxpool.Conn
var _ ConnGet = NewMiddleware().GetConn
var _ middleware.Middleware = &Middleware{} var _ middleware.Middleware = &Middleware{}
// Middleware return a handler that sets the db into the context of every request. // Middleware return a handler that sets the db into the context of every request.
@ -68,14 +72,11 @@ func (m *Middleware) AddDB(name, uri string) (err error) {
return return
} }
// GetDB returns a pgx.Conn Object or nil if the name is not found. func (m *Middleware) getconn(name string) *pgxpool.Conn {
func (m *Middleware) GetDB(name string) *pgxpool.Conn {
m.lock.Lock()
defer m.lock.Unlock()
if db, found := m.databases[name]; found { if db, found := m.databases[name]; found {
conn, err := db.Acquire(context.TODO()) conn, err := db.Acquire(context.TODO())
if err != nil { if err != nil {
log.Error().Err(err).Msg("Could not get a connection from the pool") log.Error().Err(err).Msgf("Could not get the connection from the pool %s", name)
return nil return nil
} }
return conn return conn
@ -83,9 +84,20 @@ func (m *Middleware) GetDB(name string) *pgxpool.Conn {
return nil return nil
} }
// GetConn returns a connection from the specified database or if not found one of the default database.
func (m *Middleware) GetConn(name string) *pgxpool.Conn {
m.lock.Lock()
defer m.lock.Unlock()
if conn := m.getconn(name); conn != nil {
return conn
}
conn := m.getconn("default")
return conn
}
// Gin is the Entrypoint for Gin. // Gin is the Entrypoint for Gin.
func (m *Middleware) Gin(c *gin.Context) { func (m *Middleware) Gin(c *gin.Context) {
c.Set(ContextKey, m) c.Set(ContextKey, m.GetConn)
} }
// Teardown closes the DBConnection // Teardown closes the DBConnection