using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Strata.ContinuousImprovement.Biz.OpportunityRoleAssignment; using Strata.ContinuousImprovement.Biz.StrategicOpportunities; using Strata.CoreLib.Claims.Extensions; using System.Collections.Generic; using System; using System.Threading; using System.Threading.Tasks; using System.Linq; namespace Strata.ContinuousImprovement.Api.Controllers { [ApiController] [ApiVersion("1.0")] [Route("api/v{api-version:apiVersion}/[controller]")] public class StrategicOpportunitySecurityController : ControllerBase { private readonly IStrategicOpportunityService _strategicOpportunityService; private readonly IOpportunityRoleAssignmentService _opportunityRoleAssignmentService; public StrategicOpportunitySecurityController(IStrategicOpportunityService strategicOpportunityService, IOpportunityRoleAssignmentService opportunityRoleAssignmentService) { _strategicOpportunityService = strategicOpportunityService; _opportunityRoleAssignmentService = opportunityRoleAssignmentService; } [HttpGet("{lootId}")] public async Task GetUserPermissions(long lootId, CancellationToken cancellationToken) => await _opportunityRoleAssignmentService.GetUserRoleAssignmentsAsync(lootId, cancellationToken); [HttpGet("{lootId}/[action]")] public async Task> GetSimpleSecurities(long lootId, CancellationToken cancellationToken) => await _opportunityRoleAssignmentService.GetRoleAssignmentsAsync(lootId, cancellationToken); [HttpPut("{lootId}/[action]")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task> SetSimpleSecurities(long lootId, [FromBody] List permissionSettings, CancellationToken cancellationToken) { if (permissionSettings.Any(ps => ps.LootId != lootId)) { return BadRequest(); } var roleAssignments = await _opportunityRoleAssignmentService.GetUserRoleAssignmentsAsync(lootId, cancellationToken); var isSecurable = roleAssignments.CanSecure; var userGuid = User?.GetUserGuid() ?? Guid.NewGuid(); if (!User.IsSdtEmployee() && !isSecurable) return Ok(false); await _opportunityRoleAssignmentService.SaveRoleAssignmentsAsync(lootId, permissionSettings, cancellationToken); return Ok(true); } } }