69 lines
2.5 KiB
C#

using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Projects;
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<IActionResult> GetUserProfileFromJwt()
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = await _userHelper.GetCurrentUserAsync();
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
List<FeaturePermission> featurePermission = await _rolesHelper.GetFeaturePermissionByEmployeeID(emp.Id);
string[] projectsId = [];
if (featurePermission != null && featurePermission.Exists(c => c.FeatureId.ToString() == "53176ebf-c75d-42e5-839f-4508ffac3def")) {
List<Project> projects = await _projectsHelper.GetAllProjectByTanentID(emp.TenantId);
projectsId = projects.Select(c=>c.Id.ToString()).ToArray();
}
else
{
List<ProjectAllocation> 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.FeatureId.ToString()).ToArray(),
};
return Ok(profile);
}
}
}