package auth import ( "context" "github.com/tech/sendico/pkg/db/policy" "github.com/tech/sendico/pkg/db/repository/builder" "github.com/tech/sendico/pkg/db/template" "github.com/tech/sendico/pkg/mlogger" "github.com/tech/sendico/pkg/model" "github.com/tech/sendico/pkg/mservice" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" ) type ProtectedDB[T model.PermissionBoundStorable] interface { Create(ctx context.Context, accountRef, organizationRef primitive.ObjectID, object T) error InsertMany(ctx context.Context, accountRef, organizationRef primitive.ObjectID, objects []T) error Get(ctx context.Context, accountRef, objectRef primitive.ObjectID, result T) error Update(ctx context.Context, accountRef primitive.ObjectID, object T) error Delete(ctx context.Context, accountRef, objectRef primitive.ObjectID) error DeleteCascadeAuth(ctx context.Context, accountRef, objectRef primitive.ObjectID) error Patch(ctx context.Context, accountRef, objectRef primitive.ObjectID, patch builder.Patch) error PatchMany(ctx context.Context, accountRef primitive.ObjectID, query builder.Query, patch builder.Patch) (int, error) Unprotected() template.DB[T] ListIDs(ctx context.Context, action model.Action, accountRef primitive.ObjectID, query builder.Query) ([]primitive.ObjectID, error) } func CreateDB[T model.PermissionBoundStorable]( ctx context.Context, l mlogger.Logger, pdb policy.DB, enforcer Enforcer, collection mservice.Type, db *mongo.Database, ) (ProtectedDB[T], error) { return CreateDBImp[T](ctx, l, pdb, enforcer, collection, db) }