using System; using System.ComponentModel.DataAnnotations; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ValidationCriteria; using GB5Shared.DTO.Framework.Validation; namespace FrameworkBLL.Validation { public class ValidationAssignmentBLL : IValidationAssignmentBLL { private readonly IValidationAssignmentDAL _ValidationAssignmentDAL; private readonly AutoNumber _AutoNumber; public ValidationAssignmentBLL(IValidationAssignmentDAL validationAssignmentDAL, AutoNumber autoNumber) { _ValidationAssignmentDAL = validationAssignmentDAL; _AutoNumber = autoNumber; } public async Task GetValidationAssignment(int validationAssignmentId, LoginDTO loginDTO) { try { return await _ValidationAssignmentDAL.GetValidationAssignment(validationAssignmentId, loginDTO); } catch (Exception) { throw; } } public async Task SaveValidationAssignment(ValidationAssignmentDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { if (dto.EntityType <= 0) throw new ValidationException("EntityType must be selected."); if (dto.EntityId <= 0) throw new ValidationException("EntityId must be selected."); if (dto.ValidationCriteriaId <= 0) throw new ValidationException("ValidationCriteriaId must be selected."); string message; if (dto.ValidationAssignmentId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "VALIDATIONASSIGNMENT", loginDTO); dto.ValidationAssignmentId = autoNumberDTO.StartNumber; await _ValidationAssignmentDAL.SaveValidationAssignment(dto, loginDTO); message = $"{SuccessResponse.SaveSuccessMessage} {dto.ValidationAssignmentId}"; } else { await _ValidationAssignmentDAL.UpdateValidationAssignment(dto, loginDTO); message = $"{SuccessResponse.UpdateSuccessMessage} {dto.ValidationAssignmentId}"; } return message; } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && dto.ValidationAssignmentId > 0) await _AutoNumber.RollbackAutoNumber("VALIDATIONASSIGNMENT", dto.ValidationAssignmentId, loginDTO); throw; } } public async Task DeleteValidationAssignment(int validationAssignmentId, LoginDTO loginDTO) { try { return await _ValidationAssignmentDAL.DeleteValidationAssignment(validationAssignmentId, loginDTO); } catch (Exception) { throw; } } } }