Class MasterListService<T>
- Namespace
- adas_core.Application.Services
- Assembly
- adas-core.Application.dll
Provides a generic service implementation for managing MasterList entities of type T.
Acts as the concrete implementation of the IMasterListService<T> contract for master list operations.
public class MasterListService<T> : IMasterListService<T> where T : MasterList, new()
Type Parameters
TThe type of master list entity managed by the service. Must derive from MasterList and expose a public parameterless constructor.
- Inheritance
-
MasterListService<T>
- Implements
- Inherited Members
- Extension Methods
Constructors
MasterListService(ILogger<MasterListService<T>>, IServiceProvider, Lazy<IClientMessageService>, ISubscribersService, Lazy<IUnitService>, Lazy<IDisplayService>, Lazy<IPatientService>, Lazy<IDischargeService>, Lazy<IAdmissionService>, IOptions<ApiSettings>, IHttpContextAccessor, ILocalAuditService)
public MasterListService(ILogger<MasterListService<T>> logger, IServiceProvider serviceProvider, Lazy<IClientMessageService> clientMessageService, ISubscribersService subscribersService, Lazy<IUnitService> unitService, Lazy<IDisplayService> displayService, Lazy<IPatientService> patientService, Lazy<IDischargeService> dischargeService, Lazy<IAdmissionService> admissionService, IOptions<ApiSettings> apiSettings, IHttpContextAccessor httpContextAccessor, ILocalAuditService auditService)
Parameters
loggerILogger<MasterListService<T>>serviceProviderIServiceProviderclientMessageServiceLazy<IClientMessageService>subscribersServiceISubscribersServiceunitServiceLazy<IUnitService>displayServiceLazy<IDisplayService>patientServiceLazy<IPatientService>dischargeServiceLazy<IDischargeService>admissionServiceLazy<IAdmissionService>apiSettingsIOptions<ApiSettings>httpContextAccessorIHttpContextAccessorauditServiceILocalAuditService
Methods
AddOptionToMasterList(ObjectId, FilterOptionListElement)
Adds a filter option to an existing master list, records the change in the audit log, and broadcasts the update to subscribed clients.
public Task<OptionList?> AddOptionToMasterList(ObjectId id, FilterOptionListElement opt)
Parameters
idObjectIdThe identifier of the master list to which the option will be added.
optFilterOptionListElementThe filter option element to add to the master list.
Returns
- Task<OptionList>
The resulting OptionList entry if the option is successfully added;
nullif the master list cannot be found, no result is produced, or an error is encountered during the operation.
DeleteMasterListById(ObjectId)
Deletes a master list identified by the specified identifier. If the master list is not found, the operation is skipped and logged; if the master list is in use, a conflict exception is thrown.
public Task DeleteMasterListById(ObjectId id)
Parameters
idObjectIdThe identifier of the master list to delete.
Returns
Exceptions
- ConflictException
Thrown when the master list is currently in use and cannot be deleted.
DeleteMasterListOption(ObjectId, ObjectId, string)
Deletes an option from a master list by its identifier. On success, cascades the change to related patient item lists, creates an audit log entry, and broadcasts update and deletion events; returns false if the deletion fails, the master list or option is not found, or an error is logged.
public Task<bool> DeleteMasterListOption(ObjectId id, ObjectId optId, string typeName)
Parameters
idObjectIdThe identifier of the master list that contains the option.
optIdObjectIdThe identifier of the option to remove from the master list.
typeNamestringThe name of the type used when cascading the deletion to related patient item lists.
Returns
- Task<bool>
A task that resolves to
truewhen the option is successfully deleted and the side-effects are applied; otherwise,false.
FindOptionItemById(ObjectId, ObjectId, LocaleEnum)
Retrieves an OptionList item that matches the specified master identifier, option identifier, and locale.
Returns null and logs the error if the lookup fails.
public Task<OptionList?> FindOptionItemById(ObjectId masterId, ObjectId optionId, LocaleEnum locale)
Parameters
masterIdObjectIdThe identifier of the master item that owns the option.
optionIdObjectIdThe identifier of the specific option to locate.
localeLocaleEnumThe locale used to resolve the localized option item.
Returns
- Task<OptionList>
A Task<TResult> containing the matching OptionList, or
nullif no item is found or an error occurs.
GetAllMasterList()
Retrieves all master list entries of the generic type from the underlying repository. If an exception occurs during retrieval, the error is logged and an empty collection is returned as a fallback.
public Task<IEnumerable<T>> GetAllMasterList()
Returns
- Task<IEnumerable<T>>
A task that represents the asynchronous operation. The task result contains all retrieved entries, or an empty collection if an error occurs.
GetAllMasterListCount()
Asynchronously retrieves the total count of all records in the master list for the current entity type. Returns 0 if an error occurs while accessing the repository.
public Task<int> GetAllMasterListCount()
Returns
- Task<int>
A task that represents the asynchronous operation. The task result contains the total count of records, or 0 if an error was encountered.
GetAllMasterListWithPaginatedOptions(PaginationFilter)
Retrieves all master list entries, maps each one to a paginated DTO enriched with its in-use status, and returns the resulting collection. Logs the error and returns an empty collection when the retrieval or mapping process fails.
public Task<IEnumerable<MasterListWithPaginatedOptionsDto>> GetAllMasterListWithPaginatedOptions(PaginationFilter request)
Parameters
requestPaginationFilterThe pagination filter whose page size is applied when building each result entry.
Returns
- Task<IEnumerable<MasterListWithPaginatedOptionsDto>>
A task that yields an enumerable of MasterListWithPaginatedOptionsDto containing the mapped master lists, or an empty enumerable if an error occurs.
GetAllMasterListWithoutOptions()
Retrieves all master list entries without applying any optional filters or parameters. If an error occurs, the exception is logged and an empty collection is returned as a fallback.
public Task<IEnumerable<MasterListDto>> GetAllMasterListWithoutOptions()
Returns
- Task<IEnumerable<MasterListDto>>
A task that represents the asynchronous operation, containing a collection of MasterListDto items, or an empty collection if an error is encountered.
GetAssociatedList(ObjectId, MasterListType, MasterListType)
Retrieves the identifier of a master list associated with a given unit, based on the relationship between two master list types.
Looks up the unit that contains the first master list reference (masterListType1) and returns the identifier of the secondary associated list defined by masterListType2.
Returns null when no unit is found for the given list, or when masterListType2 does not map to a known associated list.
public Task<ObjectId?> GetAssociatedList(ObjectId id, MasterListType masterListType1, MasterListType masterListType2)
Parameters
idObjectIdThe identifier of the master list used to locate the associated unit.
masterListType1MasterListTypeThe master list type used to find the unit (e.g., the primary list reference on the unit).
masterListType2MasterListTypeThe master list type that determines which associated list identifier is returned from the resolved unit.
Returns
- Task<ObjectId?>
A task that yields the associated MongoDB.Bson.ObjectId when a matching list exists, or
nullwhen no unit is found or the type is not mapped.
GetMasterListById(ObjectId, LocaleEnum?)
Retrieves a master list by its unique identifier, optionally filtered by locale. Logs and returns null if an error occurs during the lookup.
public Task<T?> GetMasterListById(ObjectId id, LocaleEnum? locale)
Parameters
idObjectIdThe unique identifier of the master list to retrieve.
localeLocaleEnum?The optional locale used to localize the retrieved master list.
Returns
- Task<T>
The master list of type
Tif found; otherwise, null.
GetMasterListByIdAndSearchOptions(ObjectId, FilterOptionListElement)
Retrieves a master list of OptionList items from the repository using the specified identifier and search filter options.
public Task<List<OptionList>> GetMasterListByIdAndSearchOptions(ObjectId id, FilterOptionListElement filterOption)
Parameters
idObjectIdThe identifier used to locate the master list.
filterOptionFilterOptionListElementThe filter options applied to narrow the search within the master list.
Returns
- Task<List<OptionList>>
A task that represents the asynchronous operation, containing a list of OptionList items matching the given criteria.
GetMasterListByIdAndTextSearch(ObjectId, string?)
Retrieves a master list of options filtered by the specified identifier and an optional text search term. Returns an empty list if an error occurs during retrieval.
public Task<List<OptionList>> GetMasterListByIdAndTextSearch(ObjectId id, string? textSearch)
Parameters
idObjectIdThe identifier used to locate the master list in the repository.
textSearchstringThe optional text search term used to filter the results; may be null.
Returns
- Task<List<OptionList>>
A task that represents the asynchronous operation, containing the list of OptionList entries that match the specified identifier and text search criteria.
GetMasterListByIdWithPaginatedOptions(ObjectId, PaginationFilter)
Retrieves a master list by its identifier and returns it with paginated options, including whether the list is currently in use. Returns null when the master list is not found or when an error occurs during retrieval.
public Task<MasterListWithPaginatedOptionsDto?> GetMasterListByIdWithPaginatedOptions(ObjectId id, PaginationFilter request)
Parameters
idObjectIdThe unique identifier of the master list to retrieve.
requestPaginationFilterThe pagination filter that determines the page size for the returned options.
Returns
- Task<MasterListWithPaginatedOptionsDto>
A task that yields a MasterListWithPaginatedOptionsDto when the master list is found; otherwise, null.
GetMasterListByName(string)
Retrieves a master list entry by its name. Returns the matching item, or null if no entry is found or if an error occurs while querying the repository.
public Task<T?> GetMasterListByName(string name)
Parameters
namestringThe name of the master list entry to look up.
Returns
- Task<T>
A task that resolves to the matching item of type T, or null when no item is found or the lookup fails.
GetMasterListOptionsNamesById(ObjectId)
Retrieves the names of all options associated with a master list identified by the specified id using the default locale. Returns an empty list if the master list is not found or if an error occurs while retrieving the data.
public Task<List<string>> GetMasterListOptionsNamesById(ObjectId id)
Parameters
idObjectIdThe identifier of the master list whose option names are to be retrieved.
Returns
- Task<List<string>>
A list of option names for the found master list, or an empty list if the list is not found or an error is encountered.
GetOptionsOfList(ObjectId)
Retrieves the names of all options associated with the list identified by the specified identifier, using the default locale. Returns an empty list if no list is found for the given identifier.
public Task<List<string>> GetOptionsOfList(ObjectId id)
Parameters
idObjectIdThe identifier of the list whose options should be retrieved.
Returns
- Task<List<string>>
A list of option names belonging to the matching list, or an empty list if the list is not found.
GetPaginatedMasterList(PaginationFilter)
Retrieves a paginated master list based on the specified pagination filter, applying skip and limit operations according to the page number and page size.
public Task<PaginationResponse<T>> GetPaginatedMasterList(PaginationFilter filter)
Parameters
filterPaginationFilterThe pagination filter containing the page number and page size used to determine the subset of records to return.
Returns
- Task<PaginationResponse<T>>
A task that represents the asynchronous operation. The task result contains a PaginationResponse<T> with the paginated data, the current page number, the page size, and the total document count.
GetPaginatedMasterListWithPaginatedOptions(PaginationFilter, PaginationFilter)
Retrieves a paginated collection of master list items, each enriched with a paginated set of associated options and a usage indicator.
Applies the supplied listFilter to paginate the master lists and the optionFilter to size the embedded options within each list DTO.
public Task<PaginationResponse<MasterListWithPaginatedOptionsDto>> GetPaginatedMasterListWithPaginatedOptions(PaginationFilter listFilter, PaginationFilter optionFilter)
Parameters
listFilterPaginationFilterPagination parameters (page number and page size) used to slice the master list result set.
optionFilterPaginationFilterPagination parameters whose page size is applied to the options associated with each returned master list item.
Returns
- Task<PaginationResponse<MasterListWithPaginatedOptionsDto>>
A Task<TResult> containing a PaginationResponse<T> of MasterListWithPaginatedOptionsDto with the requested page of master lists, their paginated options, the current page metadata, and the total document count.
GetPaginatedOptions(PaginationFilter, ObjectId)
Retrieves a paginated subset of options for the specified list, applying the page number and page size from the filter after fetching the full result set from the repository.
public Task<PaginationResponse<OptionList>> GetPaginatedOptions(PaginationFilter filter, ObjectId listId)
Parameters
filterPaginationFilterThe pagination filter that defines the page number and page size to apply to the results.
listIdObjectIdThe identifier of the list whose options are being retrieved.
Returns
- Task<PaginationResponse<OptionList>>
A PaginationResponse<T> containing the requested page of options, the current page metadata, and the total count of available options.
InsertMasterList(T)
Inserts a new master list item, broadcasts the change to subscribers, and records an audit log entry for the operation.
public Task<T?> InsertMasterList(T item)
Parameters
itemTThe master list entity to insert.
Returns
- Task<T>
The inserted entity retrieved from the repository, or
nullif the operation fails.
RemoveMasterListOption(ObjectId, OptionList)
Removes the specified option from a master list identified by its id, auditing the change and broadcasting the update and deleted item to subscribers.
public Task<bool> RemoveMasterListOption(ObjectId id, OptionList oldOpt)
Parameters
idObjectIdThe identifier of the master list from which the option will be removed.
oldOptOptionListThe option to remove from the master list.
Returns
- Task<bool>
A task that resolves to
trueif the option was successfully removed;falseif the operation failed or an error occurred.
SaveRequest(ApiRequest)
Saves the specified API request.
public Task SaveRequest(ApiRequest apiRequest)
Parameters
apiRequestApiRequestThe API request to save.
Returns
SaveRequestAsync(ApiRequest)
Asynchronously saves the specified API request by offloading the save operation to a background task.
public Task SaveRequestAsync(ApiRequest apiRequest)
Parameters
apiRequestApiRequestThe API request to be saved.
Returns
UpdateFullMasterListOption(ObjectId, OptionList, string)
Updates a full master list option, records the change in the audit log, notifies subscribers via broadcast, and propagates the update to the associated patient item list.
Returns null if the underlying repository update fails or an exception is encountered, in which case the error is logged.
Uses the default locale when retrieving the updated master list for audit purposes (locale handling is pending).
public Task<OptionList?> UpdateFullMasterListOption(ObjectId id, OptionList opt, string typeName)
Parameters
idObjectIdThe identifier of the master list that contains the option to update.
optOptionListThe option with the new values to apply to the master list.
typeNamestringThe name of the entity type used when updating the related patient item list.
Returns
- Task<OptionList>
The updated OptionList when the operation succeeds;
nullwhen the update fails or an error is caught.
UpdateMasterList(T)
Updates an existing item in the master list, broadcasts the update operation, and creates an audit log entry comparing the old and new state.
Returns null if the update fails, logging the error internally.
public Task<T?> UpdateMasterList(T item)
Parameters
itemTThe item to update in the master list.
Returns
- Task<T>
The updated item retrieved from the repository, or
nullif an error occurred during the update.
UpdateMasterListDescription(ObjectId, string)
Updates the description of a master list identified by the specified id, creating an audit log entry and broadcasting the change when the update succeeds.
public Task<bool> UpdateMasterListDescription(ObjectId id, string name)
Parameters
idObjectIdThe identifier of the master list to update.
namestringThe new description to apply to the master list.
Returns
- Task<bool>
A task that resolves to
trueif the update succeeded; otherwise,falsewhen the update fails or an exception is caught and logged.
UpdateMasterListName(ObjectId, string)
Updates the name of an existing master list identified by the specified id, records an audit log entry for the change, and broadcasts the update to subscribers.
Returns false if the update fails or an exception is encountered, in which case the error is logged.
public Task<bool> UpdateMasterListName(ObjectId id, string name)
Parameters
idObjectIdThe identifier of the master list to rename.
namestringThe new name to assign to the master list.
Returns
- Task<bool>
A task that resolves to
trueif the master list name was updated successfully; otherwise,false.
UpdateMasterListOption(ObjectId, OptionList, string)
Updates a master list option, performing audit logging, broadcasting the change, and updating the patient item list when successful. Returns null if the option cannot be found or an error occurs.
public Task<OptionList?> UpdateMasterListOption(ObjectId id, OptionList opt, string typeName)
Parameters
idObjectIdThe identifier of the master list containing the option to update.
optOptionListThe option containing the new values to apply.
typeNamestringThe name of the type used when updating the associated patient item list.
Returns
- Task<OptionList>
The updated OptionList if the operation succeeds, or
nullif the master list is not found or an exception is thrown.
UpdateMasterListOption(ObjectId, OptionList, string, LocaleEnum)
Updates an option within the master list for the specified locale, and when the update succeeds, creates an audit log entry, broadcasts the change, and propagates the update to the affected patient item list. Returns null if the update fails, the result is null, or an exception is thrown during processing.
public Task<OptionList?> UpdateMasterListOption(ObjectId id, OptionList opt, string typeName, LocaleEnum locale)
Parameters
idObjectIdThe identifier of the master list whose option will be updated.
optOptionListThe option to be applied to the master list.
typeNamestringThe type name used when propagating the update to the patient item list.
localeLocaleEnumThe locale used for the master list option update and retrieval of the updated entity for auditing.
Returns
- Task<OptionList>
The updated OptionList, or
nullif the update failed, the result wasnull, or an exception occurred.
UpdateOptionDetailsToMasterList(ObjectId, UpdateMasterListDetailsDto)
Updates the option details of a master list identified by the given identifier, records an audit log entry for the change, and broadcasts the update. Returns the updated details, or null if the update fails or an error occurs.
public Task<UpdateMasterListDetailsDto?> UpdateOptionDetailsToMasterList(ObjectId id, UpdateMasterListDetailsDto opt)
Parameters
idObjectIdThe identifier of the master list whose option details will be updated.
optUpdateMasterListDetailsDtoThe new option details to apply to the master list.
Returns
- Task<UpdateMasterListDetailsDto>
A task that yields the updated UpdateMasterListDetailsDto on success, or
nullwhen the update fails or an exception is caught and logged.