var builder = WebApplication.CreateBuilder(args); const string API_NAME = "BarkAPI"; const string VERSION = "v1"; const string TODO = "todo"; builder.Services.AddDbContext(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();