Comments and attributes for actions

This commit is contained in:
2024-08-20 16:55:32 +03:00
parent 4db37bb32c
commit 564fd1ddbf
7 changed files with 54 additions and 9 deletions

View File

@@ -1,5 +1,4 @@
using Domains.LocationDomain;
using Domains.VisaApplicationDomain;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.Services.VisaApplications.Models
{

View File

@@ -1,6 +1,4 @@
using Domains.ApplicantDomain;
using Domains.LocationDomain;
using Domains.VisaApplicationDomain;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.Services.VisaApplications.Models
{

View File

@@ -4,6 +4,7 @@ using Swashbuckle.AspNetCore.SwaggerGen;
namespace SchengenVisaApi.Common
{
/// Adds auth for swagger
public class ConfigureSwaggerOptions : IConfigureOptions<SwaggerGenOptions>
{
void IConfigureOptions<SwaggerGenOptions>.Configure(SwaggerGenOptions options)

View File

@@ -1,12 +1,12 @@
namespace SchengenVisaApi.Common
{
#pragma warning enable CS1591
#pragma warning disable CS1591
public static class PolicyConstants
{
public const string AdminPolicy = "AdminPolicy";
public const string ApplicantPolicy = "ApplicantPolicy";
public const string ApprovingAuthorityPolicy = "ApprovingAuthorityPolicy";
}
#pragma warning disable CS1591
#pragma warning enable CS1591
}

View File

@@ -1,28 +1,39 @@
using ApplicationLayer.Services.Locations.RequestHandlers;
using ApplicationLayer.Services.Locations.Requests;
using Domains.LocationDomain;
using Domains.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SchengenVisaApi.Common;
namespace SchengenVisaApi.Controllers
{
/// Controller for <see cref="Domains.LocationDomain"/>
[ApiController]
[Route("countries")]
public class LocationsController(ILocationRequestsHandler requestsHandler) : ControllerBase
{
/// Return countries with cities from DB
[HttpGet]
[ProducesResponseType<List<Country>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetAvailableLocations(CancellationToken cancellationToken)
{
return Ok(await requestsHandler.HandleGetRequestAsync(cancellationToken));
}
/// Adds country with cities to DB
/// <remarks>Accessible only for <see cref="Role.Admin"/></remarks>
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Route("country")]
[Authorize(policy: PolicyConstants.AdminPolicy)]
public async Task<IActionResult> AddCountry(AddCountryRequest request, CancellationToken cancellationToken)
{
await requestsHandler.AddCountryAsync(request, cancellationToken);
return Ok();
return Created();
}
}
}

View File

@@ -1,17 +1,22 @@
using ApplicationLayer.Services.AuthServices.LoginService;
using ApplicationLayer.Services.AuthServices.RegisterService;
using ApplicationLayer.Services.AuthServices.Requests;
using Domains.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SchengenVisaApi.Common;
namespace SchengenVisaApi.Controllers
{
/// Controller for <see cref="Domains.Users"/>
[ApiController]
[Route("auth")]
public class UsersController(IRegisterService registerService, ILoginService loginService) : ControllerBase
{
/// Adds applicant with user account to DB
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[Route("applicant")]
public async Task<IActionResult> Register(RegisterApplicantRequest request, CancellationToken cancellationToken)
{
@@ -19,16 +24,25 @@ namespace SchengenVisaApi.Controllers
return Created();
}
/// Adds approving authority with user account to DB
/// <remarks>Accessible only for <see cref="Role.Admin"/></remarks>
[HttpPost]
[Authorize(policy: PolicyConstants.AdminPolicy)]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Route("authority")]
[Authorize(policy: PolicyConstants.AdminPolicy)]
public async Task<IActionResult> RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken)
{
await registerService.RegisterAuthority(request, cancellationToken);
return Created();
}
/// Returns JWT-token for authentication
[HttpGet]
[ProducesResponseType<string>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<IActionResult> Login(string email, string password, CancellationToken cancellationToken)
{
var result = await loginService.LoginAsync(new UserLoginRequest(email, password), cancellationToken);

View File

@@ -1,17 +1,27 @@
using System.Security.Claims;
using ApplicationLayer.Services.VisaApplications.Handlers;
using ApplicationLayer.Services.VisaApplications.Models;
using ApplicationLayer.Services.VisaApplications.Requests;
using Domains.Users;
using Domains.VisaApplicationDomain;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SchengenVisaApi.Common;
namespace SchengenVisaApi.Controllers;
/// Controller for <see cref="Domains.VisaApplicationDomain"/>
[ApiController]
[Route("[controller]")]
public class VisaApplicationController(IVisaApplicationRequestsHandler visaApplicationRequestsHandler) : ControllerBase
{
//todo should return only pending applications
/// Returns all <see cref="Domains.VisaApplicationDomain.VisaApplication"/> from DB
/// <remarks>Accessible only for <see cref="Role.ApprovingAuthority"/></remarks>
[HttpGet]
[ProducesResponseType<List<VisaApplication>>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Authorize(policy: PolicyConstants.ApprovingAuthorityPolicy)]
public async Task<IActionResult> Get(CancellationToken cancellationToken)
{
@@ -19,7 +29,13 @@ public class VisaApplicationController(IVisaApplicationRequestsHandler visaAppli
return Ok(result);
}
/// Returns all <see cref="VisaApplication"/> of one applicant
/// <remarks>Returns applications for authorized applicant</remarks>
[HttpGet]
[ProducesResponseType<List<VisaApplicationModelForApplicant>>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Authorize(policy: PolicyConstants.ApplicantPolicy)]
[Route("OfApplicant")]
public async Task<IActionResult> GetForApplicant(CancellationToken cancellationToken)
@@ -29,7 +45,13 @@ public class VisaApplicationController(IVisaApplicationRequestsHandler visaAppli
return Ok(result);
}
/// Adds new <see cref="VisaApplication"/> to DB
/// <remarks>Adds application for authorized applicant</remarks>
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Authorize(policy: PolicyConstants.ApplicantPolicy)]
public async Task<IActionResult> Create(VisaApplicationCreateRequest request, CancellationToken cancellationToken)
{