feat: complete mealplanner app (backend + frontend + deployment)

.NET 8 backend with Zitadel JWT auth, TheMealDB integration,
weekly meal plan generation, shopping list aggregation.
Vue 3 + Tailwind 4 frontend with dark emerald theme,
manual OIDC PKCE auth, all views implemented.
Multi-stage Dockerfile with nginx reverse proxy.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-14 19:10:10 +00:00
parent 660bcd1953
commit f58782774b
51 changed files with 4061 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
namespace MealPlanner.Models;
public class CheckedShoppingItem
{
public Guid Id { get; set; }
public Guid MealPlanId { get; set; }
public string ItemName { get; set; } = "";
public string UserId { get; set; } = "";
public bool IsChecked { get; set; }
}

View File

@@ -0,0 +1,11 @@
namespace MealPlanner.Models;
public class MealPlan
{
public Guid Id { get; set; }
public string UserId { get; set; } = "";
public DateOnly WeekStart { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public List<MealPlanEntry> Entries { get; set; } = [];
}

View File

@@ -0,0 +1,12 @@
namespace MealPlanner.Models;
public class MealPlanEntry
{
public Guid Id { get; set; }
public Guid MealPlanId { get; set; }
public DateOnly Date { get; set; }
public Guid RecipeId { get; set; }
public MealPlan MealPlan { get; set; } = null!;
public Recipe Recipe { get; set; } = null!;
}

21
backend/Models/Recipe.cs Normal file
View File

@@ -0,0 +1,21 @@
namespace MealPlanner.Models;
public enum RecipeSource
{
Own,
TheMealDb
}
public class Recipe
{
public Guid Id { get; set; }
public string? UserId { get; set; }
public string? ExternalId { get; set; }
public string Title { get; set; } = "";
public string Instructions { get; set; } = "";
public string? ImageUrl { get; set; }
public RecipeSource Source { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public List<RecipeIngredient> Ingredients { get; set; } = [];
}

View File

@@ -0,0 +1,13 @@
namespace MealPlanner.Models;
public class RecipeIngredient
{
public Guid Id { get; set; }
public Guid RecipeId { get; set; }
public string Name { get; set; } = "";
public decimal? Amount { get; set; }
public string? Unit { get; set; }
public string? Category { get; set; }
public Recipe Recipe { get; set; } = null!;
}

View File

@@ -0,0 +1,10 @@
namespace MealPlanner.Models;
public class ShoppingItem
{
public string Name { get; set; } = "";
public decimal? TotalAmount { get; set; }
public string? Unit { get; set; }
public string? Category { get; set; }
public bool IsChecked { get; set; }
}

View File

@@ -0,0 +1,7 @@
namespace MealPlanner.Models;
public class UserSettings
{
public string UserId { get; set; } = "";
public int HouseholdSize { get; set; } = 2;
}