Changed file structure in model project

This commit is contained in:
ashutosh.nehete 2025-05-10 13:16:20 +05:30
parent 2b7a7190c7
commit 0c49d8d05c
60 changed files with 77 additions and 195 deletions

View File

@ -1,7 +1,7 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels.Projects;
using Marco.Pms.Utility; using Marco.Pms.Utility;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Dtos.Forum namespace Marco.Pms.Model.Dtos.Master
{ {
public class TicketPriorityMasterDto public class TicketPriorityMasterDto
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Dtos.Forum namespace Marco.Pms.Model.Dtos.Master
{ {
public class TicketStatusMasterDto public class TicketStatusMasterDto
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Dtos.Forum namespace Marco.Pms.Model.Dtos.Master
{ {
public class TicketTagMasterDto public class TicketTagMasterDto
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Dtos.Forum namespace Marco.Pms.Model.Dtos.Master
{ {
public class TicketTypeMasterDto public class TicketTypeMasterDto
{ {

View File

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Roles;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

View File

@ -1,9 +1,9 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Roles;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Employees
{ {
public class EmployeeRoleMapping : TenantRelation public class EmployeeRoleMapping : TenantRelation
{ {

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Industries; using Marco.Pms.Model.Master;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Entitlements

View File

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Master;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Entitlements

View File

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

View File

@ -1,4 +1,6 @@
namespace Marco.Pms.Model.Forum using Marco.Pms.Model.Master;
namespace Marco.Pms.Model.Forum
{ {
public class TicketTag public class TicketTag
{ {

View File

@ -1,6 +1,7 @@
using Marco.Pms.Model.Activities; using Marco.Pms.Model.Activities;
using Marco.Pms.Model.Dtos.Activities; using Marco.Pms.Model.Dtos.Activities;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.ViewModels.Activities; using Marco.Pms.Model.ViewModels.Activities;
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper

View File

@ -1,6 +1,7 @@
using Marco.Pms.Model.Dtos.Roles; using Marco.Pms.Model.Dtos.Roles;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Roles;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels;
using Marco.Pms.Model.ViewModels.Roles;
#nullable disable #nullable disable
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper
{ {
@ -12,7 +13,6 @@ namespace Marco.Pms.Model.Mapper
{ {
Id = model.Id, Id = model.Id,
Role = model.Role, Role = model.Role,
IsSystem = model.IsSystem,
Description = model.Description, Description = model.Description,
//FeaturePermission = model.FeaturePermissions //FeaturePermission = model.FeaturePermissions
}; };

View File

@ -1,5 +1,5 @@
using Marco.Pms.Model.Dtos.Employees; using Marco.Pms.Model.Dtos.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Employees;
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper
{ {

View File

@ -1,5 +1,5 @@
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels.Master;
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper
{ {

View File

@ -1,7 +1,9 @@
using Marco.Pms.Model.DocumentManager; using Marco.Pms.Model.DocumentManager;
using Marco.Pms.Model.Dtos.Forum; using Marco.Pms.Model.Dtos.Forum;
using Marco.Pms.Model.Dtos.Master;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Forum; using Marco.Pms.Model.Forum;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.ViewModels.Forum; using Marco.Pms.Model.ViewModels.Forum;
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Dtos.Project; using Marco.Pms.Model.Dtos.Project;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels.Projects;
namespace Marco.Pms.Model.Mapper namespace Marco.Pms.Model.Mapper
{ {

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Master
{ {
public class ActivityMaster : TenantRelation public class ActivityMaster : TenantRelation
{ {

View File

@ -1,7 +1,8 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Entitlements;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Master
{ {
public class Feature public class Feature
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Industries namespace Marco.Pms.Model.Master
{ {
public class Industry public class Industry
{ {

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Master
{ {
public class Module public class Module
{ {

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Master
{ {
public class StatusMaster : TenantRelation public class StatusMaster : TenantRelation
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Forum namespace Marco.Pms.Model.Master
{ {
public class TicketPriorityMaster public class TicketPriorityMaster
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Forum namespace Marco.Pms.Model.Master
{ {
public class TicketStatusMaster public class TicketStatusMaster
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Forum namespace Marco.Pms.Model.Master
{ {
public class TicketTagMaster public class TicketTagMaster
{ {

View File

@ -1,7 +1,7 @@
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Master;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Master;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Roles
{ {
public class ApplicationRole public class ApplicationRole
{ {

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
namespace Marco.Pms.Model.Entitlements namespace Marco.Pms.Model.Roles
{ {
public class JobRole : TenantRelation public class JobRole : TenantRelation
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Employee
{ {
public class EmployeeRolesVM public class EmployeeRolesVM
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Master
{ {
public class FeaturePermissionVM public class FeaturePermissionVM
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Master
{ {
public class FeatureVM public class FeatureVM
{ {

View File

@ -1,6 +1,4 @@
 namespace Marco.Pms.Model.ViewModels.Projects
namespace Marco.Pms.Model.Dtos.Project
{ {
public class BuildingVM public class BuildingVM
{ {

View File

@ -1,7 +1,7 @@
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Marco.Pms.Model.Dtos.Project namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class FloorsVM public class FloorsVM
{ {

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class InfraVM public class InfraVM
{ {

View File

@ -2,7 +2,7 @@
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class ProjectDetailsVM public class ProjectDetailsVM
{ {

View File

@ -1,4 +1,4 @@
namespace Marco.Pms.Model.ViewModels namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class ProjectListVM public class ProjectListVM
{ {

View File

@ -1,4 +1,6 @@
namespace Marco.Pms.Model.Dtos.Project using Marco.Pms.Model.Dtos.Project;
namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class ProjectVM : ProjectDto public class ProjectVM : ProjectDto
{ {

View File

@ -1,7 +1,7 @@
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Marco.Pms.Model.Dtos.Project namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class WorkAreaVM public class WorkAreaVM
{ {

View File

@ -1,6 +1,6 @@
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
namespace Marco.Pms.Model.Dtos.Project namespace Marco.Pms.Model.ViewModels.Projects
{ {
public class WorkItemVM public class WorkItemVM
{ {

View File

@ -1,4 +1,6 @@
namespace Marco.Pms.Model.ViewModels using Marco.Pms.Model.ViewModels.Master;
namespace Marco.Pms.Model.ViewModels.Roles
{ {
public class ApplicationRolesVM public class ApplicationRolesVM
{ {

View File

@ -1,4 +1,6 @@
namespace Marco.Pms.Model.ViewModels using Marco.Pms.Model.ViewModels.Master;
namespace Marco.Pms.Model.ViewModels.Roles
{ {
public class RolesVM public class RolesVM

View File

@ -8,7 +8,6 @@ using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels;
using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Employee;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service; using MarcoBMS.Services.Service;

View File

@ -1,8 +1,9 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels.Master;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;

View File

@ -4,6 +4,7 @@ using Marco.Pms.Model.Dtos.Forum;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Forum; using Marco.Pms.Model.Forum;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.Forum; using Marco.Pms.Model.ViewModels.Forum;

View File

@ -1,7 +1,7 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Dtos.Util; using Marco.Pms.Model.Dtos.Util;
using Marco.Pms.Model.Industries;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Master;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service; using MarcoBMS.Services.Service;

View File

@ -5,8 +5,8 @@ using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels;
using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Employee;
using Marco.Pms.Model.ViewModels.Projects;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service; using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -493,7 +493,6 @@ namespace MarcoBMS.Services.Controllers
{ {
Guid tenantId = GetTenantId(); Guid tenantId = GetTenantId();
List<WorkItemVM> workItems = new List<WorkItemVM> { }; List<WorkItemVM> workItems = new List<WorkItemVM> { };
string responseMessage = "";
if (workItemDot != null) if (workItemDot != null)
{ {
foreach (var item in workItemDot) foreach (var item in workItemDot)
@ -505,14 +504,12 @@ namespace MarcoBMS.Services.Controllers
//update //update
_context.WorkItems.Update(workItem); _context.WorkItems.Update(workItem);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseMessage = "Task Added Successfully";
} }
else else
{ {
//create //create
_context.WorkItems.Add(workItem); _context.WorkItems.Add(workItem);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseMessage = "Task Updated Successfully";
} }
var result = new WorkItemVM var result = new WorkItemVM
{ {
@ -522,7 +519,7 @@ namespace MarcoBMS.Services.Controllers
workItems.Add(result); workItems.Add(result);
} }
var activity = await _context.ActivityMasters.ToListAsync(); var activity = await _context.ActivityMasters.ToListAsync();
return Ok(ApiResponse<object>.SuccessResponse(workItems, responseMessage, 200)); return Ok(ApiResponse<object>.SuccessResponse(workItems, "Data saved successfully.", 200));
} }
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400));
@ -572,7 +569,6 @@ namespace MarcoBMS.Services.Controllers
{ {
Guid tenantId = GetTenantId(); Guid tenantId = GetTenantId();
var responseData = new InfraVM { }; var responseData = new InfraVM { };
string responseMessage = "";
if (infraDots != null) if (infraDots != null)
{ {
foreach (var item in infraDots) foreach (var item in infraDots)
@ -589,7 +585,6 @@ namespace MarcoBMS.Services.Controllers
_context.Buildings.Add(building); _context.Buildings.Add(building);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.building = building; responseData.building = building;
responseMessage = "Buliding Added Successfully";
} }
else else
{ {
@ -597,7 +592,6 @@ namespace MarcoBMS.Services.Controllers
_context.Buildings.Update(building); _context.Buildings.Update(building);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.building = building; responseData.building = building;
responseMessage = "Buliding Updated Successfully";
} }
} }
@ -612,7 +606,6 @@ namespace MarcoBMS.Services.Controllers
_context.Floor.Add(floor); _context.Floor.Add(floor);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.floor = floor; responseData.floor = floor;
responseMessage = "Floor Added Successfully";
} }
else else
{ {
@ -620,7 +613,6 @@ namespace MarcoBMS.Services.Controllers
_context.Floor.Update(floor); _context.Floor.Update(floor);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.floor = floor; responseData.floor = floor;
responseMessage = "Floor Updated Successfully";
} }
} }
if (item.WorkArea != null) if (item.WorkArea != null)
@ -634,7 +626,6 @@ namespace MarcoBMS.Services.Controllers
_context.WorkAreas.Add(workArea); _context.WorkAreas.Add(workArea);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.workArea = workArea; responseData.workArea = workArea;
responseMessage = "Work Area Added Successfully";
} }
else else
{ {
@ -642,11 +633,10 @@ namespace MarcoBMS.Services.Controllers
_context.WorkAreas.Update(workArea); _context.WorkAreas.Update(workArea);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
responseData.workArea = workArea; responseData.workArea = workArea;
responseMessage = "Work Area Updated Successfully";
} }
} }
} }
return Ok(ApiResponse<object>.SuccessResponse(responseData, responseMessage, 200)); return Ok(ApiResponse<object>.SuccessResponse(responseData, "Data saved successfully.", 200));
} }
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Infra Details are not valid.", 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Infra Details are not valid.", 400));

View File

@ -1,13 +1,14 @@
using System.Data; using System.Data;
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Dtos.Employees;
using Marco.Pms.Model.Dtos.Roles; using Marco.Pms.Model.Dtos.Roles;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Roles;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels;
using Marco.Pms.Model.ViewModels.Master;
using Marco.Pms.Model.ViewModels.Roles;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -23,16 +24,16 @@ namespace MarcoBMS.Services.Controllers
private readonly ApplicationDbContext _context; private readonly ApplicationDbContext _context;
private readonly RolesHelper _rolesHelper; private readonly RolesHelper _rolesHelper;
private readonly UserHelper _userHelper; private readonly UserHelper _userHelper;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ILoggingService _logger;
public RolesController(UserManager<ApplicationUser> userManager, ApplicationDbContext context, RolesHelper rolesHelper, UserHelper userHelper, ILoggingService logger)
private readonly UserManager<ApplicationUser> _userManager;
public RolesController(UserManager<ApplicationUser> userManager, ApplicationDbContext context, RolesHelper rolesHelper, UserHelper userHelper)
{ {
_context = context; _context = context;
_userManager = userManager; _userManager = userManager;
_rolesHelper = rolesHelper; _rolesHelper = rolesHelper;
_userHelper = userHelper; _userHelper = userHelper;
_logger = logger;
} }
private Guid GetTenantId() private Guid GetTenantId()
@ -101,30 +102,7 @@ namespace MarcoBMS.Services.Controllers
return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400)); return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
} }
} }
[HttpDelete("jobrole/{id}")]
public async Task<IActionResult> DeleteJobRole(Guid id)
{
Guid tenantId = GetTenantId();
var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync();
var jobRole = await _context.JobRoles.FirstOrDefaultAsync(r => r.Id == id && r.TenantId == tenantId);
if (jobRole != null)
{
var employee = await _context.Employees.Where(e => e.JobRoleId == jobRole.Id).ToListAsync();
if (employee.Any())
{
_logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to delete the job role with ID {JobRoleId} which is assigned to one or more employees", LoggedEmployee.Id, jobRole.Id);
return BadRequest(ApiResponse<object>.ErrorResponse("Cannot delete the job role because it is assigned to one or more employees.", "Cannot delete the job role because it is assigned to one or more employees.", 400));
}
_context.JobRoles.Remove(jobRole);
await _context.SaveChangesAsync();
_logger.LogInfo("Employee with ID {LoggedEmployeeId} deleted the job role with ID {JobRoleId}", LoggedEmployee.Id, jobRole.Id);
}
else
{
_logger.LogWarning("Job role with ID {JobRoleId} not found in database", id);
}
return Ok(ApiResponse<object>.SuccessResponse(new { }, "Job role deleted successfully", 200));
}
[HttpGet] [HttpGet]
public async Task<IActionResult> GetAllRoles() public async Task<IActionResult> GetAllRoles()
@ -162,7 +140,6 @@ namespace MarcoBMS.Services.Controllers
{ {
Id = item.Id, Id = item.Id,
Role = item.Role, Role = item.Role,
IsSystem = item.IsSystem,
Description = item.Description, Description = item.Description,
FeaturePermission = [] FeaturePermission = []
}; };
@ -251,21 +228,17 @@ namespace MarcoBMS.Services.Controllers
try try
{ {
Guid TenantId = GetTenantId(); Guid TenantId = GetTenantId();
var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync();
var existingRole = await _context.ApplicationRoles.AsNoTracking().FirstOrDefaultAsync(r => r.Id == id);
if (existingRole != null && existingRole.IsSystem)
{
_logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to update System-defined application roles {AppcationRoleId}", LoggedEmployee.Id, existingRole.Id);
return BadRequest(ApiResponse<object>.ErrorResponse("System-defined roles cannot be updated", "System-defined roles cannot be updated", 400));
}
ApplicationRole role = updateRoleDto.ToApplicationRoleFromUpdateDto(TenantId); ApplicationRole role = updateRoleDto.ToApplicationRoleFromUpdateDto(TenantId);
if (role.TenantId != TenantId) if (role.TenantId != TenantId)
return Unauthorized(ApiResponse<object>.ErrorResponse("You don't have any authority to update role", "You don't have any authority to update role", 401)); return Unauthorized(ApiResponse<object>.ErrorResponse("You don't have any authority to update role", "You don't have any authority to update role", 401));
if (existingRole != null)
var projectModel = _context.ApplicationRoles.Update(role);
if (projectModel == null)
{ {
_context.ApplicationRoles.Update(role); return NotFound(ApiResponse<object>.ErrorResponse("Project not found", "Project not found", 404));
await _context.SaveChangesAsync();
} }
bool modified = false; bool modified = false;
@ -295,13 +268,7 @@ namespace MarcoBMS.Services.Controllers
} }
catch (Exception ex) catch (Exception ex)
{ {
var response = new return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
{
message = ex.Message,
detail = ex.StackTrace,
statusCode = StatusCodes.Status500InternalServerError
};
return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, response, 400));
} }
} }
@ -339,101 +306,11 @@ namespace MarcoBMS.Services.Controllers
{ {
Id = role.Id, Id = role.Id,
Role = role.Role, Role = role.Role,
IsSystem = role.IsSystem,
FeaturePermission = featurePermissions FeaturePermission = featurePermissions
}; };
return Ok(ApiResponse<object>.SuccessResponse(vm, "Roles Perimssions fetched successfully.", 200)); return Ok(ApiResponse<object>.SuccessResponse(vm, "Roles Perimssions fetched successfully.", 200));
} }
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteApplicationRole(Guid id)
{
Guid tenantId = GetTenantId();
var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync();
var role = await _context.ApplicationRoles.AsNoTracking().FirstOrDefaultAsync(r => r.Id == id && r.TenantId == tenantId);
if (role != null)
{
if (role.IsSystem)
{
_logger.LogInfo("Employee with ID {LoggedEmployeeId} tries to delete system-defined application role with ID {ApplicationRoleId}", LoggedEmployee.Id, role.Id);
return BadRequest(ApiResponse<object>.ErrorResponse("This role cannot be deleted because it is system-defined.", "This role cannot be deleted because it is system-defined.", 400));
}
var employeeRoleMapping = await _context.EmployeeRoleMappings.Where(erm => erm.RoleId == role.Id).ToListAsync();
if (employeeRoleMapping.Count != 0)
{
_logger.LogInfo("Employee with ID {LoggedEmployeeId} tries to delete application role with ID {ApplicationRoleId} with is assigned to an employee", LoggedEmployee.Id, role.Id);
return BadRequest(ApiResponse<object>.ErrorResponse("This role cannot be deleted because it is currently assigned to employees.", "This role cannot be deleted because it is currently assigned to employees.", 400));
}
_context.ApplicationRoles.Remove(role);
var rolePermissionMapping = await _context.RolePermissionMappings.Where(r => r.ApplicationRoleId == role.Id).ToListAsync();
if (rolePermissionMapping.Count != 0)
{
_context.RolePermissionMappings.RemoveRange(rolePermissionMapping);
_logger.LogInfo("All permissions assigned to the application role with ID {ApplicationRoleId} have been removed.", role.Id);
}
await _context.SaveChangesAsync();
_logger.LogInfo("Employee with ID {LoggedEmployeeId} deleted application role with ID {ApplicationRoleId}", LoggedEmployee.Id, role.Id);
}
else
{
_logger.LogWarning("Application role with ID {ApplicationRoleId} not found in database", id);
}
return Ok(ApiResponse<object>.SuccessResponse(new { }, "Application role is deleted successfully", 200));
}
[HttpPost]
[Route("assign-roles")]
public async Task<IActionResult> ManageRoles([FromBody] List<EmployeeRoleDot> employeeRoleDots)
{
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 employeesIds = employeeRoleDots.Select(e => e.EmployeeId).Distinct().ToList();
var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync();
var employees = await _context.Employees.Where(e => employeesIds.Contains(e.Id)).ToListAsync();
Guid TenantId = GetTenantId();
try
{
foreach (EmployeeRoleDot role in employeeRoleDots)
{
var employee = employees.Find(e => e.Id == role.EmployeeId && e.IsSystem);
if (employee != null)
{
_logger.LogWarning("Employee with ID {LoggedEmployeeId} tries to assign or remove the application role to System-defined employee with ID {EmployeeId}", LoggedEmployee.Id, employee.Id);
return BadRequest(ApiResponse<object>.ErrorResponse("System-defined employee cannot have application roles assigned or removed.", "System-defined employee cannot have application roles assigned or removed.", 400));
}
EmployeeRoleMapping mapping = role.ToEmployeeRoleMappingFromEmployeeRoleDot(TenantId);
var existingItem = await _context.EmployeeRoleMappings.AsNoTracking().SingleOrDefaultAsync(c => c.Id == mapping.Id);
if (existingItem == null)
{
if (role.IsEnabled == true)
{
_context.EmployeeRoleMappings.Add(mapping);
}
}
else if (role.IsEnabled == false)
{
_context.EmployeeRoleMappings.Remove(existingItem);
}
}
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
}
return Ok(ApiResponse<object>.SuccessResponse("success", "Roles modified.", 200));
}
} }
} }

View File

@ -1,6 +1,7 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Roles;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;