Files
fitness-app/apps/api/Program.cs
T
robre c90426ebfd
Deploy Fitness App / deploy (push) Successful in 1m6s
Fix: DB-Pfad auf /app/data/fitness.db korrigiert
2026-05-09 23:15:56 +02:00

86 lines
2.5 KiB
C#

using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Datenbank-Pfad: /app/data im Container (Volume) - überlebt Container-Neustarts!
var dbPath = Path.Combine("/app/data", "fitness.db");
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlite($"Data Source={dbPath}"));
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddOpenApiDocument();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Datenbank automatisch erstellen, falls sie nicht existiert
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
db.Database.EnsureCreated();
}
if (app.Environment.IsDevelopment())
{
app.UseOpenApi();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
// ===================================================================
// CRUD ENDPUNKTE (minimal, ohne Auth)
// ===================================================================
// CREATE
app.MapPost("/api/workouts", async (Workout workout, AppDbContext db) =>
{
workout.Id = Guid.NewGuid();
db.Workouts.Add(workout);
await db.SaveChangesAsync();
return Results.Created($"/api/workouts/{workout.Id}", workout);
});
// READ ALL
app.MapGet("/api/workouts", async (AppDbContext db) =>
await db.Workouts.OrderByDescending(w => w.Date).ToListAsync());
// READ BY ID
app.MapGet("/api/workouts/{id:guid}", async (Guid id, AppDbContext db) =>
await db.Workouts.FindAsync(id) is Workout w ? Results.Ok(w) : Results.NotFound());
// UPDATE
app.MapPut("/api/workouts/{id:guid}", async (Guid id, Workout input, AppDbContext db) =>
{
var workout = await db.Workouts.FindAsync(id);
if (workout is null) return Results.NotFound();
workout.Name = input.Name;
workout.Date = input.Date;
workout.DurationMinutes = input.DurationMinutes;
workout.Notes = input.Notes;
await db.SaveChangesAsync();
return Results.Ok(workout);
});
// DELETE
app.MapDelete("/api/workouts/{id:guid}", async (Guid id, AppDbContext db) =>
{
var workout = await db.Workouts.FindAsync(id);
if (workout is null) return Results.NotFound();
db.Workouts.Remove(workout);
await db.SaveChangesAsync();
return Results.NoContent();
});
app.MapGet("/", () => "🏋️ Fitness API läuft!");
app.Run();
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<Workout> Workouts => Set<Workout>();
}