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
+25
View File
@@ -14,6 +14,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
} | null, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
findById(id: number): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
@@ -27,6 +28,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
} | null, null, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
create(data: {
username: string;
@@ -44,6 +46,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
updateProfile(id: number, data: {
firstName?: string;
@@ -61,6 +64,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
findAll(): import(".prisma/client").Prisma.PrismaPromise<{
id: number;
@@ -72,6 +76,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}[]>;
setRole(id: number, role: string): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
@@ -85,6 +90,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
setPremium(id: number, isPremium: boolean): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
@@ -98,6 +104,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
setRecipeSharing(id: number, canShareRecipes: boolean): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
@@ -111,6 +118,21 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
setAiEngineEnabled(id: number, aiEngineEnabled: boolean): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
createdAt: Date;
updatedAt: Date;
username: string;
email: string;
firstName: string | null;
lastName: string | null;
passwordHash: string;
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
adminCreate(data: {
username: string;
@@ -129,6 +151,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}>;
deleteUser(id: number): import(".prisma/client").Prisma.Prisma__UserClient<{
id: number;
@@ -142,6 +165,7 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
resetPassword(id: number): Promise<{
temporaryPassword: string;
@@ -158,5 +182,6 @@ export declare class UsersService {
role: string;
isPremium: boolean;
canShareRecipes: boolean;
aiEngineEnabled: boolean;
}, never, import("@prisma/client/runtime/library").DefaultArgs, import(".prisma/client").Prisma.PrismaClientOptions>;
}