using AmpDAL.DTO.ApiRequestDuplicateCheck; using AMPDAL.Query.ApiRequestDuplicateCheck; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AmpDAL.CustomCode.ApiRequestDuplicateCheck; public class ApiRequestDuplicateCheckDAL(IQueryExecutor _qe) : IApiRequestDuplicateCheckDAL { public async Task> GetByRequestAsync( int apiRequestId, int tenantId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, ApiRequestDuplicateCheckQB.GET_BY_REQUEST, new { ApiRequestId = apiRequestId, TenantId = tenantId }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task> GetPendingAsync( int tenantId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, ApiRequestDuplicateCheckQB.GET_PENDING, new { TenantId = tenantId }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task SaveDuplicateCheckAsync( ApiRequestDuplicateCheckSaveDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, ApiRequestDuplicateCheckQB.SAVE_DUPLICATE_CHECK, new { dto.DuplicateCheckId, dto.TenantId, dto.SourceApiRequestId, dto.MatchSource, dto.MatchedApiId, dto.MatchedRequestId, dto.MatchedInterfaceId, dto.OverallScore, dto.NameScore, dto.DomainScore, dto.IntentScore, dto.SchemaScore, dto.SuggestionType, dto.SuggestedChange, dto.MatchReason, dto.ReviewStatus // ✅ was missing }, null, // DbTransaction? ct) // ✅ ct now passed .ConfigureAwait(false); public async Task UpdateReviewStatusAsync( int duplicateCheckId, byte reviewStatus, int reviewedById, string? reviewRemarks, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, ApiRequestDuplicateCheckQB.UPDATE_REVIEW_STATUS, new { DuplicateCheckId = duplicateCheckId, TenantId = login.ClientId, ReviewStatus = reviewStatus, ReviewedById = reviewedById, ReviewRemarks = reviewRemarks }, null, // DbTransaction? ct) // ✅ ct now passed .ConfigureAwait(false); public async Task> FindSimilarityInApiAsync( string title, int targetDomainId, byte proposedApiType, string resourceNoun, string kw1, string kw2, string kw3, string kw4, string kw5, int tenantId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, ApiRequestDuplicateCheckQB.FIND_SIMILARITY_API, new { Title = title, TargetDomainId = targetDomainId, ProposedApiType = proposedApiType, ResourceNoun = resourceNoun, KW1 = kw1, KW2 = kw2, KW3 = kw3, KW4 = kw4, KW5 = kw5, TenantId = tenantId }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task> FindSimilarityInRequestsAsync( string title, int apiRequestId, int targetDomainId, byte proposedApiType, string kw1, string kw2, string kw3, string kw4, string kw5, int tenantId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, ApiRequestDuplicateCheckQB.FIND_SIMILARITY_REQUEST, new { Title = title, ApiRequestId = apiRequestId, TargetDomainId = targetDomainId, ProposedApiType = proposedApiType, KW1 = kw1, KW2 = kw2, KW3 = kw3, KW4 = kw4, KW5 = kw5, TenantId = tenantId }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task GetOperationCountAsync( int apiId, int tenantId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync( login, ApiRequestDuplicateCheckQB.GET_OPERATION_COUNT, new { ApiId = apiId, TenantId = tenantId }, null, false, ct).ConfigureAwait(false); public async Task GetAvgParameterCountAsync( int apiId, int tenantId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync( login, ApiRequestDuplicateCheckQB.GET_AVG_PARAMETER_COUNT, new { ApiId = apiId, TenantId = tenantId }, null, false, ct).ConfigureAwait(false); }