feat: add sample data population for new users and improve exercise list layout

This commit is contained in:
2026-01-31 01:13:23 +01:00
parent e81bf53def
commit e690a649e8
2 changed files with 61 additions and 5 deletions

View File

@@ -29,6 +29,7 @@ internal static class UserProvisioning
var created = new User { Id = userId };
db.Users.Add(created);
await db.SaveChangesAsync();
await PopulateSampleDataAsync(db, created);
return created;
}
@@ -44,10 +45,63 @@ internal static class UserProvisioning
var user = new User { Id = newId };
db.Users.Add(user);
await db.SaveChangesAsync();
await PopulateSampleDataAsync(db, user);
return user;
}
}
/// <summary>
/// Populates a new user with sample exercises and routines for debugging.
/// </summary>
/// <param name="db">The application database context.</param>
/// <param name="user">The newly created user.</param>
private static async Task PopulateSampleDataAsync(AppDbContext db, User user)
{
// Sample exercises
var exercises = new[]
{
new Exercise { Name = "Push-ups", UserId = user.Id },
new Exercise { Name = "Squats", UserId = user.Id },
new Exercise { Name = "Pull-ups", UserId = user.Id },
new Exercise { Name = "Bench Press", UserId = user.Id },
new Exercise { Name = "Deadlift", UserId = user.Id }
};
db.Exercises.AddRange(exercises);
await db.SaveChangesAsync();
// Sample routines
var routine1 = new Routine { Name = "Upper Body", UserId = user.Id };
var routine2 = new Routine { Name = "Lower Body", UserId = user.Id };
db.Routines.AddRange(routine1, routine2);
await db.SaveChangesAsync();
// Associate exercises with routines
var pushUps = exercises.First(e => e.Name == "Push-ups");
var pullUps = exercises.First(e => e.Name == "Pull-ups");
var benchPress = exercises.First(e => e.Name == "Bench Press");
var squats = exercises.First(e => e.Name == "Squats");
var deadlift = exercises.First(e => e.Name == "Deadlift");
var routineExercises1 = new[]
{
new RoutineExercise { RoutineId = routine1.Id, ExerciseId = pushUps.Id, Order = 0 },
new RoutineExercise { RoutineId = routine1.Id, ExerciseId = pullUps.Id, Order = 1 },
new RoutineExercise { RoutineId = routine1.Id, ExerciseId = benchPress.Id, Order = 2 }
};
var routineExercises2 = new[]
{
new RoutineExercise { RoutineId = routine2.Id, ExerciseId = squats.Id, Order = 0 },
new RoutineExercise { RoutineId = routine2.Id, ExerciseId = deadlift.Id, Order = 1 }
};
db.RoutineExercises.AddRange(routineExercises1);
db.RoutineExercises.AddRange(routineExercises2);
await db.SaveChangesAsync();
}
/// <summary>
/// Determines whether a user id matches the expected format.
/// </summary>

View File

@@ -41,17 +41,19 @@
<div class="list">
@foreach (var exercise in ExerciseList)
{
<div class="list-item">
<div class="list-item" style="flex-direction: column; align-items: flex-start;">
@if (EditingId == exercise.Id)
{
<input class="input" @bind="EditingName" @bind:event="oninput" />
<button class="primary" @onclick="() => SaveEditAsync(exercise.Id)">Save</button>
<button class="ghost" @onclick="CancelEdit">Cancel</button>
<div class="item-actions">
<button class="primary" @onclick="() => SaveEditAsync(exercise.Id)">Save</button>
<button class="ghost" @onclick="CancelEdit">Cancel</button>
</div>
}
else
{
<div class="item-title">@exercise.Name</div>
<div class="actions">
<div class="item-title" style="text-overflow: ellipsis; white-space: nowrap; overflow: hidden; width: 100%;">@exercise.Name</div>
<div class="item-actions">
<button class="ghost" @onclick="() => StartEdit(exercise)" aria-label="Edit exercise">✏️</button>
<button class="ghost" @onclick="() => DeleteExerciseAsync(exercise.Id)" aria-label="Delete exercise">🗑️</button>
</div>