84 lines
3.2 KiB
C#
84 lines
3.2 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.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<IActionResult> GetUserProfileFromJwt()
|
|
{
|
|
if (!ModelState.IsValid)
|
|
{
|
|
var errors = ModelState.Values
|
|
.SelectMany(v => v.Errors)
|
|
.Select(e => e.ErrorMessage)
|
|
.ToList();
|
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
|
|
|
|
}
|
|
|
|
var user = await _userHelper.GetCurrentUserAsync();
|
|
Employee emp = new Employee { };
|
|
if(user != null)
|
|
{
|
|
emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
|
|
}
|
|
|
|
List<FeaturePermission> 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<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();
|
|
}
|
|
EmployeeProfile profile = new EmployeeProfile() { };
|
|
if (featurePermission != null)
|
|
{
|
|
EmployeeVM employeeVM = EmployeeMapper.ToEmployeeVMFromEmployee(emp);
|
|
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<object>.SuccessResponse(profile, "Success", 200));
|
|
}
|
|
}
|
|
}
|