add: autenticacao e autorizacao

This commit is contained in:
2025-09-24 15:32:10 -03:00
parent f7426e16d9
commit 047c1a7ddb
6 changed files with 147 additions and 8 deletions

View File

@@ -2,6 +2,7 @@
using CampusWorkshops.Api.Dtos;
using CampusWorkshops.Api.Models;
using CampusWorkshops.Api.Repositories;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace CampusWorkshops.Api.Controllers;
@@ -16,10 +17,11 @@ public class WorkshopsController : ControllerBase
/// <summary>Lista workshops com filtros opcionais.</summary>
[HttpGet]
[Authorize]
public async Task<IActionResult> GetAll([FromQuery] DateTimeOffset? from, [FromQuery] DateTimeOffset? to, [FromQuery] string? q, CancellationToken ct)
{
var workshops = await _repo.GetAllAsync(from, to, q, ct);
var response = workshops.Select(w => new WorkshopResponse(
w.Id,
w.Title,
@@ -36,10 +38,11 @@ public class WorkshopsController : ControllerBase
/// <summary>Obtém um workshop por Id.</summary>
[HttpGet("{id:guid}")]
[Authorize]
public async Task<IActionResult> GetById(Guid id, CancellationToken ct)
{
var workshop = await _repo.GetByIdAsync(id, ct);
if (workshop == null)
{
return NotFound();
@@ -61,6 +64,7 @@ public class WorkshopsController : ControllerBase
/// <summary>Cria um novo workshop.</summary>
[HttpPost]
[Authorize(Policy = "CanWriteWorkshops")]
public async Task<IActionResult> Create([FromBody] CreateWorkshopRequest body, CancellationToken ct)
{
if (!ModelState.IsValid)
@@ -119,6 +123,8 @@ public class WorkshopsController : ControllerBase
/// <summary>Atualiza parcialmente um workshop existente.</summary>
[HttpPatch("{id:guid}")]
[Authorize(Policy = "CanWriteWorkshops")]
public async Task<IActionResult> Patch(Guid id, [FromBody] PatchWorkshopRequest body, CancellationToken ct)
{
if (!ModelState.IsValid)
@@ -135,10 +141,10 @@ public class WorkshopsController : ControllerBase
// Aplicar apenas os campos fornecidos
if (body.Title != null)
existingWorkshop.Title = body.Title;
if (body.Description != null)
existingWorkshop.Description = body.Description;
if (body.StartAt.HasValue)
{
if (body.StartAt.Value < DateTimeOffset.UtcNow)
@@ -147,13 +153,13 @@ public class WorkshopsController : ControllerBase
}
existingWorkshop.StartAt = body.StartAt.Value;
}
if (body.EndAt.HasValue)
existingWorkshop.EndAt = body.EndAt.Value;
if (body.Location != null)
existingWorkshop.Location = body.Location;
if (body.Capacity.HasValue)
{
if (body.Capacity.Value < 1)
@@ -162,7 +168,7 @@ public class WorkshopsController : ControllerBase
}
existingWorkshop.Capacity = body.Capacity.Value;
}
if (body.IsOnline.HasValue)
existingWorkshop.IsOnline = body.IsOnline.Value;
@@ -199,6 +205,8 @@ public class WorkshopsController : ControllerBase
/// <summary>Remove um workshop.</summary>
[HttpDelete("{id:guid}")]
[Authorize(Policy = "CanDeleteWorkshops")]
public async Task<IActionResult> Delete(Guid id, CancellationToken ct)
{
var workshop = await _repo.GetByIdAsync(id, ct);