Added the API to assign the organization to tenant #133
@ -12,6 +12,7 @@ using Marco.Pms.Model.ViewModels.Projects;
|
||||
using Marco.Pms.Services.Service;
|
||||
using MarcoBMS.Services.Helpers;
|
||||
using MarcoBMS.Services.Service;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
@ -21,6 +22,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
{
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
public class OrganizationController : ControllerBase
|
||||
{
|
||||
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory;
|
||||
@ -109,7 +111,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
#region =================================================================== Post Functions ===================================================================
|
||||
|
||||
[HttpPost("create")]
|
||||
public async Task<IActionResult> CreateServiceProviderAsync([FromBody] CreateOrganizationDto model)
|
||||
public async Task<IActionResult> CreateOrganizationAsync([FromBody] CreateOrganizationDto model)
|
||||
{
|
||||
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||
using var scope = _serviceScope.CreateScope();
|
||||
@ -238,7 +240,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
|
||||
[HttpPost("assign/project")]
|
||||
public async Task<IActionResult> AssignServiceProviderToProjectAsync([FromBody] AssignOrganizationDto model)
|
||||
public async Task<IActionResult> AssignOrganizationToProjectAsync([FromBody] AssignOrganizationDto model)
|
||||
{
|
||||
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||
using var scope = _serviceScope.CreateScope();
|
||||
@ -426,6 +428,70 @@ namespace Marco.Pms.Services.Controllers
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500));
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("assign/tenant/{organizationId}")]
|
||||
public async Task<IActionResult> AssignOrganizationToTenantAsync(Guid organizationId)
|
||||
{
|
||||
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||
using var scope = _serviceScope.CreateScope();
|
||||
await using var transaction = await _context.Database.BeginTransactionAsync();
|
||||
try
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
var serviceProviderTenantMappingTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.TenantOrgMappings
|
||||
.FirstOrDefaultAsync(spt => spt.OrganizationId == organizationId && spt.TenantId == tenantId && spt.IsActive);
|
||||
});
|
||||
|
||||
var organizationTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.Organizations
|
||||
.FirstOrDefaultAsync(o => o.Id == organizationId);
|
||||
});
|
||||
|
||||
await Task.WhenAll(serviceProviderTenantMappingTask, organizationTask);
|
||||
|
||||
var serviceProviderTenantMapping = serviceProviderTenantMappingTask.Result;
|
||||
var organization = organizationTask.Result;
|
||||
|
||||
if (organization == null)
|
||||
{
|
||||
return NotFound(ApiResponse<object>.ErrorResponse("Organization not found", "Organization not found in database", 404));
|
||||
}
|
||||
|
||||
if (serviceProviderTenantMapping == null)
|
||||
{
|
||||
var newServiceProviderTenantMapping = new TenantOrgMapping
|
||||
{
|
||||
OrganizationId = organization.Id,
|
||||
SPRID = organization.SPRID,
|
||||
AssignedDate = DateTime.UtcNow,
|
||||
IsActive = true,
|
||||
TenantId = tenantId
|
||||
};
|
||||
_context.TenantOrgMappings.Add(newServiceProviderTenantMapping);
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
var response = _mapper.Map<BasicOrganizationVm>(organization);
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization has been assigned to tenant", 200));
|
||||
}
|
||||
catch (DbUpdateException dbEx)
|
||||
{
|
||||
await transaction.RollbackAsync();
|
||||
|
||||
_logger.LogError(dbEx, "Database Exception has been occured, While assigning the organization to project");
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An database exception has been occured", 500));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception has been occured, While assigned the organizatio to project");
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Internal error", "An internal exception has been occured", 500));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Put Functions ===================================================================
|
||||
|
Loading…
x
Reference in New Issue
Block a user