using EAIAdminDAL.DTO; using EAIAdminDAL.Query; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using static GB5Shared.GB5Constant.Constant; namespace EAIAdminDAL.CustomCode { public class EAIBotKnowledgeSourceDAL : IEAIBotKnowledgeSourceDAL { private readonly IQueryExecutor _qe; private readonly AutoNumber _autoNumber; private readonly ILogger _logger; public EAIBotKnowledgeSourceDAL(IQueryExecutor qe, AutoNumber autoNumber, ILogger logger) { _qe = qe ?? throw new ArgumentNullException(nameof(qe)); _autoNumber = autoNumber ?? throw new ArgumentNullException(nameof(autoNumber)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public async Task> GetListByBotAsync( int eaiBotId, LoginDTO login, CancellationToken ct = default) { var result = await _qe.QueryAsync( login, EAIBotKnowledgeSourceQB.GET_LIST_BY_BOT, new { EAIBotId = eaiBotId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return result ?? []; } public async Task> GetListByCapabilityAsync( int eaiCapabilityId, LoginDTO login, CancellationToken ct = default) { var result = await _qe.QueryAsync( login, EAIBotKnowledgeSourceQB.GET_LIST_BY_CAPABILITY, new { EAICapabilityId = eaiCapabilityId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return result ?? []; } public async Task InsertLinkAsync( EAIBotKnowledgeSourceDTO dto, LoginDTO login, CancellationToken ct = default) { var auto = await _autoNumber.GetNumberAsync(1, AUTONUMBERCONSTANT.EAIBOTKNOWLEDGESOURCE, login) .ConfigureAwait(false); var newId = auto.StartNumber; var now = DateTime.UtcNow; await _qe.ExecuteAsync( login, EAIBotKnowledgeSourceQB.INSERT_LINK, new { EAIBotKnowledgeSourceId = newId, dto.EAIBotId, dto.EAICapabilityId, dto.KmSpaceId, dto.KmDomainId, TenantId = login.ClientId, dto.Version, CreatedById = login.UserId, CreatedOn = now }, cancellationToken: ct).ConfigureAwait(false); _logger.LogInformation("DAL | InsertLink | Completed | NewId={NewId}", newId); return newId; } public async Task DeleteLinkAsync( int eaiBotKnowledgeSourceId, LoginDTO login, CancellationToken ct = default) { await _qe.ExecuteAsync( login, EAIBotKnowledgeSourceQB.DELETE_LINK, new { EAIBotKnowledgeSourceId = eaiBotKnowledgeSourceId, TenantId = login.ClientId, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, cancellationToken: ct).ConfigureAwait(false); } } }