feat: slim meal_diary — derive name and nutrition from dish/recipe
Remove denormalized columns (name, calories, protein_g, fat_g, carbs_g) from meal_diary. Name is now resolved via JOIN with dishes/dish_translations; macros are computed as recipe.*_per_serving * portions at query time. - Add dish.Repository.FindOrCreateRecipe: finds or creates a minimal recipe stub seeded with AI-estimated macros - recognition/handler: resolve recipe_id synchronously per candidate; simplify enrichDishInBackground to translations-only - diary/handler: accept dish_id OR name; always resolve recipe_id via FindOrCreateRecipe before INSERT - diary/entity: DishID is now non-nullable string; CreateRequest drops macros - diary/repository: ListByDate and Create use JOIN to return computed macros - ai/types: add RecipeID field to DishCandidate - Update tests and wire_gen accordingly Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,6 @@ import '../../features/products/add_product_screen.dart';
|
||||
import '../../features/scan/scan_screen.dart';
|
||||
import '../../features/scan/recognition_confirm_screen.dart';
|
||||
import '../../features/scan/recognition_service.dart';
|
||||
import '../../features/menu/diary_screen.dart';
|
||||
import '../../features/menu/menu_screen.dart';
|
||||
import '../../features/menu/shopping_list_screen.dart';
|
||||
import '../../features/recipes/recipe_detail_screen.dart';
|
||||
@@ -129,14 +128,6 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
return ShoppingListScreen(week: week);
|
||||
},
|
||||
),
|
||||
// Diary — full-screen, no bottom nav.
|
||||
GoRoute(
|
||||
path: '/menu/diary',
|
||||
builder: (context, state) {
|
||||
final date = state.extra as String? ?? '';
|
||||
return DiaryScreen(date: date);
|
||||
},
|
||||
),
|
||||
// Scan / recognition flow — all without bottom nav.
|
||||
GoRoute(
|
||||
path: '/scan',
|
||||
|
||||
Reference in New Issue
Block a user