using AdminDAL.CustomCode.MailList; using AdminDAL.DTO.MailList; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdminBLL.MailList { public class MailListBLL : IMailListBLL { private readonly IMailListDAL _MailListDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public MailListBLL(IMailListDAL MailListDAL, AutoNumber AutoNumber,IValidation validation) { _MailListDAL = MailListDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetMailList(int MailListId, LoginDTO LoginDTO) { try { return await _MailListDAL.GetMailList(MailListId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveMailList(MailListDTO MailListDTO, LoginDTO LoginDTO) { if (MailListDTO == null) throw new ArgumentNullException(nameof(MailListDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(MailListDTO.MailListName, nameof(MailListDTO.MailListName)); MailListDTO.MailListModifiedById = LoginDTO.UserId; MailListDTO.MailListModifiedOn = DateTime.UtcNow; int InitialId = MailListDTO.MailListId; int count = 1 + InitialId; if (InitialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "MAILLIST", LoginDTO); MailListDTO.MailListId = AutoNumberDTO.StartNumber; MailListDTO.MailListCreatedById = LoginDTO.UserId; MailListDTO.MailListCreatedOn = DateTime.UtcNow; await _MailListDAL.SaveMailList(MailListDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {MailListDTO.MailListId}"; } else { await _MailListDAL.UpdateMailList(MailListDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {MailListDTO.MailListId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && MailListDTO.MailListId > 0) await _AutoNumber.RollbackAutoNumber("MAILLIST", MailListDTO.MailListId, LoginDTO); throw; } } public async Task GetSelectListMailList(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _MailListDAL.GetSelectListMailList(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteMailList(int MailListId, LoginDTO LoginDTO) { try { return await _MailListDAL.DeleteMailList(MailListId, LoginDTO); } catch (Exception) { throw; } } } }