package mongo import ( "git.sendico.io/tech/sxchnge/bff/pkg/auth" "git.sendico.io/tech/sxchnge/bff/pkg/db" "git.sendico.io/tech/sxchnge/bff/pkg/db/policy" "git.sendico.io/tech/sxchnge/bff/pkg/db/transaction" "git.sendico.io/tech/sxchnge/bff/pkg/merrors" "go.mongodb.org/mongo-driver/v2/mongo" ) // Dependencies resolves shared DB/auth/transaction primitives for edge-local store wiring only. type Dependencies struct { Database *mongo.Database Enforcer auth.Enforcer Policies policy.DB Transactions transaction.Factory } type DatabaseProvider interface { MongoDatabase() *mongo.Database } func ResolveDependencies(dbf db.Factory) (*Dependencies, error) { if dbf == nil { return nil, merrors.InvalidArgument("database factory is required", "dbFactory") } provider, ok := dbf.(DatabaseProvider) if !ok || provider.MongoDatabase() == nil { return nil, merrors.Internal("mongo database provider is not available for edge-local storage wiring") } permissions := dbf.Permissions() if permissions == nil || permissions.Enforcer() == nil { return nil, merrors.Internal("permissions provider is not available for edge-local storage wiring") } pdb, err := dbf.NewPoliciesDB() if err != nil { return nil, err } return &Dependencies{ Database: provider.MongoDatabase(), Enforcer: permissions.Enforcer(), Policies: pdb, Transactions: dbf.TransactionFactory(), }, nil }