using Marco.Pms.Model.Employees; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Projects; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Employee; using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace MarcoBMS.Services.Controllers { [Route("api/[controller]")] [ApiController] [Authorize] public class UserController : ControllerBase { private readonly UserHelper _userHelper; private readonly EmployeeHelper _employeeHelper; private readonly ProjectsHelper _projectsHelper; private readonly RolesHelper _rolesHelper; public UserController(EmployeeHelper employeeHelper, ProjectsHelper projectsHelper, UserHelper userHelper, RolesHelper rolesHelper) { _userHelper = userHelper; _employeeHelper = employeeHelper; _projectsHelper = projectsHelper; _rolesHelper = rolesHelper; } [HttpGet("profile")] public async Task GetUserProfileFromJwt() { if (!ModelState.IsValid) { return BadRequest(ModelState); } var user = await _userHelper.GetCurrentUserAsync(); Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id); List featurePermission = await _rolesHelper.GetFeaturePermissionByEmployeeID(emp.Id); string[] projectsId = []; /* User with permission manage project can see all projects */ if (featurePermission != null && featurePermission.Exists(c => c.Id.ToString() == "172fc9b6-755b-4f62-ab26-55c34a330614")) { List projects = await _projectsHelper.GetAllProjectByTanentID(emp.TenantId); projectsId = projects.Select(c=>c.Id.ToString()).ToArray(); } else { List allocation = await _projectsHelper.GetProjectByEmployeeID(emp.Id); projectsId = allocation.Select(c => c.ProjectId.ToString()).ToArray(); } EmployeeVM employeeVM = EmployeeMapper.ToEmployeeVMFromEmployee(emp); EmployeeProfile profile = new EmployeeProfile() { EmployeeInfo = employeeVM, Projects = projectsId, FeaturePermissions = featurePermission.Select(c => c.Id.ToString()).Distinct().ToArray(), Features = featurePermission.Select(c => c.FeatureId.ToString()).Distinct().ToArray(), }; return Ok(ApiResponse.SuccessResponse(profile, "Success", 200)); } } }