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 namespace ApplicationLayer.Services.VisaApplications.Models
{ {

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
namespace SchengenVisaApi.Common namespace SchengenVisaApi.Common
{ {
#pragma warning enable CS1591 #pragma warning disable CS1591
public static class PolicyConstants public static class PolicyConstants
{ {
public const string AdminPolicy = "AdminPolicy"; public const string AdminPolicy = "AdminPolicy";
public const string ApplicantPolicy = "ApplicantPolicy"; public const string ApplicantPolicy = "ApplicantPolicy";
public const string ApprovingAuthorityPolicy = "ApprovingAuthorityPolicy"; 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.RequestHandlers;
using ApplicationLayer.Services.Locations.Requests; using ApplicationLayer.Services.Locations.Requests;
using Domains.LocationDomain;
using Domains.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SchengenVisaApi.Common; using SchengenVisaApi.Common;
namespace SchengenVisaApi.Controllers namespace SchengenVisaApi.Controllers
{ {
/// Controller for <see cref="Domains.LocationDomain"/>
[ApiController] [ApiController]
[Route("countries")] [Route("countries")]
public class LocationsController(ILocationRequestsHandler requestsHandler) : ControllerBase public class LocationsController(ILocationRequestsHandler requestsHandler) : ControllerBase
{ {
/// Return countries with cities from DB
[HttpGet] [HttpGet]
[ProducesResponseType<List<Country>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetAvailableLocations(CancellationToken cancellationToken) public async Task<IActionResult> GetAvailableLocations(CancellationToken cancellationToken)
{ {
return Ok(await requestsHandler.HandleGetRequestAsync(cancellationToken)); return Ok(await requestsHandler.HandleGetRequestAsync(cancellationToken));
} }
/// Adds country with cities to DB
/// <remarks>Accessible only for <see cref="Role.Admin"/></remarks>
[HttpPost] [HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Route("country")] [Route("country")]
[Authorize(policy: PolicyConstants.AdminPolicy)] [Authorize(policy: PolicyConstants.AdminPolicy)]
public async Task<IActionResult> AddCountry(AddCountryRequest request, CancellationToken cancellationToken) public async Task<IActionResult> AddCountry(AddCountryRequest request, CancellationToken cancellationToken)
{ {
await requestsHandler.AddCountryAsync(request, 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.LoginService;
using ApplicationLayer.Services.AuthServices.RegisterService; using ApplicationLayer.Services.AuthServices.RegisterService;
using ApplicationLayer.Services.AuthServices.Requests; using ApplicationLayer.Services.AuthServices.Requests;
using Domains.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SchengenVisaApi.Common; using SchengenVisaApi.Common;
namespace SchengenVisaApi.Controllers namespace SchengenVisaApi.Controllers
{ {
/// Controller for <see cref="Domains.Users"/>
[ApiController] [ApiController]
[Route("auth")] [Route("auth")]
public class UsersController(IRegisterService registerService, ILoginService loginService) : ControllerBase public class UsersController(IRegisterService registerService, ILoginService loginService) : ControllerBase
{ {
/// Adds applicant with user account to DB
[HttpPost] [HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[Route("applicant")] [Route("applicant")]
public async Task<IActionResult> Register(RegisterApplicantRequest request, CancellationToken cancellationToken) public async Task<IActionResult> Register(RegisterApplicantRequest request, CancellationToken cancellationToken)
{ {
@@ -19,16 +24,25 @@ namespace SchengenVisaApi.Controllers
return Created(); return Created();
} }
/// Adds approving authority with user account to DB
/// <remarks>Accessible only for <see cref="Role.Admin"/></remarks>
[HttpPost] [HttpPost]
[Authorize(policy: PolicyConstants.AdminPolicy)] [ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[Route("authority")] [Route("authority")]
[Authorize(policy: PolicyConstants.AdminPolicy)]
public async Task<IActionResult> RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken) public async Task<IActionResult> RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken)
{ {
await registerService.RegisterAuthority(request, cancellationToken); await registerService.RegisterAuthority(request, cancellationToken);
return Created(); return Created();
} }
/// Returns JWT-token for authentication
[HttpGet] [HttpGet]
[ProducesResponseType<string>(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<IActionResult> Login(string email, string password, CancellationToken cancellationToken) public async Task<IActionResult> Login(string email, string password, CancellationToken cancellationToken)
{ {
var result = await loginService.LoginAsync(new UserLoginRequest(email, password), cancellationToken); var result = await loginService.LoginAsync(new UserLoginRequest(email, password), cancellationToken);

View File

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