using System.ComponentModel.DataAnnotations; using FrameworkDAL.CustomCode.File; using FrameworkDAL.DTO.File; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Validation; using GB5Shared.ResponseStandard; namespace FrameworkBLL.File { public class FileBLL : IFileBLL { private readonly IFileDAL _FileDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public FileBLL(IFileDAL FileDAL, AutoNumber AutoNumber,IValidation validation) { _FileDAL = FileDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetFile(int FileId, LoginDTO LoginDTO) { try { return await _FileDAL.GetFile(FileId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveFile(FileDTO FileDTO, LoginDTO LoginDTO) { if (FileDTO == null) throw new ArgumentNullException(nameof(FileDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(FileDTO.FileName, nameof(FileDTO.FileName)); FileDTO.FileModifiedById = LoginDTO.UserId; FileDTO.FileModifiedOn = DateTime.UtcNow; FileDTO.TenantId = LoginDTO.ClientId; int InitialId = FileDTO.FileId; int count = 1 + InitialId; if (InitialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "FILE", LoginDTO); FileDTO.FileId = AutoNumberDTO.StartNumber; FileDTO.FileCreatedById = LoginDTO.UserId; FileDTO.FileCreatedOn = DateTime.UtcNow; await _FileDAL.SaveFile(FileDTO, LoginDTO); return $"Details saved successfully with File Id {FileDTO.FileId}."; } else { await _FileDAL.UpdateFile(FileDTO, LoginDTO); return "Details updated successfully with File Id {FileDTO.FileId}."; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && FileDTO.FileId > 0) await _AutoNumber.RollbackAutoNumber("FILE", FileDTO.FileId, LoginDTO); throw; } } public async Task GetSelectListFile(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _FileDAL.GetSelectListFile(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteFile(int FileId, LoginDTO LoginDTO) { try { return await _FileDAL.DeleteFile(FileId, LoginDTO); } catch (Exception) { throw; } } } }