using adas_core.Application.Repositories.Interfaces; using adas_core.Domain.Models.AppSettings; using adas_core.Domain.Models.MongoModels; using adas_core.Domain.Models.Responses; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Driver; namespace adas_core.Infrastructure.Repositories; public class DisplayDetailConfigRepository : MongoRepository, IDisplayDetailConfigRepository { private readonly ApiSettings _apiSettings; private readonly ILogger _logger; public DisplayDetailConfigRepository( IMongoDatabase database, ApiSettings apiSettings, ILogger logger ) : base(database) { _apiSettings = apiSettings; _logger = logger; } public override string GetCollectionName() { return _apiSettings.DisplayDetailConfig; } public async Task> GetAll() { var result = await Collection.Find(Builders.Filter.Empty).ToListAsync(); return result; } public async Task GetById(ObjectId configId) { try { var result = await Collection.FindAsync(Builders.Filter.Eq(p => p.Id, configId)); return await result.FirstOrDefaultAsync(); } catch (Exception ex) { _logger.LogError("Error on config card display repository on GetById Exception: {ex}", ex.Message); return null; } } public async Task InsertOneAsyncAndReturn(CardDetailsConfig config) { try { await Collection.InsertOneAsync(config); return config; } catch (Exception ex) { _logger.LogError(ex.Message); return null; } } public async Task> UpdateOne(CardDetailsConfig? config) { try { if (config == null) return new UpdateResponse(0, null); var filter = Builders.Filter.Eq(c => c.Id, config.Id); var update = Builders.Update .Set(c => c.NurseRows, config.NurseRows) .Set(c => c.SmartSections, config.SmartSections) .Set(c => c.Header, config.Header); // Realizamos la actualización var result = await Collection.UpdateOneAsync(filter, update); // Buscamos el documento actual (ya actualizado o el existente si no hubo cambios) var updatedDoc = await Collection.Find(filter).FirstOrDefaultAsync(); // result.ModifiedCount será 1 si cambió algo, o 0 si los datos eran idénticos return new UpdateResponse(result.ModifiedCount, updatedDoc); } catch (Exception e) { _logger.LogError(e.Message); return new UpdateResponse(0, null); } } public async Task DeleteOne(ObjectId configId) { return await DeleteAsync(configId); } public Task UpdateCardConfigId(ObjectId? displayConfigId, ObjectId? resultId) { throw new NotImplementedException(); } }