using FrameworkDAL.DTO.EIPConversation; using FrameworkDAL.Query.EIPConversation.EIPCapability; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using Microsoft.Extensions.Logging; using System; using System.Threading; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.EIPConversation.EIPCapability { public class EIPCapabilityDAL : IEIPCapabilityDAL { private readonly IQueryExecutor _queryExecutor; private readonly ILogger _logger; public EIPCapabilityDAL(IQueryExecutor queryExecutor, ILogger logger) { _queryExecutor = queryExecutor ?? throw new ArgumentNullException(nameof(queryExecutor)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task GetCapabilityAsync( string tenantId, string capabilityCode, LoginDTO loginDTO) { try { var result = await _queryExecutor.QuerySingleAsync( loginDTO, EIPCapabilityQB.GET_EIPCAPABILITY, new { TenantId = tenantId, CapabilityCode = capabilityCode }); return JsonConvert.SerializeObject(result ?? new EIPCapabilityDTO()); } catch (Exception ex) { _logger.LogError(ex, "Error fetching capability | Capability={Capability}", capabilityCode); throw; } } public async Task SaveCapabilityAsync(EIPCapabilityDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); try { return await _queryExecutor.ExecuteAsync(loginDTO, EIPCapabilityQB.SAVE_EIPCAPABILITY, dto); } catch (Exception ex) { _logger.LogError(ex, "Error saving capability | Capability={Capability}", dto.CapabilityCode); throw; } } public async Task GetRiskConfigByCodeAsync( string capabilityCode, int tenantId, LoginDTO loginDTO, CancellationToken ct = default) { try { return await _queryExecutor.QuerySingleAsync( loginDTO, EIPCapabilityQB.GET_RISK_CONFIG_BY_CODE, new { CapabilityCode = capabilityCode, TenantId = tenantId }, cancellationToken: ct); } catch (Exception ex) { _logger.LogError(ex, "Error fetching risk config | Capability={Capability}", capabilityCode); throw; } } } }