diff --git a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Requests/Validation/VisaApplicationCreateRequestValidator.cs b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Requests/Validation/VisaApplicationCreateRequestValidator.cs index 0d12f7d..60be0f4 100644 --- a/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Requests/Validation/VisaApplicationCreateRequestValidator.cs +++ b/SchengenVisaApi/ApplicationLayer/Services/VisaApplications/Requests/Validation/VisaApplicationCreateRequestValidator.cs @@ -16,19 +16,12 @@ namespace ApplicationLayer.Services.VisaApplications.Requests.Validation IApplicantsRepository applicants, IUserIdProvider userIdProvider) { - //todo fix - WhenAsync( - async (_, ct) => - { - return await applicants.IsApplicantNonResidentByUserId(userIdProvider.GetUserId(), ct); - }, - () => - { - RuleFor(r => r.ReentryPermit) - .NotEmpty() - .WithMessage("Non-residents must provide re-entry permission") - .SetValidator(reentryPermitValidator); - }); + RuleFor(r => r.ReentryPermit) + .NotEmpty() + .WithMessage("Non-residents must provide re-entry permission") + .SetValidator(reentryPermitValidator) + .WhenAsync(async (r, ct) => + await applicants.IsApplicantNonResidentByUserId(userIdProvider.GetUserId(), ct)); RuleFor(r => r.DestinationCountry) .NotEmpty() @@ -41,8 +34,6 @@ namespace ApplicationLayer.Services.VisaApplications.Requests.Validation .IsInEnum(); RuleFor(r => r.ValidDaysRequested) - .NotEmpty() - .WithMessage("Valid days requested can not be empty") .GreaterThan(0) .WithMessage($"Valid days requested should be positive number and less than {ConfigurationConstraints.MaxValidDays}") .LessThanOrEqualTo(ConfigurationConstraints.MaxValidDays) diff --git a/SchengenVisaApi/SchengenVisaApi/Controllers/UsersController.cs b/SchengenVisaApi/SchengenVisaApi/Controllers/UsersController.cs index a32ee36..45093fa 100644 --- a/SchengenVisaApi/SchengenVisaApi/Controllers/UsersController.cs +++ b/SchengenVisaApi/SchengenVisaApi/Controllers/UsersController.cs @@ -26,6 +26,7 @@ namespace SchengenVisaApi.Controllers [HttpPost] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status409Conflict)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] [Route("register")] public async Task Register(RegisterApplicantRequest request, CancellationToken cancellationToken) { @@ -42,6 +43,7 @@ namespace SchengenVisaApi.Controllers [ProducesResponseType(StatusCodes.Status409Conflict)] [ProducesResponseType(StatusCodes.Status403Forbidden)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] [Route("authorities")] [Authorize(policy: PolicyConstants.AdminPolicy)] public async Task RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken) @@ -84,6 +86,7 @@ namespace SchengenVisaApi.Controllers [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status403Forbidden)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] [Route("authorities/{authorityAccountId:guid}")] [Authorize(policy: PolicyConstants.AdminPolicy)] public async Task ChangeAuthorityAuthData(Guid authorityAccountId, AuthData authData, CancellationToken cancellationToken) diff --git a/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs b/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs index 09afbff..e138f55 100644 --- a/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs +++ b/SchengenVisaApi/SchengenVisaApi/Controllers/VisaApplicationController.cs @@ -2,6 +2,7 @@ using ApplicationLayer.InfrastructureServicesInterfaces; using ApplicationLayer.Services.VisaApplications.Handlers; using ApplicationLayer.Services.VisaApplications.Models; using ApplicationLayer.Services.VisaApplications.Requests; +using FluentValidation; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SchengenVisaApi.Common; @@ -13,7 +14,8 @@ namespace SchengenVisaApi.Controllers; [Route("visaApplications")] public class VisaApplicationController( IVisaApplicationRequestsHandler visaApplicationRequestsHandler, - IUserIdProvider userIdProvider) : ControllerBase + IUserIdProvider userIdProvider, + IValidator visaApplicationCreateRequestValidator) : ControllerBase { /// Returns all applications from DB /// Accessible only for approving authorities @@ -51,9 +53,12 @@ public class VisaApplicationController( [ProducesResponseType(StatusCodes.Status403Forbidden)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] [Authorize(policy: PolicyConstants.ApplicantPolicy)] public async Task Create(VisaApplicationCreateRequest request, CancellationToken cancellationToken) { + await visaApplicationCreateRequestValidator.ValidateAndThrowAsync(request, cancellationToken); + var userId = userIdProvider.GetUserId(); await visaApplicationRequestsHandler.HandleCreateRequestAsync(userId, request, cancellationToken); return Ok();