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 }