feat: add rematch functionality for recipe ingredients and enhance inventory management
Test Suite / test (24.15.0) (push) Has been cancelled

- Added a new API path for rematching recipe ingredients in `api_paths.dart`.
- Implemented a manual product creation dialog in `inventory_screen.dart` to allow users to create new products directly.
- Integrated the rematch functionality in `recipe_repository.dart` to handle rematching of recipe ingredients.
- Updated the recipe detail screen to include a button for triggering the rematch process.
- Introduced a new `RecipeMatchingService` in the backend to handle ingredient matching logic.
- Added database migration to include `aiEngineEnabled` column in the User table.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-05-06 09:20:31 +02:00
parent 9fe85a719c
commit 04b1fc3024
53 changed files with 1420 additions and 652 deletions
@@ -521,6 +521,29 @@ class _InventoryPreviewSectionState
extends ConsumerState<_InventoryPreviewSection> {
bool _loaded = false;
Future<void> _runRematch() async {
try {
final token = ref.read(authStateProvider).maybeWhen(
data: (t) => t,
orElse: () => null,
) ??
await ref.read(authStateProvider.future);
await ref
.read(recipeRepositoryProvider)
.rematchRecipeIngredients(widget.recipeId, token: token);
ref.invalidate(recipeAnalysisProvider(widget.recipeId));
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Matchning uppdaterad')),
);
} catch (e) {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
buildCopyableErrorSnackBar(context, mapErrorToUserMessage(e, context)),
);
}
}
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
@@ -538,6 +561,12 @@ class _InventoryPreviewSectionState
icon: const Icon(Icons.search, size: 16),
label: const Text('Kontrollera inventarie'),
),
if (_loaded)
IconButton(
tooltip: 'Kör om matchning',
icon: const Icon(Icons.auto_fix_high),
onPressed: _runRematch,
),
if (_loaded)
IconButton(
tooltip: 'Uppdatera',