Files
sequence/services/csharp/example/Controllers/TodoController.cs
T
Vitalii Litvinchuk 23958e8e2c first commit
2026-06-13 23:23:50 +03:00

40 lines
1.3 KiB
C#

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<IActionResult> Create([FromBody] CreateTodoRequest request)
{
var result = await mediator.Send(new CreateTodoCommand(UserId, request.Title));
return Ok(result);
}
[HttpGet]
public async Task<IActionResult> List([FromQuery] TodoStatus? status)
{
var result = await mediator.Send(new GetTodosQuery(UserId, status));
return Ok(result);
}
[HttpPut("{id}")]
public async Task<IActionResult> 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)
};
}
}