feat: implemetar até parte 3

This commit is contained in:
Sheila
2025-09-09 20:16:58 -03:00
parent cf9f2a1179
commit e780f5c99c
11 changed files with 197 additions and 45 deletions

View File

@@ -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();
}
}