using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using KmsDAL.DTO.KmDiscovery; using KmsDAL.Query.KmDiscovery; using Newtonsoft.Json; namespace KmsDAL.CustomCode.KmDiscovery { public class KmDiscoveryDAL : IKmDiscoveryDAL { private readonly IQueryExecutor _qe; public KmDiscoveryDAL(IQueryExecutor qe) => _qe = qe; public async Task SaveKmJob(KmExtractionJobDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, KmDiscoveryQB.SAVE_KMJOB, dto, cancellationToken: ct); public async Task UpdateKmJobStatus(KmExtractionJobDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, KmDiscoveryQB.UPDATE_KMJOB_STATUS, dto, cancellationToken: ct); public async Task GetKmJob(int jobId, LoginDTO login, CancellationToken ct) { var result = await _qe.QuerySingleAsync( login, KmDiscoveryQB.GET_KMJOB, new { JobId = jobId, TenantId = login.ClientId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } public async Task GetKmJobs(int page, int pageSize, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryPagedAsync( login, KmDiscoveryQB.GET_KMJOBS_PAGED, new { TenantId = login.ClientId, Offset = (page - 1) * pageSize, PageSize = pageSize }); return JsonConvert.SerializeObject(result); } public async Task SaveKmCandidate(KmCandidateDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, KmDiscoveryQB.SAVE_KMCANDIDATE, dto, cancellationToken: ct); public async Task GetKmCandidatesPending(LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, KmDiscoveryQB.GET_KMCANDIDATES_PENDING, new { TenantId = login.ClientId }, cancellationToken: ct); return JsonConvert.SerializeObject(result); } public async Task AcceptCandidate(KmAcceptCandidateDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, KmDiscoveryQB.UPDATE_KMCANDIDATE_ACCEPT, new { dto.CandidateId, dto.DomainId, dto.ModifiedTitle, dto.ModifiedContent, dto.ModifiedTags, dto.ReviewNotes, ArtifactId = dto.ArtifactId > 0 ? dto.ArtifactId : -1, ReviewedUserId = login.UserId, ModifiedById = login.UserId, TenantId = login.ClientId }, cancellationToken: ct); public async Task RejectCandidate(KmRejectCandidateDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, KmDiscoveryQB.UPDATE_KMCANDIDATE_REJECT, new { dto.CandidateId, dto.RejectionReason, ReviewedUserId = login.UserId, ModifiedById = login.UserId, TenantId = login.ClientId }, cancellationToken: ct); } }