mirror of
https://git.tonybark.com/tonytins/bark.api.git
synced 2026-02-10 16:24:47 -05:00
Introduced constants for API name, version, and todo route. Refactored todo endpoints to use appropriate HTTP methods (GET, POST, PUT, DELETE) and updated route paths for clarity and RESTful design. Removed duplicate and incorrect endpoint mappings.
76 lines
1.9 KiB
C#
76 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 Todo todo)
|
|
{
|
|
db.Todos.Remove(todo);
|
|
await db.SaveChangesAsync();
|
|
return Results.NoContent();
|
|
}
|
|
|
|
return Results.NotFound();
|
|
});
|
|
|
|
app.Run();
|