using FrameworkDAL.DTO.EIPConversation; using FrameworkDAL.Query.EIPConversation.EIPActionRegistry; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using Microsoft.Extensions.Logging; using System; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.EIPConversation.EIPActionRegistry { public class EIPActionRegistryDAL : IEIPActionRegistryDAL { private readonly IQueryExecutor _queryExecutor; private readonly ILogger _logger; public EIPActionRegistryDAL(IQueryExecutor queryExecutor, ILogger logger) { _queryExecutor = queryExecutor ?? throw new ArgumentNullException(nameof(queryExecutor)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task GetActionAsync(string actionCode, LoginDTO loginDTO) { try { var result = await _queryExecutor.QuerySingleAsync( loginDTO, EIPActionRegistryQB.GET_EIPACTIONREGISTRY, new { ActionCode = actionCode }); return JsonConvert.SerializeObject(result ?? new EIPActionRegistryDTO()); } catch (Exception ex) { _logger.LogError(ex, "Error fetching action registry | ActionCode={ActionCode}", actionCode); throw; } } public async Task SaveActionAsync(EIPActionRegistryDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); try { return await _queryExecutor.ExecuteAsync(loginDTO, EIPActionRegistryQB.SAVE_EIPACTIONREGISTRY, dto); } catch (Exception ex) { _logger.LogError(ex, "Error saving action registry | ActionCode={ActionCode}", dto.ActionCode); throw; } } } }