rama creada apartir de master en j

This commit is contained in:
jrojas
2026-06-26 10:29:23 +02:00
parent 319fd3dfb0
commit c1517fda87
2810 changed files with 1927392 additions and 25392 deletions
@@ -8,23 +8,39 @@ using MongoUtils = adas_core.Infrastructure.Utils.MongoUtils;
namespace adas_core.Infrastructure.Repositories;
/// <summary>
/// Repository for managing patient diagnoses in a MongoDB collection. Provides methods for CRUD operations and querying diagnoses by patient ID and code.
/// </summary>
public class DiagnosisRepository : MongoRepository<PatientDiagnosis>, IDiagnosisRepository
{
private readonly ApiSettings _apiSettings;
/// <summary>
/// Initializes a new instance of the <see cref="DiagnosisRepository"/> class with the specified API settings and MongoDB database. The API settings are used to determine the collection name for storing patient diagnoses.
/// </summary>
/// <param name="apiSettings">The API settings containing configuration for the repository.</param>
/// <param name="database">The MongoDB database instance.</param>
/// <exception cref="ArgumentNullException">Thrown when the API settings are null.</exception>
public DiagnosisRepository(IOptions<ApiSettings> apiSettings, IMongoDatabase database) : base(database)
{
if (apiSettings == null) throw new ArgumentNullException(nameof(apiSettings));
_apiSettings = apiSettings.Value;
} //For testing
/// <summary>
/// Gets the name of the MongoDB collection for storing patient diagnoses. The collection name is determined by the API settings, and defaults to "patients_diagnosis" if not specified.
/// </summary>
/// <returns>The name of the MongoDB collection for patient diagnoses.</returns>
public override string GetCollectionName()
{
return _apiSettings.PatientsDiagnosis ?? "patients_diagnosis";
}
/// <summary>
/// Retrieves a list of patient diagnoses for a given patient ID. The diagnoses are sorted in descending order by time, with the most recent diagnoses appearing first.
/// </summary>
/// <param name="patientId">The ID of the patient whose diagnoses are to be retrieved.</param>
/// <returns>A list of patient diagnoses for the specified patient ID.</returns>
public async Task<List<PatientDiagnosis>> GetByPatient(ObjectId patientId)
{
var filter = Builders<PatientDiagnosis>.Filter.Eq(ob => ob.PatientId, patientId);
@@ -34,24 +50,47 @@ public class DiagnosisRepository : MongoRepository<PatientDiagnosis>, IDiagnosis
return result.ToList();
}
/// <summary>
/// Deletes a patient diagnosis by its ID. This method removes the diagnosis document from the MongoDB collection based on the provided ID.
/// </summary>
/// <param name="id">The ID of the patient diagnosis to delete.</param>
/// <returns>A task representing the asynchronous operation.</returns>
public new async Task DeleteAsync(ObjectId id)
{
var filter = Builders<PatientDiagnosis>.Filter.Eq(t => t.Id, id);
await Collection.DeleteOneAsync(filter);
}
/// <summary>
/// Inserts a new patient diagnosis into the MongoDB collection. This method adds a new diagnosis document to the collection based on the provided <see cref="PatientDiagnosis"/> object.
/// </summary>
/// <param name="diagnosis">The patient diagnosis to insert.</param>
/// <returns>A task representing the asynchronous operation.</returns>
public override async Task InsertOneAsync(PatientDiagnosis diagnosis)
{
await Collection.InsertOneAsync(diagnosis);
}
/// <summary>
/// Deletes all patient diagnoses associated with a specific patient ID. This method removes all diagnosis documents from the MongoDB collection that match the provided patient ID.
/// </summary>
/// <param name="patientId">The ID of the patient whose diagnoses are to be deleted.</param>
/// <returns></returns>
public async Task DeleteByPatientId(ObjectId patientId)
{
var filter = Builders<PatientDiagnosis>.Filter.Eq(po => po.PatientId, patientId);
await Collection.DeleteManyAsync(filter);
}
/// <summary>
/// Finds a patient diagnosis by patient ID, code, and coding system.
/// This method retrieves a single diagnosis document from the MongoDB collection that matches the provided patient ID, code, and coding system.
/// If no matching diagnosis is found, it returns null.
/// </summary>
/// <param name="patientId">The ID of the patient.</param>
/// <param name="code">The code of the diagnosis.</param>
/// <param name="codingSystem">The coding system of the diagnosis.</param>
/// <returns>The matching patient diagnosis, or null if not found.</returns>
public async Task<PatientDiagnosis?> FindByPatientIdAndCode(ObjectId patientId, string? code, string? codingSystem)
{
var builder = Builders<PatientDiagnosis>.Filter;
@@ -66,7 +105,12 @@ public class DiagnosisRepository : MongoRepository<PatientDiagnosis>, IDiagnosis
return await result.FirstOrDefaultAsync();
}
/// <summary>
/// Finds patient diagnoses by patient ID. This method retrieves all diagnosis documents from the MongoDB collection that match the provided patient ID.
/// The results are returned as an asynchronous cursor, allowing for efficient retrieval of large datasets.
/// </summary>
/// <param name="patientId">The ID of the patient whose diagnoses are to be retrieved.</param>
/// <returns>An asynchronous cursor of patient diagnoses.</returns>
public async Task<IAsyncCursor<PatientDiagnosis>> FindByPatientIdAsync(ObjectId patientId)
{
var filter = Builders<PatientDiagnosis>.Filter.Eq(ob => ob.PatientId, patientId);
@@ -74,11 +118,23 @@ public class DiagnosisRepository : MongoRepository<PatientDiagnosis>, IDiagnosis
return await Collection.FindAsync(filter);
}
/// <summary>
/// Updates the patient ID for all diagnoses that match the old patient ID.
/// This method performs a bulk update operation on the MongoDB collection, changing the patient ID from the old value to the new value for all matching diagnosis documents.
/// </summary>
/// <param name="nameId">The name ID associated with the patient.</param>
/// <param name="id">The new patient ID to be set.</param>
/// <param name="oldId">The old patient ID to be replaced.</param>
/// <returns>A task representing the asynchronous operation.</returns>
public async Task UpdateManyObjectId(string nameId, ObjectId id, ObjectId oldId)
{
await UpdateManyObjectIdAsync(nameId, id, oldId);
}
/// <summary>
/// Creates indexes for the patient diagnosis collection. This method ensures that the necessary indexes are created on the MongoDB collection to optimize query performance.
/// </summary>
/// <returns>A task representing the asynchronous operation.</returns>
public override async Task CreateIndexes()
{
var options = new CreateIndexOptions { Background = true, Unique = false };