Files
sxchnge/backend/pkg/db/factory.go
T

54 lines
1.9 KiB
Go

package db
import (
"git.sendico.io/tech/sxchnge/bff/pkg/auth"
"git.sendico.io/tech/sxchnge/bff/pkg/db/account"
mongoimpl "git.sendico.io/tech/sxchnge/bff/pkg/db/internal/mongo"
"git.sendico.io/tech/sxchnge/bff/pkg/db/invitation"
"git.sendico.io/tech/sxchnge/bff/pkg/db/policy"
"git.sendico.io/tech/sxchnge/bff/pkg/db/role"
"git.sendico.io/tech/sxchnge/bff/pkg/db/transaction"
"git.sendico.io/tech/sxchnge/bff/pkg/merrors"
"git.sendico.io/tech/sxchnge/bff/pkg/mlogger"
)
// Factory exposes high-level repositories used by application services.
type Factory interface {
NewAccountDB() (account.DB, error)
NewAccountDBWithCollection(collection string) (account.DB, error)
NewInvitationsDB() (invitation.DB, error)
NewRolesDB() (role.DB, error)
NewPoliciesDB() (policy.DB, error)
TransactionFactory() transaction.Factory
Permissions() auth.Provider
CloseConnection()
}
// NewConnection builds a Factory backed by the configured driver.
func NewConnection(logger mlogger.Logger, config *Config) (Factory, error) {
if config == nil {
return nil, merrors.InvalidArgument("database configuration is required", "config")
}
if config.Driver == Mongo {
return mongoimpl.NewConnection(logger, config.Settings)
}
return nil, merrors.InvalidArgument("unknown database driver: "+string(config.Driver), "config.driver")
}
// NewCentralPermissionsConnection opens the explicitly configured central
// permissions database. It intentionally has no fallback to a service domain DB.
func NewCentralPermissionsConnection(logger mlogger.Logger, config *PermissionsDatabaseConfig) (Factory, error) {
if config == nil {
return nil, merrors.InvalidArgument("permissions_database configuration is required", "permissions_database")
}
conn, err := NewConnection(logger, config.AsDatabaseConfig())
if err != nil {
return nil, merrors.Wrap(err, "permissions_database")
}
return conn, nil
}