using adas_core.Application.Repositories.Interfaces; using adas_core.Domain.Models; using adas_core.Domain.Models.AppSettings; using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Driver; namespace adas_core.Infrastructure.Repositories; public class TreatmentArchiveRepository : MongoRepository, ITreatmentArchiveRepository { private readonly ApiSettings _apiSettings; public TreatmentArchiveRepository(IOptions apiSettings, IMongoDatabase database) : base(database) { if (apiSettings == null) throw new ArgumentNullException(nameof(apiSettings)); _apiSettings = apiSettings.Value; } //For testing public override async Task InsertOneAsync(PatientTreatment patientTreatment) { await Collection.InsertOneAsync(patientTreatment); } public async Task DeleteBeforeDate(DateTime date) { var filter = Builders.Filter.Lt(po => po.OrderTime, date); await Collection.DeleteManyAsync(filter); } public async Task InsertBatch(IEnumerable treatments) { var writes = new List>(); writes.AddRange(treatments.Select(d => new InsertOneModel(d))); var bulkInsert = await Collection.BulkWriteAsync(writes); return bulkInsert.InsertedCount; } public async Task> FindAllFromPatient(ObjectId patientId) { var filter = Builders.Filter.Eq(t => t.PatientId, patientId); var result = await Collection.FindAsync(filter); return await result.ToListAsync(); } public override string GetCollectionName() { return _apiSettings.ArchivePatientsTreatments ?? "archive_patients_treatments"; } }