using FrameworkDAL.CustomCode.DirectAction; using FrameworkDAL.DTO.EIPConversation; using GB5Shared.DTO.Framework.Login; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace FrameworkBLL.DirectAction { public class DirectActionTokenAdminBLL : IDirectActionTokenAdminBLL { private static readonly string[] ValidStatuses = ["UNUSED", "USED", "REVOKED", "EXPIRED"]; private readonly IDirectActionTokenAdminDAL _dal; private readonly ILogger _logger; public DirectActionTokenAdminBLL( IDirectActionTokenAdminDAL dal, ILogger logger) { _dal = dal ?? throw new ArgumentNullException(nameof(dal)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task> GetTokenListAsync( string? actionCode, string? status, DateTime? fromDate, DateTime? toDate, LoginDTO login, CancellationToken ct = default) { try { var normStatus = status?.Trim().ToUpperInvariant(); if (normStatus != null && !Array.Exists(ValidStatuses, s => s == normStatus)) throw new ArgumentException( "Status must be one of: UNUSED, USED, REVOKED, EXPIRED (or omit to return all)."); _logger.LogInformation( "BLL | GetTokenList | Tenant={TenantId} | ActionCode={ActionCode} | Status={Status}", login.ClientId, actionCode, normStatus); return await _dal.GetTokenListAsync( actionCode?.Trim().ToUpperInvariant(), normStatus, fromDate, toDate, login, ct).ConfigureAwait(false); } catch (Exception ex) { _logger.LogError(ex, "BLL | GetTokenList | Error | Tenant={TenantId}", login.ClientId); throw; } } } }