using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Strata.ContinuousImprovement.Biz.ChargeCode.Initiatives; using Strata.ContinuousImprovement.Biz.Initiatives; using Strata.ContinuousImprovement.Biz.Mappers; using Strata.CoreLib.Claims; using Strata.CoreLib.Claims.Extensions; using System; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Api.Controllers { [ApiController] [ApiVersion("1.0")] [Route("api/v{api-version:apiVersion}/[controller]")] public class ChargeCodeInitiativesController : ControllerBase { private readonly IClaimsPrincipalAccessor _claimsPrincipalAccessor; private readonly ICCInitiativeService _chargeCodeInitiativeService; private readonly IStakeholderUser _stakeholderUser; public ChargeCodeInitiativesController( IClaimsPrincipalAccessor claimsPrincipalAccessor, ICCInitiativeService chargeCodeInitiativeService, IStakeholderUser stakeholderUser) { _claimsPrincipalAccessor = claimsPrincipalAccessor; _chargeCodeInitiativeService = chargeCodeInitiativeService; _stakeholderUser = stakeholderUser; } [HttpPost("[action]")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesDefaultResponseType] public async Task> Create(InitiativeDto initiative, CancellationToken cancellationToken) { try { var user = _claimsPrincipalAccessor.GetCurrentClaimsPrincipal(); var newInitiative = initiative.MapToInitiative(_stakeholderUser); var dbGuid = user.GetDatabaseGuid(); return await _chargeCodeInitiativeService.CreateChargeCodeInitiative(dbGuid, newInitiative, initiative.OpportunityGuid, cancellationToken); } catch { return Guid.Empty; } } } }