mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-07-24 15:49:42 +02:00
feat: Migrate from Tandoor (#2438)
* added tandoor migration to backend * added tandoor migration to frontend * updated tests * ignore 0 amounts * refactored ingredient display calculation * fix parsing tandoor recipes with optional data * generated frontend types * fixed inconsistent default handling and from_orm * removed unused imports
This commit is contained in:
parent
c25b58e404
commit
0f896107f9
18 changed files with 559 additions and 236 deletions
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
export type WebhookType = "mealplan";
|
||||
export type SupportedMigrations = "nextcloud" | "chowdown" | "copymethat" | "paprika" | "mealie_alpha";
|
||||
export type SupportedMigrations = "nextcloud" | "chowdown" | "copymethat" | "paprika" | "mealie_alpha" | "tandoor";
|
||||
|
||||
export interface CreateGroupPreferences {
|
||||
privateGroup?: boolean;
|
||||
|
@ -247,71 +247,43 @@ export interface SetPermissions {
|
|||
}
|
||||
export interface ShoppingListAddRecipeParams {
|
||||
recipeIncrementQuantity?: number;
|
||||
recipeIngredients?: RecipeIngredient[];
|
||||
}
|
||||
export interface ShoppingListCreate {
|
||||
name?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
}
|
||||
export interface ShoppingListItemBase {
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
export interface RecipeIngredient {
|
||||
quantity?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
}
|
||||
export interface ShoppingListItemCreate {
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
recipeReferences?: ShoppingListItemRecipeRefCreate[];
|
||||
}
|
||||
export interface ShoppingListItemRecipeRefCreate {
|
||||
recipeId: string;
|
||||
recipeQuantity?: number;
|
||||
recipeScale?: number;
|
||||
}
|
||||
export interface ShoppingListItemOut {
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
id: string;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
food?: IngredientFood;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
unit?: IngredientUnit;
|
||||
recipeReferences?: ShoppingListItemRecipeRefOut[];
|
||||
title?: string;
|
||||
originalText?: string;
|
||||
referenceId?: string;
|
||||
}
|
||||
export interface IngredientUnit {
|
||||
name: string;
|
||||
description?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
fraction?: boolean;
|
||||
abbreviation?: string;
|
||||
useAbbreviation?: boolean;
|
||||
id: string;
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
}
|
||||
export interface CreateIngredientUnit {
|
||||
name: string;
|
||||
description?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
fraction?: boolean;
|
||||
abbreviation?: string;
|
||||
useAbbreviation?: boolean;
|
||||
}
|
||||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
|
@ -330,16 +302,84 @@ export interface MultiPurposeLabelSummary {
|
|||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface IngredientUnit {
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
fraction?: boolean;
|
||||
abbreviation?: string;
|
||||
useAbbreviation?: boolean;
|
||||
labelId?: string;
|
||||
}
|
||||
export interface ShoppingListCreate {
|
||||
name?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
}
|
||||
export interface ShoppingListItemBase {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
}
|
||||
export interface ShoppingListItemCreate {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
recipeReferences?: ShoppingListItemRecipeRefCreate[];
|
||||
}
|
||||
export interface ShoppingListItemRecipeRefCreate {
|
||||
recipeId: string;
|
||||
recipeQuantity?: number;
|
||||
recipeScale?: number;
|
||||
}
|
||||
export interface ShoppingListItemOut {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit;
|
||||
food?: IngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
extras?: {
|
||||
[k: string]: unknown;
|
||||
};
|
||||
id: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
recipeReferences?: ShoppingListItemRecipeRefOut[];
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
}
|
||||
|
@ -358,12 +398,16 @@ export interface ShoppingListItemRecipeRefUpdate {
|
|||
shoppingListItemId: string;
|
||||
}
|
||||
export interface ShoppingListItemUpdate {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
|
@ -376,12 +420,16 @@ export interface ShoppingListItemUpdate {
|
|||
* Only used for bulk update operations where the shopping list item id isn't already supplied
|
||||
*/
|
||||
export interface ShoppingListItemUpdateBulk {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
foodId?: string;
|
||||
labelId?: string;
|
||||
unitId?: string;
|
||||
|
@ -512,3 +560,12 @@ export interface ShoppingListUpdate {
|
|||
id: string;
|
||||
listItems?: ShoppingListItemOut[];
|
||||
}
|
||||
export interface RecipeIngredientBase {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
}
|
||||
|
|
|
@ -178,12 +178,14 @@ export interface ParsedIngredient {
|
|||
ingredient: RecipeIngredient;
|
||||
}
|
||||
export interface RecipeIngredient {
|
||||
title?: string;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
quantity?: number;
|
||||
display?: string;
|
||||
title?: string;
|
||||
originalText?: string;
|
||||
referenceId?: string;
|
||||
}
|
||||
|
@ -303,6 +305,15 @@ export interface RecipeCommentUpdate {
|
|||
export interface RecipeDuplicate {
|
||||
name?: string;
|
||||
}
|
||||
export interface RecipeIngredientBase {
|
||||
quantity?: number;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
note?: string;
|
||||
isFood?: boolean;
|
||||
disableAmount?: boolean;
|
||||
display?: string;
|
||||
}
|
||||
export interface RecipeLastMade {
|
||||
timestamp: string;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue