using MongoDB.Bson;
namespace FozFc.Api.Infrastructure.Mongo;
///
/// Generic, schema-less document access over any collection. Returns raw BSON
/// documents (with _id); callers normalize for output at the API boundary.
///
public interface IDocumentRepository
{
Task> FindAsync(string collection, BsonDocument filter, BsonDocument? sort, int limit, CancellationToken ct = default);
Task GetByIdAsync(string collection, string id, CancellationToken ct = default);
Task FindOneByFieldAsync(string collection, string field, BsonValue value, CancellationToken ct = default);
Task InsertAsync(string collection, BsonDocument document, CancellationToken ct = default);
/// Create-or-merge by id. Sets createdAt on insert and, optionally, updatedAt.
Task UpsertAsync(string collection, string id, BsonDocument body, bool setUpdatedAt, CancellationToken ct = default);
/// Update an existing document. Returns false when no document matched.
Task UpdateAsync(string collection, string id, BsonDocument body, CancellationToken ct = default);
Task DeleteAsync(string collection, string id, CancellationToken ct = default);
}