using System.Threading; using System.Threading.Tasks; using InternshipSystem.Api.Queries; using InternshipSystem.Api.Security; using InternshipSystem.Core.Commands; using InternshipSystem.Repository; using Microsoft.AspNetCore.Authorization; using InternshipSystem.Api.Security; using InternshipSystem.Api.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace InternshipSystem.Api.Controllers { [Route("internshipRegistration")] public class InternshipRegistrationController : ControllerBase { private readonly IInternshipService _internshipService; public InternshipRegistrationController(IInternshipService internshipService) { _internshipService = internshipService; } /// /// Validate and add filled internship registration form /// /// Internship registration data /// If registration form was successfully added /// If the provided registration query was malformed /// This action is only available for authorized student registered for current edition [HttpPut] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [Authorize] public async Task SubmitRegistrationForm([FromBody] RegistrationFormQuery registrationQuery, [FromServices] User user, CancellationToken cancellationToken) { var validator = new RegistrationFormQuery.Validator(); var validationResult = await validator.ValidateAsync(registrationQuery, cancellationToken); if (!validationResult.IsValid) { return BadRequest(validationResult.ToString()); } return await _internshipService.SubmitRegistration(registrationQuery, user.PersonNumber, cancellationToken); } } }