using AnalyticsDAL.DTO.Analysis; using AnalyticsDAL.Query.AnalysisFields; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AnalyticsDAL.CustomCode.AnalysisField { public class AnalysisFieldDAL : IAnalysisFieldDAL { private readonly IQueryExecutor _qe; private readonly IValidation _Validation; public AnalysisFieldDAL(IQueryExecutor qe, IValidation validation) { _qe = qe; _Validation = validation; } public async Task GetAnalysisFields(int AnalysisFieldsId, LoginDTO login, CancellationToken ct) { var result = await _qe.QuerySingleAsync(login, AnalysisFieldsQB.GET_ANALYSISFIELDS, new { AnalysisFieldId = AnalysisFieldsId, TenantId = login.ClientId }); return JsonConvert.SerializeObject(result); } public async Task SaveAnalysisFields(AnalysisFieldsDTO dto, bool isNew, LoginDTO login, CancellationToken ct, DbTransaction tx = null) { try { string sql = isNew ? AnalysisFieldsQB.SAVE_ANALYSISFIELDS : AnalysisFieldsQB.UPDATE_ANALYSISFIELDS; var rows = await _qe.ExecuteAsync(login, sql, dto, tx); // 🔥 important check if (rows == 0) { throw new Exception(isNew ? "Insert failed!" : "Update failed! No matching record."); } return dto.AnalysisFieldsId; } catch (Exception ex) { string error = await _Validation.HandleException(ex, isNew ? ErrorResponse.SaveErrorMessage : ErrorResponse.UpdateErrorMessage); throw new Exception(error); } } public async Task GetSelectListAnalysisFields(int analysisId, CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, AnalysisFieldsQB.GET_SELECTLIST_ANALYSISFIELDS, new { AnalysisId = analysisId }); return JsonConvert.SerializeObject(result); } public async Task DeleteAnalysisFields(int AnalysisFieldId, LoginDTO loginDTO) { try { string sql = AnalysisFieldsQB.DELETE_ANALYSISFIELDS; var parameter = new { AnalysisFieldId = AnalysisFieldId }; var result = await _qe.ExecuteAsync(loginDTO, sql, parameter); if (result > 0) return SuccessResponse.DeleteSuccessMessage; else return ErrorResponse.DeleteNotFoundMessage; } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.DeleteErrorMessage); throw new Exception(error); } } } }