using GB5Shared.DTO.Framework.Login; using GB5Shared.Resource.Response; using Microsoft.Extensions.Logging; using SwDAL.CustomCode.SavedQuery; using SwDAL.DTO.SavedQuery; using System.Text.Json; namespace SwBLL.SavedQuery; public class SavedQueryBLL : ISavedQueryBLL { private readonly ISavedQueryDAL _dal; private readonly ILogger _logger; public SavedQueryBLL(ISavedQueryDAL dal, ILogger logger) { _dal = dal; _logger = logger; } public async Task GetById(int savedQueryId, LoginDTO login, CancellationToken ct) { try { return await _dal.GetById(savedQueryId, login, ct).ConfigureAwait(false); } catch (Exception ex) { _logger.LogError(ex, "GetById failed for SavedQueryId {Id}", savedQueryId); throw; } } public async Task GetList(SavedQueryListCriteria criteria, int pageOffset, int pageSize, LoginDTO login, CancellationToken ct) { try { var (rows, total) = await _dal.GetList(criteria, pageOffset, pageSize, login, ct).ConfigureAwait(false); return JsonSerializer.Serialize(new { rows, total }); } catch (Exception ex) { _logger.LogError(ex, "GetList failed"); throw new InvalidOperationException(); } } public async Task GetSelectList(int firstNumber, int maxResult, LoginDTO login, CancellationToken ct) { try { var rows = await _dal.GetSelectList(firstNumber, maxResult, login, ct).ConfigureAwait(false); return JsonSerializer.Serialize(rows); } catch (Exception ex) { _logger.LogError(ex, "GetSelectList failed"); throw new InvalidOperationException(); } } public async Task Save(SavedQueryDTO dto, LoginDTO login, CancellationToken ct) { try { if (string.IsNullOrWhiteSpace(dto.QueryName)) throw new InvalidOperationException("Query Name is required."); if (string.IsNullOrWhiteSpace(dto.QueryText)) throw new InvalidOperationException("Query Text is required."); if (dto.SavedQueryId == 0) { int newId = await _dal.Insert(dto, login, ct).ConfigureAwait(false); return $"{SuccessResponse.SaveSuccessMessage} {newId}"; } await _dal.Update(dto, login, ct).ConfigureAwait(false); return SuccessResponse.UpdateSuccess; } catch (Exception ex) { _logger.LogError(ex, "Save failed for QueryName {Name}", dto.QueryName); throw new InvalidOperationException(); } } public async Task Delete(int savedQueryId, LoginDTO login, CancellationToken ct) { try { await _dal.Delete(savedQueryId, login, ct).ConfigureAwait(false); return SuccessResponse.DeleteSuccessMessage; } catch (Exception ex) { _logger.LogError(ex, "Delete failed for SavedQueryId {Id}", savedQueryId); throw new InvalidOperationException(); } } }