using AdminDAL.CustomCode.DataWareHouse; using AdminDAL.DTO.Datawarehouse; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Telemetry; using GB5Shared.Validation; using Microsoft.Extensions.Logging; namespace AdminBLL.DataWareHouse { public class DataWareHouseBLL : IDataWareHouseBLL { private readonly IDataWareHouseDAL _DataWareHouseDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; private readonly ILogger _Logger; public DataWareHouseBLL(IDataWareHouseDAL IDataWareHouseDAL, AutoNumber AutoNumber, IValidation Validation, ILogger logger) { _DataWareHouseDAL = IDataWareHouseDAL; _AutoNumber = AutoNumber; _Validation = Validation; _Logger = logger; } public async Task GetDataWareHouse(int DataWareHouseId, LoginDTO LoginDTO) { try { return await _DataWareHouseDAL.GetDataWareHouse(DataWareHouseId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDataWareHouse(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _DataWareHouseDAL.GetSelectListDataWareHouse(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveDataWareHouse(DataWareHouseDTO dto, LoginDTO login, CancellationToken ct) { var isNew = dto.DataWareHouseId <= 0; GB5Trace.Step("validate-datawarehouse", new { dto.DataWareHouseId }); try { await _Validation.NotEmpty(dto.DataWareHouseName, nameof(dto.DataWareHouseName)).ConfigureAwait(false); dto.DataWareHouseModifiedById = login.UserId; if (isNew) dto.DataWareHouseCreatedById = login.UserId; GB5Trace.Step("save-datawarehouse", new { dto.DataWareHouseId, isNew }); var result = await _DataWareHouseDAL.SaveDataWareHouse(dto, login, ct).ConfigureAwait(false); var savedId = Newtonsoft.Json.JsonConvert.DeserializeObject(result); return isNew ? $"{SuccessResponse.SaveSuccessMessage} {savedId}" : SuccessResponse.UpdateSuccess; } catch (Exception ex) { GB5Trace.MarkFailed("save-datawarehouse-failed", ex); _Logger.LogError(ex, "SaveDataWareHouse failed for DataWareHouseId {Id}", dto.DataWareHouseId); throw; } } public async Task DeleteDataWareHouse(int dataWareHouseId, LoginDTO login, CancellationToken ct) { GB5Trace.Step("delete-datawarehouse", new { dataWareHouseId }); try { await _DataWareHouseDAL.DeleteDataWareHouse(dataWareHouseId, login, ct).ConfigureAwait(false); return SuccessResponse.DeleteSuccessMessage; } catch (Exception ex) { GB5Trace.MarkFailed("delete-datawarehouse-failed", ex); _Logger.LogError(ex, "DeleteDataWareHouse failed for DataWareHouseId {Id}", dataWareHouseId); throw; } } } }