195 lines
7.3 KiB
C#
195 lines
7.3 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Swashbuckle.AspNetCore.Annotations;
|
|
using cuqmbr.TravelGuide.Application.Common.Models;
|
|
using cuqmbr.TravelGuide.Application.Common.ViewModels;
|
|
using cuqmbr.TravelGuide.Domain.Enums;
|
|
using cuqmbr.TravelGuide.Application.Buses;
|
|
using cuqmbr.TravelGuide.Application.Buses.Commands.AddBus;
|
|
using cuqmbr.TravelGuide.Application.Buses.Queries.GetBusesPage;
|
|
using cuqmbr.TravelGuide.Application.Buses.Queries.GetBus;
|
|
using cuqmbr.TravelGuide.Application.Buses.Commands.UpdateBus;
|
|
using cuqmbr.TravelGuide.Application.Buses.Commands.DeleteBus;
|
|
using cuqmbr.TravelGuide.Application.Buses.ViewModels;
|
|
|
|
namespace cuqmbr.TravelGuide.HttpApi.Controllers;
|
|
|
|
[Route("buses")]
|
|
public class BusesController : ControllerBase
|
|
{
|
|
[HttpPost]
|
|
[SwaggerOperation("Add a bus")]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status201Created, "Object successfuly created",
|
|
typeof(BusDto))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Object already exists",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Input data validation error",
|
|
typeof(HttpValidationProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status401Unauthorized, "Unauthorized to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status403Forbidden,
|
|
"Not enough privileges to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status404NotFound, "Parent object not found",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status500InternalServerError, "Internal server error",
|
|
typeof(ProblemDetails))]
|
|
public async Task<ActionResult<BusDto>> Add(
|
|
[FromBody] AddBusViewModel viewModel,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
return StatusCode(
|
|
StatusCodes.Status201Created,
|
|
await Mediator.Send(
|
|
new AddBusCommand()
|
|
{
|
|
Number = viewModel.Number,
|
|
Model = viewModel.Model,
|
|
Capacity = viewModel.Capacity
|
|
},
|
|
cancellationToken));
|
|
}
|
|
|
|
[HttpGet]
|
|
[SwaggerOperation("Get a list of all buses")]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status200OK, "Request successful",
|
|
typeof(PaginatedList<BusDto>))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Input data validation error",
|
|
typeof(HttpValidationProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status401Unauthorized, "Unauthorized to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status403Forbidden,
|
|
"Not enough privileges to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status500InternalServerError, "Internal server error",
|
|
typeof(ProblemDetails))]
|
|
public async Task<PaginatedList<BusDto>> GetPage(
|
|
[FromQuery] PageQuery pageQuery, [FromQuery] SearchQuery searchQuery,
|
|
[FromQuery] SortQuery sortQuery,
|
|
[FromQuery] GetBusesPageFilterViewModel filterQuery,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
return await Mediator.Send(
|
|
new GetBusesPageQuery()
|
|
{
|
|
PageNumber = pageQuery.PageNumber,
|
|
PageSize = pageQuery.PageSize,
|
|
Search = searchQuery.Search,
|
|
Sort = sortQuery.Sort,
|
|
CapacityGreaterOrEqualThan =
|
|
filterQuery.CapacityGreaterOrEqualThan,
|
|
CapacityLessOrEqualThan =
|
|
filterQuery.CapacityLessOrEqualThan
|
|
},
|
|
cancellationToken);
|
|
}
|
|
|
|
[HttpGet("{uuid:guid}")]
|
|
[SwaggerOperation("Get a bus by uuid")]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status200OK, "Request successful", typeof(BusDto))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Input data validation error",
|
|
typeof(HttpValidationProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status401Unauthorized, "Unauthorized to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status403Forbidden,
|
|
"Not enough privileges to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status404NotFound, "Object not found", typeof(BusDto))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status500InternalServerError, "Internal server error",
|
|
typeof(ProblemDetails))]
|
|
public async Task<BusDto> Get(
|
|
[FromRoute] Guid uuid,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
return await Mediator.Send(new GetBusQuery() { Guid = uuid },
|
|
cancellationToken);
|
|
}
|
|
|
|
[HttpPut("{uuid:guid}")]
|
|
[SwaggerOperation("Update a bus")]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status200OK, "Request successful", typeof(BusDto))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Object already exists",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Input data validation error",
|
|
typeof(HttpValidationProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status401Unauthorized, "Unauthorized to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status403Forbidden,
|
|
"Not enough privileges to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status404NotFound, "Object not found", typeof(BusDto))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status404NotFound, "Parent object not found",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status500InternalServerError, "Internal server error",
|
|
typeof(ProblemDetails))]
|
|
public async Task<BusDto> Update(
|
|
[FromRoute] Guid uuid,
|
|
[FromBody] UpdateBusViewModel viewModel,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
return await Mediator.Send(
|
|
new UpdateBusCommand()
|
|
{
|
|
Guid = uuid,
|
|
Number = viewModel.Number,
|
|
Model = viewModel.Model,
|
|
Capacity = viewModel.Capacity
|
|
},
|
|
cancellationToken);
|
|
}
|
|
|
|
[HttpDelete("{uuid:guid}")]
|
|
[SwaggerOperation("Delete a bus")]
|
|
[SwaggerResponse(StatusCodes.Status204NoContent, "Request successful")]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status400BadRequest, "Input data validation error",
|
|
typeof(HttpValidationProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status401Unauthorized, "Unauthorized to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status403Forbidden,
|
|
"Not enough privileges to perform an action",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status404NotFound, "Object not found",
|
|
typeof(ProblemDetails))]
|
|
[SwaggerResponse(
|
|
StatusCodes.Status500InternalServerError, "Internal server error",
|
|
typeof(ProblemDetails))]
|
|
public async Task<IActionResult> Delete(
|
|
[FromRoute] Guid uuid,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
await Mediator.Send(
|
|
new DeleteBusCommand() { Guid = uuid },
|
|
cancellationToken);
|
|
return StatusCode(StatusCodes.Status204NoContent);
|
|
}
|
|
}
|