using MongoDB.Bson; using MongoDB.Driver; using QuestionsApi.Models; namespace QuestionsApi.Services.Flashcards; public sealed class FlashcardMediaStore { private readonly IMongoCollection _assets; public FlashcardMediaStore(MongoDatabaseProvider mongo) { _assets = mongo.Database.GetCollection("FlashcardMediaAssets"); _assets.Indexes.CreateOne(new CreateIndexModel( Builders.IndexKeys.Ascending(v => v.UserId), new CreateIndexOptions { Name = "flashcard_media_user" })); } public async Task CreateAsync(string userId, string fileName, string contentType, byte[] bytes) { var asset = new FlashcardMediaAsset { UserId = userId, FileName = fileName, ContentType = contentType, Bytes = bytes, CreatedUtc = DateTime.UtcNow }; await _assets.InsertOneAsync(asset); return asset; } public async Task GetAsync(string userId, string id) { if (!ObjectId.TryParse(id, out _)) return null; return await _assets.Find(v => v.UserId == userId && v.Id == id).FirstOrDefaultAsync(); } public Task DeleteAsync(string userId, string id) => _assets.DeleteOneAsync(v => v.UserId == userId && v.Id == id).ContinueWith(t => t.Result.DeletedCount); }