mirror of
https://git.tonybark.com/tonytins/bark.api.git
synced 2026-02-10 08:14:47 -05:00
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.
73 lines
1.9 KiB
C#
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();
|