54 lines
1.9 KiB
Go
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
|
|
}
|