using GB5Shared.DTO.Framework.Login; using GB5Shared.Resource.Response; using Microsoft.Extensions.Logging; using TCMSBLL.Interfaces; using TCMSDAL.DTO; using TCMSDAL.Interfaces; namespace TCMSBLL.Implementations; public class TCMSModuleBLL : ITCMSModuleBLL { private readonly ITCMSModuleDAL _Dal; private readonly ILogger _Logger; public TCMSModuleBLL(ITCMSModuleDAL dal, ILogger logger) { _Dal = dal; _Logger = logger; } public async Task GetModuleAsync( int moduleId, LoginDTO login, CancellationToken ct) => await _Dal.GetModuleAsync(moduleId, login, ct).ConfigureAwait(false); public async Task> GetModuleListAsync( int? projectId, bool? isActive, LoginDTO login, CancellationToken ct) => await _Dal.GetModuleListAsync(projectId, isActive, login, ct).ConfigureAwait(false); public async Task> GetSelectListAsync( int? projectId, LoginDTO login, CancellationToken ct) => await _Dal.GetSelectListAsync(projectId, login, ct).ConfigureAwait(false); public async Task SaveModuleAsync( TCMSModuleDTO dto, LoginDTO login, CancellationToken ct) { try { if (string.IsNullOrWhiteSpace(dto.ModuleCode)) return "Module Code is required."; if (string.IsNullOrWhiteSpace(dto.ModuleName)) return "Module Name is required."; if (dto.ProjectId == 0) return "Project is required."; bool codeExists = await _Dal.CodeExistsAsync(dto.ModuleCode, dto.ProjectId, dto.ModuleId > 0 ? dto.ModuleId : null, login, ct).ConfigureAwait(false); if (codeExists) return $"Module Code '{dto.ModuleCode}' already exists in this project."; bool isNew = dto.ModuleId == 0; if (isNew) { int newId = await _Dal.SaveModuleAsync(dto, login, ct).ConfigureAwait(false); return $"{SuccessResponse.SaveSuccessMessage} {newId}"; } else { await _Dal.UpdateModuleAsync(dto, login, ct).ConfigureAwait(false); return SuccessResponse.UpdateSuccess; } } catch (Exception ex) { _Logger.LogError(ex, "SaveModule failed for code {Code}", dto.ModuleCode); throw; } } }