# Class DischargeRepository

Namespace
  adas_core.Infrastructure.Repositories

Assembly
  adas-core.Infrastructure.dll

Repository for managing Discharge entities in MongoDB. Provides methods for CRUD operations and specific queries related to discharges.

    public class DischargeRepository : MongoRepository<Discharge>, IDischargeRepository, IMongoRepository<Discharge>

Inheritance
  object
  MongoRepository<Discharge>
  DischargeRepository

Implements
  IDischargeRepository
  IMongoRepository<Discharge>

Inherited Members
  MongoRepository<Discharge>.Db
  MongoRepository<Discharge>.Collection
  MongoRepository<Discharge>.UpdateOneAsync(ObjectId, Discharge)
  MongoRepository<Discharge>.DeleteAsync(ObjectId)
  MongoRepository<Discharge>.InsertInitialLoad()
  MongoRepository<Discharge>.InsertManyAsync(List<Discharge>)
  MongoRepository<Discharge>.UpdateManyObjectIdAsync(string, ObjectId, ObjectId)
  MongoRepository<Discharge>.DeleteAsync(string)
  MongoRepository<Discharge>.CollectionExists(string)
  object.Equals(object)
  object.Equals(object, object)
  object.GetHashCode()
  object.GetType()
  object.MemberwiseClone()
  object.ReferenceEquals(object, object)
  object.ToString()

Extension Methods
  NumberUtils.IsNumber(object)
  NumberUtils.ToDouble(object)
  ObjectUtils.ToStr(object?)

## Constructors

### DischargeRepository(IOptions<ApiSettings>, IMongoDatabase)

Initializes a new instance of the DischargeRepository class with the specified API settings and MongoDB database.

    public DischargeRepository(IOptions<ApiSettings> apiSettings, IMongoDatabase database)

#### Parameters

`apiSettings` IOptions<ApiSettings>

  The API settings containing configuration for the repository.

`database` IMongoDatabase

  The MongoDB database instance.

## Methods

### CountByUnitId(ObjectId)

Counts the number of discharge records in the MongoDB collection that match the specified unit ID. If an error occurs during counting, an error is logged and 0 is returned.

    public Task<long> CountByUnitId(ObjectId unitId)

#### Parameters

`unitId` ObjectId

  The ID of the unit to count discharge records for.

#### Returns

Task<long>

  A task representing the asynchronous operation, containing the count of discharge records matching the specified unit ID, or 0 if an error occurs.

### CreateIndexes()

Creates indexes for the MongoDB collection based on the specified fields and options. The method ensures that unique indexes are created for the medical discharge and admin discharge fields, with a partial filter expression to only include documents where both fields exist. If an error occurs during index creation, an error is logged.

    public override Task CreateIndexes()

#### Returns

Task

### Delete(ObjectId)

Deletes a discharge record from the MongoDB collection based on the specified ID.

    public Task Delete(ObjectId id)

#### Parameters

`id` ObjectId

  The ID of the discharge record to delete.

#### Returns

Task

  A task representing the asynchronous operation.

### DeleteByUnitId(ObjectId)

Deletes discharge records from the MongoDB collection based on the specified unit ID. If an error occurs during deletion, an error is logged and false is returned; otherwise, true is returned upon successful deletion.

    public Task<bool> DeleteByUnitId(ObjectId unitId)

#### Parameters

`unitId` ObjectId

  The ID of the unit for which to delete discharge records.

#### Returns

Task<bool>

  A task representing the asynchronous operation, containing true if the deletion was successful, or false if an error occurred.

### DeleteMasterListOption(List<ObjectId>, OptionList, string)

Deletes master list options for discharge records in the MongoDB collection based on the specified unit IDs, update option, and master list type.

    public Task<IEnumerable<Discharge>> DeleteMasterListOption(List<ObjectId> unitIds, OptionList opt, string typeName)

#### Parameters

`unitIds` List<ObjectId>

  The list of unit IDs for which to delete master list options.

`opt` OptionList

  The update option specifying the changes to be applied to the master list.

`typeName` string

  The name of the master list type to be updated.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing the updated discharge records, or an empty list if an error occurs.

### FindAll()

Finds and retrieves all discharge records from the MongoDB collection. If an error occurs during retrieval, an error is logged and an empty list is returned.

    public Task<IEnumerable<Discharge>> FindAll()

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of all discharge records.

### FindByDestination(string)

Finds and retrieves discharge records from the MongoDB collection based on the specified destination. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<IEnumerable<Discharge>?> FindByDestination(string destination)

#### Parameters

`destination` string

  The destination to search for.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of discharge records matching the specified destination, or null if an error occurs.

### FindById(ObjectId)

Finds and retrieves a discharge record from the MongoDB collection based on the specified ID. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<Discharge?> FindById(ObjectId id)

#### Parameters

`id` ObjectId

  The ID of the discharge record to retrieve.

#### Returns

Task<Discharge>

  A task representing the asynchronous operation, containing the discharge record if found, or null if not found or an error occurs.

### FindByPoCId(ObjectId)

Finds and retrieves discharge records from the MongoDB collection based on the specified Point of Care ID. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<IEnumerable<Discharge>?> FindByPoCId(ObjectId pocId)

#### Parameters

`pocId` ObjectId

  The ID of the Point of Care to search for.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of discharge records matching the specified Point of Care ID, or null if an error occurs.

### FindByService(string)

Finds and retrieves discharge records from the MongoDB collection based on the specified service. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<IEnumerable<Discharge>?> FindByService(string service)

#### Parameters

`service` string

  The service to search for.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of discharge records matching the specified service, or null if an error occurs.

### FindByUnit(string)

Finds and retrieves discharge records from the MongoDB collection based on the specified unit name. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<IEnumerable<Discharge>?> FindByUnit(string unit)

#### Parameters

`unit` string

  The unit name to search for.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of discharge records matching the specified unit name, or null if an error occurs.

### GetByPatientId(ObjectId)

Finds and retrieves a discharge record from the MongoDB collection based on the specified patient ID. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<Discharge?> GetByPatientId(ObjectId patientId)

#### Parameters

`patientId` ObjectId

  The ID of the patient for which to retrieve the discharge record.

#### Returns

Task<Discharge>

  A task representing the asynchronous operation, containing the discharge record if found, or null if an error occurs or the record is not found.

### GetCollectionName()

Gets the name of the MongoDB collection for discharges from the API settings.

    public override string GetCollectionName()

#### Returns

string

  The name of the MongoDB collection for discharges.

### GetDischargeByLocation(PatientLocation)

Finds and retrieves a discharge record from the MongoDB collection based on the specified patient location. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<Discharge?> GetDischargeByLocation(PatientLocation location)

#### Parameters

`location` PatientLocation

  The patient location to search for.

#### Returns

Task<Discharge>

  A task representing the asynchronous operation, containing the discharge record matching the specified patient location, or null if an error occurs.

### GetDischargeByPointOfCareId(ObjectId)

Finds and retrieves a discharge record from the MongoDB collection based on the specified Point of Care ID. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<Discharge?> GetDischargeByPointOfCareId(ObjectId id)

#### Parameters

`id` ObjectId

  The ID of the Point of Care to search for.

#### Returns

Task<Discharge>

  A task representing the asynchronous operation, containing the discharge record matching the specified Point of Care ID, or null if an error occurs.

### GetDischargesByUnitIds(IEnumerable<ObjectId>?)

Finds and retrieves discharge records from the MongoDB collection based on the specified unit IDs. If an error occurs during retrieval, an error is logged and null is returned.

    public Task<IEnumerable<Discharge>?> GetDischargesByUnitIds(IEnumerable<ObjectId>? unitIds)

#### Parameters

`unitIds` IEnumerable<ObjectId>

  The IDs of the units to search for.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing a list of discharge records matching the specified unit IDs, or null if an error occurs.

### InsertOneAsync(Discharge)

Inserts a new discharge record into the MongoDB collection. Sets the discharge date to the current UTC time before insertion.

    public override Task InsertOneAsync(Discharge discharge)

#### Parameters

`discharge` Discharge

  The discharge record to insert.

#### Returns

Task

  A task representing the asynchronous operation.

### Update(Discharge)

Updates an existing discharge record in the MongoDB collection. If the update operation fails, a ConflictException is thrown.

    public Task Update(Discharge discharge)

#### Parameters

`discharge` Discharge

  The discharge record to update.

#### Returns

Task

  A task representing the asynchronous operation.

#### Exceptions

ConflictException

### UpdateMasterListOption(List<ObjectId>, UpdateOptionMasterListDto, string)

Updates the master list options for discharge records in the MongoDB collection based on the specified unit IDs, update option, and master list type. The method parses the master list type and performs updates accordingly. If an error occurs during the update process, an error is logged and an empty list is returned.

    public Task<IEnumerable<Discharge>> UpdateMasterListOption(List<ObjectId> unitIds, UpdateOptionMasterListDto opt, string typeName)

#### Parameters

`unitIds` List<ObjectId>

  The list of unit IDs for which to update the master list options.

`opt` UpdateOptionMasterListDto

  The update option specifying the changes to be applied to the master list.

`typeName` string

  The name of the master list type to be updated.

#### Returns

Task<IEnumerable<Discharge>>

  A task representing the asynchronous operation, containing the updated discharge records, or an empty list if an error occurs.

### UpdatePatient(ObjectId, Patient)

Updates the patient information of a discharge record in the MongoDB collection based on the specified ID. If the update operation fails, an error is logged.

    public Task UpdatePatient(ObjectId id, Patient patient)

#### Parameters

`id` ObjectId

  The ID of the discharge record to update.

`patient` Patient

  The new patient information to set.

#### Returns

Task

  A task representing the asynchronous operation.

### UpdateUnit(ObjectId, string)

Updates the unit name of a discharge record in the MongoDB collection based on the specified ID. If the update operation fails, an error is logged.

    public Task UpdateUnit(ObjectId id, string unit)

#### Parameters

`id` ObjectId

  The ID of the discharge record to update.

`unit` string

  The new unit name to set.

#### Returns

Task

  A task representing the asynchronous operation.