using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using MMDAL.DTO.ParameterPartyOverride; using MMDAL.Query.ParameterPartyOverride; using Newtonsoft.Json; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MMDAL.CustomCode.ParameterPartyOverride { public class ParameterPartyOverrideDAL : IParameterPartyOverrideDAL { private readonly IQueryExecutor _QueryExecutor; public ParameterPartyOverrideDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetParameterPartyOverride(int parameterPartyOverrideId, LoginDTO loginDTO, CancellationToken ct) { try { var result = await _QueryExecutor.QueryAsync( loginDTO, ParameterPartyOverrideQB.GET_PARAMETERPARTYOVERRIDE, new { ParameterPartyOverrideId = parameterPartyOverrideId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } catch (Exception ex) { throw new Exception($"Failed to retrieve ParameterPartyOverride: {ex.Message}", ex); } } public async Task GetParameterPartyOverrideList(int? partyId, int? itemId, int? parameterSetId, LoginDTO loginDTO, CancellationToken ct) { try { var result = await _QueryExecutor.QueryAsync( loginDTO, ParameterPartyOverrideQB.GET_PARAMETERPARTYOVERRIDE_LIST, new { PartyId = partyId, ItemId = itemId, ParameterSetId = parameterSetId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } catch (Exception ex) { throw new Exception($"Failed to retrieve ParameterPartyOverride list: {ex.Message}", ex); } } public async Task GetParameterPartyOverrideByScope(int partyId, int itemId, int parameterSetId, int parameterId, LoginDTO loginDTO, CancellationToken ct) { try { var result = await _QueryExecutor.QueryAsync( loginDTO, ParameterPartyOverrideQB.GET_PARAMETERPARTYOVERRIDE_BY_SCOPE, new { PartyId = partyId, ItemId = itemId, ParameterSetId = parameterSetId, ParameterId = parameterId }, cancellationToken: ct); return result?.FirstOrDefault(); } catch (Exception ex) { throw new Exception($"Failed to retrieve ParameterPartyOverride by scope: {ex.Message}", ex); } } public async Task SaveParameterPartyOverride(ParameterPartyOverrideDTO dto, LoginDTO loginDTO, CancellationToken ct) { try { await _QueryExecutor.ExecuteAsync( loginDTO, ParameterPartyOverrideQB.SAVE_PARAMETERPARTYOVERRIDE, dto, cancellationToken: ct); return dto.ParameterPartyOverrideId; } catch (Exception ex) { throw new Exception($"Failed to save ParameterPartyOverride: {ex.Message}", ex); } } public async Task UpdateParameterPartyOverride(ParameterPartyOverrideDTO dto, LoginDTO loginDTO, CancellationToken ct) { try { await _QueryExecutor.ExecuteAsync( loginDTO, ParameterPartyOverrideQB.UPDATE_PARAMETERPARTYOVERRIDE, dto, cancellationToken: ct); return dto.ParameterPartyOverrideId; } catch (Exception ex) { throw new Exception($"Failed to update ParameterPartyOverride: {ex.Message}", ex); } } public async Task DeleteParameterPartyOverride(int parameterPartyOverrideId, LoginDTO loginDTO, CancellationToken ct) { try { return await _QueryExecutor.ExecuteAsync( loginDTO, ParameterPartyOverrideQB.DELETE_PARAMETERPARTYOVERRIDE, new { ParameterPartyOverrideId = parameterPartyOverrideId, ModifiedById = loginDTO.UserId, ModifiedOn = DateTime.UtcNow }, cancellationToken: ct); } catch (Exception ex) { throw new Exception($"Failed to delete ParameterPartyOverride ID {parameterPartyOverrideId}: {ex.Message}", ex); } } } }