using FrameworkDAL.DTO.ContentDiscovery; using FrameworkDAL.Query.ContentDiscovery; using GB5Shared.DTO.Framework.CommonConfig; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Microsoft.Extensions.Options; using static GB5Shared.GB5Constant.Constant; namespace FrameworkDAL.CustomCode.ContentDiscovery; public class ContentDiscoveryCheckDAL( IQueryExecutor _qe, IOptionsSnapshot dbConfig ) : IContentDiscoveryCheckDAL { private bool IsPg => dbConfig.Value.DataBaseType == DBTYPE.POSTGRESQL; public async Task> GetPendingAsync( int tenantId, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ContentDiscoveryCheckQB.PG_GET_PENDING : ContentDiscoveryCheckQB.GET_PENDING; var result = await _qe.QueryAsync( login, sql, new { TenantId = tenantId }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task SaveDiscoveryCheckAsync( ContentDiscoveryCheckSaveDTO dto, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ContentDiscoveryCheckQB.PG_SAVE_DISCOVERY_CHECK : ContentDiscoveryCheckQB.SAVE_DISCOVERY_CHECK; await _qe.ExecuteAsync( login, sql, new { dto.CheckId, dto.TenantId, dto.Kind, dto.ProposedTitle, dto.ProposedKeywords, dto.ProposedModuleId, dto.MatchedReportId, dto.OverallScore, dto.NameScore, dto.ModuleScore, dto.IntentScore, dto.SuggestionType, dto.SuggestedChange, dto.MatchReason }, null, ct).ConfigureAwait(false); } public async Task UpdateReviewStatusAsync( int checkId, byte reviewStatus, int reviewedById, string? reviewRemarks, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ContentDiscoveryCheckQB.PG_UPDATE_REVIEW_STATUS : ContentDiscoveryCheckQB.UPDATE_REVIEW_STATUS; await _qe.ExecuteAsync( login, sql, new { CheckId = checkId, TenantId = login.ClientId, ReviewStatus = reviewStatus, ReviewedById = reviewedById, ReviewRemarks = reviewRemarks }, null, ct).ConfigureAwait(false); } public async Task> FindSimilarityInReportsAsync( string title, int targetModuleId, string kw1, string kw2, string kw3, string kw4, string kw5, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ContentDiscoveryCheckQB.PG_FIND_SIMILARITY_REPORT : ContentDiscoveryCheckQB.FIND_SIMILARITY_REPORT; var result = await _qe.QueryAsync( login, sql, new { Title = title, TargetModuleId = targetModuleId, KW1 = kw1, KW2 = kw2, KW3 = kw3, KW4 = kw4, KW5 = kw5 }, null, false, ct).ConfigureAwait(false); return result.ToList(); } public async Task GetViewCountAsync(int reportId, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ContentDiscoveryCheckQB.PG_GET_VIEW_COUNT : ContentDiscoveryCheckQB.GET_VIEW_COUNT; return await _qe.ExecuteScalarAsync( login, sql, new { ReportId = reportId }, null, false, ct).ConfigureAwait(false); } }