using MediatR; using Microsoft.AspNetCore.Mvc; using SequenceAuth.Example.Domain; using SequenceAuth.Example.Features.Todos; namespace SequenceAuth.Example.Controllers; public class TodoController(IMediator mediator) : ApiControllerBase { public record CreateTodoRequest(string Title); [HttpPost] public async Task Create([FromBody] CreateTodoRequest request) { var result = await mediator.Send(new CreateTodoCommand(UserId, request.Title)); return Ok(result); } [HttpGet] public async Task List([FromQuery] TodoStatus? status) { var result = await mediator.Send(new GetTodosQuery(UserId, status)); return Ok(result); } [HttpPut("{id}")] public async Task ChangeStatus(Guid id, [FromQuery] TodoStatus status) { var result = await mediator.Send(new ChangeTodoStatusCommand(id, UserId, status)); return result.Outcome switch { ChangeTodoStatusOutcome.Success => Ok(result.Item), ChangeTodoStatusOutcome.NotFound => NotFound(), ChangeTodoStatusOutcome.Unauthorized => StatusCode(403), // No identity claims for Forbid() without auth scheme _ => StatusCode(500) }; } }