using CMSDAL.DTO.Navigation; using CMSDAL.Query.Navigation; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System.Collections.Generic; using System.Data.Common; using System.Linq; namespace CMSDAL.CustomCode.Navigation; public class NavigationItemDAL : INavigationItemDAL { private readonly IQueryExecutor _qe; private readonly IValidation _validation; public NavigationItemDAL(IQueryExecutor qe, IValidation validation) { _qe = qe; _validation = validation; } public async Task> GetFlatByNavigationAsync(int navigationId, LoginDTO loginDTO, CancellationToken ct = default) { try { var result = await _qe.QueryAsync(loginDTO, NavigationItemQB.GET_TREE_FLAT, new { NavigationId = navigationId, TenantId = loginDTO.ClientId }, cancellationToken: ct); return result.ToList(); } catch { throw; } } public async Task SaveItem(NavigationItemDTO dto, LoginDTO loginDTO, DbTransaction? tx = null, CancellationToken ct = default) { try { int newItemId = await _qe.ExecuteIdentityAsync(loginDTO, NavigationItemQB.SAVE_ITEM, dto, tx); dto.NavigationItemId = newItemId; return newItemId; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(error); } } public async Task UpdateItem(NavigationItemDTO dto, LoginDTO loginDTO, DbTransaction? tx = null, CancellationToken ct = default) { try { await _qe.ExecuteAsync(loginDTO, NavigationItemQB.UPDATE_ITEM, dto, tx, ct); return dto.NavigationItemId; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.UpdateErrorMessage}"); throw new Exception(error); } } public async Task DeleteItem(int navigationItemId, LoginDTO loginDTO, CancellationToken ct = default) { try { int rows = await _qe.ExecuteAsync(loginDTO, NavigationItemQB.DELETE_ITEM, new { NavigationItemId = navigationItemId, TenantId = loginDTO.ClientId, ModifiedById = loginDTO.UserId }, cancellationToken: ct); return rows > 0 ? SuccessResponse.DeleteSuccessMessage : ErrorResponse.DeleteNotFoundMessage; } catch (Exception ex) { string error = await _validation.HandleException(ex, $"{ErrorResponse.DeleteErrorMessage}"); throw new Exception(error); } } }