using DevadminDAL.DTO.Client; using DevadminDAL.Query.ClientModule; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using static GB5Shared.GB5Constant.Constant; namespace DevadminDAL.CustomCode.ClientModule { public class ClientModuleDAL : IClientModuleDAL { private readonly IQueryExecutor _QueryExecutor; public ClientModuleDAL(IQueryExecutor QueryExecutor) { _QueryExecutor = QueryExecutor; } public async Task GetSelectListClientModule(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { int? ClientId = null; string? ModuleCode = null; string? ModuleName = null; int? RoleId = null; int RoleVsModule = 0; if (CriteriaDTO != null && CriteriaDTO.SectionCriteriaList != null) { foreach (var Section in CriteriaDTO.SectionCriteriaList) { foreach (var Attr in Section.AttributesCriteriaList) { string FieldVal = Attr.FieldValue?.ToString() ?? string.Empty; switch (Attr.FieldName.ToLower()) { case "clientid": if (int.TryParse(FieldVal, out int cId) && cId > 0) ClientId = cId; break; case "modulecode": if (!string.IsNullOrWhiteSpace(FieldVal)) ModuleCode = FieldVal; break; case "modulename": if (!string.IsNullOrWhiteSpace(FieldVal)) ModuleName = FieldVal; break; case "roleid": if (int.TryParse(FieldVal, out int rId) && rId > 0) RoleId = rId; break; case "rolevsmodule": if (int.TryParse(FieldVal, out int rvm)) RoleVsModule = rvm; break; } } } } string SQL; if (RoleVsModule == 1) { SQL = LoginDTO.DatabaseType switch { DBType.SQL => ClientModuleQB.GET_ROLEVSMODULE_CLIENTMODULE_SQL, DBType.PostGre => ClientModuleQB.GET_ROLEVSMODULE_CLIENTMODULE_PG, DBType.Oracle => ClientModuleQB.GET_ROLEVSMODULE_CLIENTMODULE_ORACLE, DBType.MySQL => ClientModuleQB.GET_ROLEVSMODULE_CLIENTMODULE_MYSQL, _ => throw new Exception("Unsupported database type") }; var Parameters = new { clientid = ClientId, modulecode = ModuleCode, modulename = ModuleName }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, SQL, Parameters); return JsonConvert.SerializeObject(Result); } else { SQL = LoginDTO.DatabaseType switch { DBType.SQL => ClientModuleQB.GET_MODULE_CLIENTMODULE_SQL, DBType.PostGre => ClientModuleQB.GET_MODULE_CLIENTMODULE_PG, DBType.Oracle => ClientModuleQB.GET_MODULE_CLIENTMODULE_ORACLE, DBType.MySQL => ClientModuleQB.GET_MODULE_CLIENTMODULE_MYSQL, _ => throw new Exception("Unsupported database type") }; var Parameters = new { clientid = ClientId, modulecode = ModuleCode, modulename = ModuleName, roleid = RoleId }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, SQL, Parameters); return JsonConvert.SerializeObject(Result); } } catch (Exception) { throw; } } } }