feat: implemetar até parte 3
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
|
||||
using CampusWorkshops.Api.Dtos;
|
||||
using CampusWorkshops.Api.Models;
|
||||
using CampusWorkshops.Api.Repositories;
|
||||
using FluentValidation;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Workshop10_API.Validation;
|
||||
|
||||
namespace CampusWorkshops.Api.Controllers;
|
||||
|
||||
@@ -11,30 +12,67 @@ namespace CampusWorkshops.Api.Controllers;
|
||||
public class WorkshopsController : ControllerBase
|
||||
{
|
||||
private readonly IWorkshopRepository _repo;
|
||||
|
||||
public WorkshopsController(IWorkshopRepository repo) => _repo = repo;
|
||||
|
||||
/// <summary>Lista workshops com filtros opcionais.</summary>
|
||||
[HttpGet]
|
||||
public Task<IActionResult> GetAll([FromQuery] DateTimeOffset? from, [FromQuery] DateTimeOffset? to, [FromQuery] string? q, CancellationToken ct)
|
||||
public async Task<IActionResult> GetAll([FromQuery] DateTimeOffset? from, [FromQuery] DateTimeOffset? to, [FromQuery] string? q, CancellationToken ct)
|
||||
{
|
||||
// TODO: implementar usando _repo.GetAllAsync e mapear para WorkshopResponse
|
||||
return Task.FromResult<IActionResult>(Ok(Array.Empty<WorkshopResponse>()));
|
||||
var workshops = await _repo.GetAllAsync(from, to, q, ct);
|
||||
if (!workshops.Any())
|
||||
return NoContent();
|
||||
|
||||
return Ok(workshops);
|
||||
}
|
||||
|
||||
/// <summary>Obtém um workshop por Id.</summary>
|
||||
[HttpGet("{id:guid}")]
|
||||
public Task<IActionResult> GetById(Guid id, CancellationToken ct)
|
||||
public async Task<IActionResult> GetById(Guid id, CancellationToken ct)
|
||||
{
|
||||
// TODO: implementar usando _repo.GetByIdAsync
|
||||
return Task.FromResult<IActionResult>(NotFound());
|
||||
var result = await _repo.GetByIdAsync(id, ct);
|
||||
|
||||
if (result == null)
|
||||
return NoContent();
|
||||
|
||||
return Ok(result);
|
||||
}
|
||||
|
||||
/// <summary>Cria um novo workshop.</summary>
|
||||
[HttpPost]
|
||||
public Task<IActionResult> Create([FromBody] CreateWorkshopRequest body, CancellationToken ct)
|
||||
public async Task<IActionResult> Create([FromBody] CreateWorkshopRequestDTO workshopDTO, CancellationToken ct)
|
||||
{
|
||||
// TODO: validar ModelState, regras de negócio e chamar _repo.AddAsync; retornar CreatedAtAction
|
||||
return Task.FromResult<IActionResult>(BadRequest());
|
||||
var dtoValidator = new WorkshopRequestDTOValidator();
|
||||
var validationResult = await dtoValidator.ValidateAsync(workshopDTO);
|
||||
if (!validationResult.IsValid)
|
||||
{
|
||||
var erros = validationResult.Errors.Select(e => new { e.PropertyName, e.ErrorMessage });
|
||||
return BadRequest(erros);
|
||||
}
|
||||
|
||||
Workshop workshop = new Workshop
|
||||
{
|
||||
Capacity = workshopDTO.Capacity,
|
||||
Description = workshopDTO.Description,
|
||||
EndAt = workshopDTO.EndAt,
|
||||
IsOnline = workshopDTO.IsOnline,
|
||||
Location = workshopDTO.Location,
|
||||
StartAt = workshopDTO.StartAt,
|
||||
Title = workshopDTO.Title
|
||||
};
|
||||
|
||||
var result = await _repo.AddAsync(workshop, ct);
|
||||
|
||||
if (result != null)
|
||||
return CreatedAtAction(nameof(GetById), new { workshopDTO });
|
||||
|
||||
return BadRequest();
|
||||
}
|
||||
|
||||
[HttpDelete]
|
||||
public async Task<IActionResult> Delete(Guid id, CancellationToken ct)
|
||||
{
|
||||
var result = await _repo.DeleteAsync(id, ct);
|
||||
if(result)
|
||||
return NoContent();
|
||||
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user