bark.api/Program.cs
Tony Bark 45dff673f8 Fix todo route paths and simplify delete logic
Added leading slashes to todo route paths. Updated the Created result path in the POST endpoint. Simplified the DELETE endpoint logic by inverting the not-found check and reducing nesting.
2025-12-06 21:13:37 -05:00

73 lines
1.9 KiB
C#

var builder = WebApplication.CreateBuilder(args);
const string API_NAME = "BarkAPI";
const string VERSION = "v1";
const string TODO = "todo";
builder.Services.AddDbContext<TodoDb>(opt => opt.UseInMemoryDatabase("TodoDb"));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddOpenApiDocument(cfg =>
{
cfg.DocumentName = API_NAME;
cfg.Title = $"{API_NAME} {VERSION}";
cfg.Version = VERSION;
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseOpenApi();
app.UseSwaggerUi(cfg =>
{
cfg.DocumentTitle = API_NAME;
cfg.Path = "/swagger";
cfg.DocumentPath = "/swagger/{documentName}/swagger.json}";
cfg.DocExpansion = "list";
});
}
app.MapGet("/", () => "Bark Online");
app.MapGet($"/{TODO}", async (TodoDb db)
=> await db.Todos.ToListAsync());
app.MapGet($"/{TODO}/complete", async (TodoDb db)
=> await db.Todos.Where(t => t.IsCompleted).ToListAsync());
app.MapGet("/todo/{id}", async (int id, TodoDb db) =>
await db.Todos.FindAsync(id) is Todo todo ? Results.Ok() : Results.NotFound());
app.MapPost($"{TODO}", async (Todo todo, TodoDb db)
=>
{
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/{TODO}/{todo.Id}", todo);
});
app.MapPut("/todo/{id}", async (int id, Todo input, TodoDb db) =>
{
var todo = await db.Todos.FindAsync(id);
if (todo is null) return Results.NotFound();
todo.Name = input.Name;
todo.IsCompleted = input.IsCompleted;
await db.SaveChangesAsync();
return Results.NoContent();
});
app.MapDelete("/todo/{id}", async (int id, TodoDb db) =>
{
if (await db.Todos.FindAsync(id) is not Todo todo) return Results.NotFound();
db.Todos.Remove(todo);
await db.SaveChangesAsync();
return Results.NoContent();
});
app.Run();