using AnalyticsDAL.CustomCode.DBJoin; using AnalyticsDAL.DTO.DBJoin; using GB5Shared.DALCache; using GB5Shared.DaprCache; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.EntityHandler; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static GB5Shared.GB5Constant.Constant; namespace AnalyticsBLL.DBJoin { public class DBJoinBLL : IDBJoinBLL { private readonly IDBJoinDAL _DBJoinDAL; private readonly AutoNumber _AutoNumber; private readonly IQueryExecutor _QueryExecutor; private readonly BaseEntityAppService _baseEntityAppService; private readonly IDALCache _dalCache; private readonly CacheKeyGeneration _keyGen = new(); public DBJoinBLL(IDBJoinDAL DBJoinDAL, AutoNumber autoNumber, IQueryExecutor IQueryExecutor, BaseEntityAppService baseEntityAppService, IDALCache dalCache) { _DBJoinDAL = DBJoinDAL; _AutoNumber = autoNumber; _QueryExecutor = IQueryExecutor; _baseEntityAppService = baseEntityAppService; _dalCache = dalCache; } public async Task GetDBJoin(int JoinId, LoginDTO LoginDTO) { try { return await _DBJoinDAL.GetDBJoin(JoinId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDBJoin(int FirstNumber, int MaxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _DBJoinDAL.GetSelectListDBJoin(FirstNumber, MaxResult, criteriaDTO, loginDTO); } catch (Exception) { throw; } } //public async Task SaveDBJoin(DBJoinDTO DBJoinDTO, LoginDTO LoginDTO) //{ // try // { // if (DBJoinDTO == null) // throw new ArgumentNullException(nameof(DBJoinDTO)); // bool isNew = DBJoinDTO.DBJoinId == 0; // // Pre-Transaction : Auto Number // var DBJoinAutoNumber = await _AutoNumber.GetAutoNumber( // 1, // AUTONUMBERCONSTANT.DBJOIN, // LoginDTO); // var Trans = await _QueryExecutor.BeginTransactionAsync(LoginDTO); // try // { // await _baseEntityAppService.ExecuteSaveAsync( // EntityConstant.DBJOIN, // EventTypeConstant.SAVEDBJOINEVENTTYPEID, // DBJoinDTO, // LoginDTO, // async tx => // { // if (isNew) // { // DBJoinDTO.DBJoinId = DBJoinAutoNumber.StartNumber; // DBJoinDTO.DBJoinCreatedById = LoginDTO.UserId; // DBJoinDTO.DBJoinCreatedOn = DateTime.UtcNow; // } // DBJoinDTO.DBJoinModifiedById = LoginDTO.UserId; // DBJoinDTO.DBJoinModifiedOn = DateTime.UtcNow; // int Result; // if (isNew) // { // Result = await _DBJoinDAL.SaveDBJoin(DBJoinDTO, LoginDTO, tx); // } // else // { // Result = await _DBJoinDAL.UpdateDBJoin(DBJoinDTO, LoginDTO, tx); // } // return Result; // }, // null,-1,-1, // Trans, // isNew); // await _QueryExecutor.CommitAsync(Trans); // if (isNew) // { // return SuccessResponse.SaveSuccessMessage; // } // else // { // return SuccessResponse.UpdateSuccessMessage; // } // } // catch (Exception) // { // await _QueryExecutor.RollbackAsync(Trans); // throw; // } // } // catch (Exception) // { // throw; // } //} public async Task SaveDBJoin(DBJoinDTO DBJoinDTO, LoginDTO LoginDTO) { try { if (DBJoinDTO == null) throw new ArgumentNullException(nameof(DBJoinDTO)); bool isNew = DBJoinDTO.DBJoinId == 0; // Pre-Transaction : Auto Number var DBJoinAutoNumber = await _AutoNumber.GetAutoNumber( 1, AUTONUMBERCONSTANT.DBJOIN, LoginDTO); var Trans = await _QueryExecutor.BeginTransactionAsync(LoginDTO); try { await _baseEntityAppService.ExecuteSaveAsync( EntityConstant.DBJOIN, EventTypeConstant.SAVEDBJOINEVENTTYPEID, DBJoinDTO, LoginDTO, async tx => { if (isNew) { DBJoinDTO.DBJoinId = DBJoinAutoNumber.StartNumber; DBJoinDTO.DBJoinCreatedById = LoginDTO.UserId; DBJoinDTO.DBJoinCreatedOn = DateTime.UtcNow; } DBJoinDTO.DBJoinModifiedById = LoginDTO.UserId; DBJoinDTO.DBJoinModifiedOn = DateTime.UtcNow; int Result; if (isNew) { Result = await _DBJoinDAL.SaveDBJoin(DBJoinDTO, LoginDTO, tx); } else { Result = await _DBJoinDAL.UpdateDBJoin(DBJoinDTO, LoginDTO, tx); } return Result; }, null, -1, -1, Trans, isNew); await _QueryExecutor.CommitAsync(Trans); var djKey = _keyGen.KeyGeneration("all", EntityConstant.OBJECTDBJOIN, CacheKeyLevel.CLIENT_LEVEL, LoginDTO); await _dalCache.InvalidateAsync(djKey).ConfigureAwait(false); if (isNew) { return SuccessResponse.SaveSuccess; } else { return SuccessResponse.UpdateSuccess; } } catch (Exception) { await _QueryExecutor.RollbackAsync(Trans); throw; } } catch (Exception) { throw; } } public async Task DeleteDBJoin(int JoinId, LoginDTO LoginDTO) { try { var result = await _DBJoinDAL.DeleteDBJOIN(JoinId, LoginDTO).ConfigureAwait(false); var djKey = _keyGen.KeyGeneration("all", EntityConstant.OBJECTDBJOIN, CacheKeyLevel.CLIENT_LEVEL, LoginDTO); await _dalCache.InvalidateAsync(djKey).ConfigureAwait(false); return result; } catch (Exception) { throw; } } } }