using System.ComponentModel.DataAnnotations; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.DBObject; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; namespace GB5Shared.DBObject { public class DBObjectBLL : IDBObjectBLL { private readonly IDBObjectDAL _dbObjectDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public DBObjectBLL(IDBObjectDAL dbObjectDAL, AutoNumber AutoNumber, IValidation Validation) { _dbObjectDAL = dbObjectDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetDBObject(int dbObjectId, LoginDTO loginDTO) { try { return await _dbObjectDAL.GetDBObject(dbObjectId, loginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDBObjectFields(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _dbObjectDAL.GetSelectListDBObjectFields(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveDBObject(DBObjectDTO DBObjectDTO, LoginDTO LoginDTO) { if (DBObjectDTO == null) throw new ArgumentNullException(nameof(DBObjectDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(DBObjectDTO.DBObjectSection, nameof(DBObjectDTO.DBObjectSection)); await _Validation.NotEmpty(DBObjectDTO.DBObjectName, nameof(DBObjectDTO.DBObjectName)); DBObjectDTO.DBObjectModifiedById = LoginDTO.UserId; DBObjectDTO.DBObjectModifiedOn = DateTime.UtcNow; int count = 1; if (DBObjectDTO.DBObjectId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "DBOBJECT", LoginDTO); DBObjectDTO.DBObjectId = autoNumberDTO.StartNumber; DBObjectDTO.DBObjectCreatedById = LoginDTO.UserId; DBObjectDTO.DBObjectCreatedOn = DateTime.UtcNow; await _dbObjectDAL.SaveDBObject(DBObjectDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {DBObjectDTO.DBObjectId}"; } else { await _dbObjectDAL.UpdateDBObject(DBObjectDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {DBObjectDTO.DBObjectId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && DBObjectDTO.DBObjectId > 0) await _AutoNumber.RollbackAutoNumber("DBOBJECT", DBObjectDTO.DBObjectId, LoginDTO); throw; } } public async Task DeleteDBObject(int DBObjectId, LoginDTO LoginDTO) { try { return await _dbObjectDAL.DeleteDBObject(DBObjectId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDBObject(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _dbObjectDAL.GetSelectListDBObject(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task FindBySourceAndNameAsync(string dbObjectName, byte sourceDbObjectKind, int? sourceClientDbId, LoginDTO login, CancellationToken ct) { try { return await _dbObjectDAL.FindBySourceAndNameAsync(dbObjectName, sourceDbObjectKind, sourceClientDbId, login, ct); } catch (Exception) { throw; } } } }