@cravery/core 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/ai/recipe.d.ts +19 -1
- package/dist/types/ai/recipe.d.ts.map +1 -1
- package/dist/types/ai/recipe.js.map +1 -1
- package/dist/types/ai/translation.d.ts +9 -1
- package/dist/types/ai/translation.d.ts.map +1 -1
- package/dist/types/ai/translation.js.map +1 -1
- package/dist/types/core/asset.d.ts +7 -1
- package/dist/types/core/asset.d.ts.map +1 -1
- package/dist/types/core/asset.js.map +1 -1
- package/dist/types/core/settings.d.ts +24 -2
- package/dist/types/core/settings.d.ts.map +1 -1
- package/dist/types/core/settings.js.map +1 -1
- package/dist/types/iam/profile.d.ts +21 -2
- package/dist/types/iam/profile.d.ts.map +1 -1
- package/dist/types/iam/profile.js.map +1 -1
- package/dist/types/iam/subscription.d.ts +17 -2
- package/dist/types/iam/subscription.d.ts.map +1 -1
- package/dist/types/iam/subscription.js.map +1 -1
- package/dist/types/iam/user.d.ts +18 -1
- package/dist/types/iam/user.d.ts.map +1 -1
- package/dist/types/iam/user.js +1 -0
- package/dist/types/iam/user.js.map +1 -1
- package/dist/types/moderation/moderation.d.ts +36 -4
- package/dist/types/moderation/moderation.d.ts.map +1 -1
- package/dist/types/moderation/moderation.js.map +1 -1
- package/dist/types/recipe/equipment.d.ts +11 -3
- package/dist/types/recipe/equipment.d.ts.map +1 -1
- package/dist/types/recipe/equipment.js.map +1 -1
- package/dist/types/recipe/filters.d.ts +11 -1
- package/dist/types/recipe/filters.d.ts.map +1 -1
- package/dist/types/recipe/filters.js.map +1 -1
- package/dist/types/recipe/ingredient.d.ts +28 -6
- package/dist/types/recipe/ingredient.d.ts.map +1 -1
- package/dist/types/recipe/ingredient.js.map +1 -1
- package/dist/types/recipe/instruction.d.ts +12 -3
- package/dist/types/recipe/instruction.d.ts.map +1 -1
- package/dist/types/recipe/instruction.js.map +1 -1
- package/dist/types/recipe/nutrition.d.ts +11 -1
- package/dist/types/recipe/nutrition.d.ts.map +1 -1
- package/dist/types/recipe/nutrition.js +0 -4
- package/dist/types/recipe/nutrition.js.map +1 -1
- package/dist/types/recipe/recipe.d.ts +79 -4
- package/dist/types/recipe/recipe.d.ts.map +1 -1
- package/dist/types/recipe/recipe.js.map +1 -1
- package/dist/types/recipe/temperature.d.ts +5 -1
- package/dist/types/recipe/temperature.d.ts.map +1 -1
- package/dist/types/recipe/temperature.js.map +1 -1
- package/dist/types/report/report.d.ts +28 -2
- package/dist/types/report/report.d.ts.map +1 -1
- package/dist/types/report/report.js.map +1 -1
- package/package.json +1 -1
- package/src/types/ai/recipe.ts +30 -3
- package/src/types/ai/translation.ts +13 -2
- package/src/types/core/asset.ts +7 -1
- package/src/types/core/settings.ts +30 -4
- package/src/types/iam/profile.ts +23 -4
- package/src/types/iam/subscription.ts +20 -2
- package/src/types/iam/user.ts +16 -2
- package/src/types/moderation/moderation.ts +45 -8
- package/src/types/recipe/equipment.ts +16 -6
- package/src/types/recipe/filters.ts +17 -2
- package/src/types/recipe/ingredient.ts +39 -15
- package/src/types/recipe/instruction.ts +17 -7
- package/src/types/recipe/nutrition.ts +13 -2
- package/src/types/recipe/recipe.ts +97 -8
- package/src/types/recipe/temperature.ts +7 -3
- package/src/types/report/report.ts +33 -3
|
@@ -1,20 +1,46 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
2
|
import type { Timestamp } from "firebase-admin/firestore";
|
|
3
|
-
import { LocaleSchema } from "../core";
|
|
3
|
+
import { LocaleSchema, type Locale } from "../core";
|
|
4
4
|
import {
|
|
5
5
|
ModerationStatusSchema,
|
|
6
6
|
PrioritySchema,
|
|
7
7
|
SeveritySchema,
|
|
8
8
|
SuggestionCategorySchema,
|
|
9
|
+
type ModerationStatus,
|
|
10
|
+
type Priority,
|
|
11
|
+
type Severity,
|
|
12
|
+
type SuggestionCategory,
|
|
9
13
|
} from "./enums";
|
|
10
14
|
|
|
15
|
+
export interface ModerationSuggestion {
|
|
16
|
+
category: SuggestionCategory;
|
|
17
|
+
field: string;
|
|
18
|
+
severity: Severity;
|
|
19
|
+
suggestion: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
11
22
|
export const ModerationSuggestionSchema = z.object({
|
|
12
23
|
category: SuggestionCategorySchema,
|
|
13
24
|
field: z.string(),
|
|
14
25
|
severity: SeveritySchema,
|
|
15
26
|
suggestion: z.string(),
|
|
16
|
-
})
|
|
17
|
-
|
|
27
|
+
}) satisfies z.ZodType<ModerationSuggestion>;
|
|
28
|
+
|
|
29
|
+
export interface Moderation {
|
|
30
|
+
assessedAt?: Timestamp;
|
|
31
|
+
createdAt: Timestamp;
|
|
32
|
+
id: string;
|
|
33
|
+
originalLocale: Locale;
|
|
34
|
+
priority: Priority;
|
|
35
|
+
qualityScore?: number;
|
|
36
|
+
recipeId: string;
|
|
37
|
+
rejectionReason?: string;
|
|
38
|
+
reviewedAt?: Timestamp;
|
|
39
|
+
reviewedBy?: string;
|
|
40
|
+
status: ModerationStatus;
|
|
41
|
+
suggestions?: ModerationSuggestion[];
|
|
42
|
+
userId: string;
|
|
43
|
+
}
|
|
18
44
|
|
|
19
45
|
export const ModerationSchema = z.object({
|
|
20
46
|
assessedAt: z.custom<Timestamp>().optional(),
|
|
@@ -31,14 +57,26 @@ export const ModerationSchema = z.object({
|
|
|
31
57
|
suggestions: z.array(ModerationSuggestionSchema).optional(),
|
|
32
58
|
userId: z.string(),
|
|
33
59
|
});
|
|
34
|
-
|
|
60
|
+
|
|
61
|
+
export interface ModerateRecipeInput {
|
|
62
|
+
moderationId: string;
|
|
63
|
+
recipeId: string;
|
|
64
|
+
userId: string;
|
|
65
|
+
}
|
|
35
66
|
|
|
36
67
|
export const ModerateRecipeInputSchema = z.object({
|
|
37
68
|
moderationId: z.string(),
|
|
38
69
|
recipeId: z.string(),
|
|
39
70
|
userId: z.string(),
|
|
40
|
-
})
|
|
41
|
-
|
|
71
|
+
}) satisfies z.ZodType<ModerateRecipeInput>;
|
|
72
|
+
|
|
73
|
+
export interface ModerateRecipeOutput {
|
|
74
|
+
autoApproved: boolean;
|
|
75
|
+
autoRejected: boolean;
|
|
76
|
+
qualityScore: number;
|
|
77
|
+
rejectionReason?: string;
|
|
78
|
+
suggestions: ModerationSuggestion[];
|
|
79
|
+
}
|
|
42
80
|
|
|
43
81
|
export const ModerateRecipeOutputSchema = z.object({
|
|
44
82
|
autoApproved: z.boolean(),
|
|
@@ -46,5 +84,4 @@ export const ModerateRecipeOutputSchema = z.object({
|
|
|
46
84
|
qualityScore: z.number().min(0).max(1),
|
|
47
85
|
rejectionReason: z.string().optional(),
|
|
48
86
|
suggestions: z.array(ModerationSuggestionSchema),
|
|
49
|
-
})
|
|
50
|
-
export type ModerateRecipeOutput = z.infer<typeof ModerateRecipeOutputSchema>;
|
|
87
|
+
}) satisfies z.ZodType<ModerateRecipeOutput>;
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
2
|
import { SLUG_REGEX } from "../../config";
|
|
3
3
|
|
|
4
|
+
export interface EquipmentMeta {
|
|
5
|
+
required?: boolean;
|
|
6
|
+
slug: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
export const EquipmentMetaSchema = z.object({
|
|
5
10
|
required: z.boolean().optional(),
|
|
6
11
|
slug: z.string().regex(SLUG_REGEX),
|
|
7
|
-
})
|
|
8
|
-
|
|
12
|
+
}) satisfies z.ZodType<EquipmentMeta>;
|
|
13
|
+
|
|
14
|
+
export interface EquipmentContent {
|
|
15
|
+
name: string;
|
|
16
|
+
notes?: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
}
|
|
9
19
|
|
|
10
20
|
export const EquipmentContentSchema = z.object({
|
|
11
21
|
name: z.string().min(1).max(100),
|
|
12
22
|
notes: z.string().max(200).optional(),
|
|
13
23
|
slug: z.string().regex(SLUG_REGEX),
|
|
14
|
-
})
|
|
15
|
-
|
|
24
|
+
}) satisfies z.ZodType<EquipmentContent>;
|
|
25
|
+
|
|
26
|
+
export interface Equipment extends EquipmentMeta, EquipmentContent {}
|
|
16
27
|
|
|
17
28
|
export const EquipmentSchema = z.object({
|
|
18
29
|
...EquipmentMetaSchema.shape,
|
|
19
30
|
...EquipmentContentSchema.shape,
|
|
20
|
-
})
|
|
21
|
-
export type Equipment = z.infer<typeof EquipmentSchema>;
|
|
31
|
+
}) satisfies z.ZodType<Equipment>;
|
|
@@ -5,8 +5,24 @@ import {
|
|
|
5
5
|
DifficultySchema,
|
|
6
6
|
MealTypeSchema,
|
|
7
7
|
SpicinessSchema,
|
|
8
|
+
type Cuisine,
|
|
9
|
+
type DietaryTag,
|
|
10
|
+
type Difficulty,
|
|
11
|
+
type MealType,
|
|
12
|
+
type Spiciness,
|
|
8
13
|
} from "./enums";
|
|
9
14
|
|
|
15
|
+
export interface RecipeFilters {
|
|
16
|
+
cuisines?: Cuisine[];
|
|
17
|
+
dietaryTags?: DietaryTag[];
|
|
18
|
+
difficulty?: Difficulty;
|
|
19
|
+
excludeIngredients?: string[];
|
|
20
|
+
includeIngredients?: string[];
|
|
21
|
+
mealTypes?: MealType[];
|
|
22
|
+
spiciness?: Spiciness;
|
|
23
|
+
timeLimit?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
10
26
|
export const RecipeFiltersSchema = z.object({
|
|
11
27
|
cuisines: z.array(CuisineSchema).optional(),
|
|
12
28
|
dietaryTags: z.array(DietaryTagSchema).optional(),
|
|
@@ -16,5 +32,4 @@ export const RecipeFiltersSchema = z.object({
|
|
|
16
32
|
mealTypes: z.array(MealTypeSchema).optional(),
|
|
17
33
|
spiciness: SpicinessSchema.optional(),
|
|
18
34
|
timeLimit: z.number().int().min(5).max(300).optional(),
|
|
19
|
-
})
|
|
20
|
-
export type RecipeFilters = z.infer<typeof RecipeFiltersSchema>;
|
|
35
|
+
}) satisfies z.ZodType<RecipeFilters>;
|
|
@@ -1,46 +1,70 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
2
|
import { SLUG_REGEX } from "../../config";
|
|
3
|
-
import { UnitSchema } from "./enums";
|
|
3
|
+
import { UnitSchema, type Unit } from "./enums";
|
|
4
|
+
|
|
5
|
+
export interface IngredientMeta {
|
|
6
|
+
quantity?: number;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
slug: string;
|
|
9
|
+
unit?: Unit;
|
|
10
|
+
}
|
|
4
11
|
|
|
5
12
|
export const IngredientMetaSchema = z.object({
|
|
6
13
|
quantity: z.number().positive().optional(),
|
|
7
14
|
required: z.boolean().optional(),
|
|
8
15
|
slug: z.string().regex(SLUG_REGEX),
|
|
9
16
|
unit: UnitSchema.optional(),
|
|
10
|
-
})
|
|
11
|
-
|
|
17
|
+
}) satisfies z.ZodType<IngredientMeta>;
|
|
18
|
+
|
|
19
|
+
export interface IngredientContent {
|
|
20
|
+
name: string;
|
|
21
|
+
notes?: string;
|
|
22
|
+
slug: string;
|
|
23
|
+
}
|
|
12
24
|
|
|
13
25
|
export const IngredientContentSchema = z.object({
|
|
14
26
|
name: z.string().min(1).max(100),
|
|
15
27
|
notes: z.string().max(200).optional(),
|
|
16
28
|
slug: z.string().regex(SLUG_REGEX),
|
|
17
|
-
})
|
|
18
|
-
|
|
29
|
+
}) satisfies z.ZodType<IngredientContent>;
|
|
30
|
+
|
|
31
|
+
export interface Ingredient extends IngredientMeta, IngredientContent {}
|
|
19
32
|
|
|
20
33
|
export const IngredientSchema = z.object({
|
|
21
34
|
...IngredientMetaSchema.shape,
|
|
22
35
|
...IngredientContentSchema.shape,
|
|
23
|
-
})
|
|
24
|
-
|
|
36
|
+
}) satisfies z.ZodType<Ingredient>;
|
|
37
|
+
|
|
38
|
+
export interface IngredientSectionMeta {
|
|
39
|
+
ingredients: IngredientMeta[];
|
|
40
|
+
slug: string;
|
|
41
|
+
}
|
|
25
42
|
|
|
26
43
|
export const IngredientSectionMetaSchema = z.object({
|
|
27
44
|
ingredients: z.array(IngredientMetaSchema).min(1),
|
|
28
45
|
slug: z.string().regex(SLUG_REGEX),
|
|
29
|
-
})
|
|
30
|
-
|
|
46
|
+
}) satisfies z.ZodType<IngredientSectionMeta>;
|
|
47
|
+
|
|
48
|
+
export interface IngredientSectionContent {
|
|
49
|
+
ingredients: IngredientContent[];
|
|
50
|
+
slug: string;
|
|
51
|
+
title?: string;
|
|
52
|
+
}
|
|
31
53
|
|
|
32
54
|
export const IngredientSectionContentSchema = z.object({
|
|
33
55
|
ingredients: z.array(IngredientContentSchema).min(1),
|
|
34
56
|
slug: z.string().regex(SLUG_REGEX),
|
|
35
57
|
title: z.string().max(100).optional(),
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
58
|
+
}) satisfies z.ZodType<IngredientSectionContent>;
|
|
59
|
+
|
|
60
|
+
export interface IngredientSection {
|
|
61
|
+
ingredients: Ingredient[];
|
|
62
|
+
slug: string;
|
|
63
|
+
title?: string;
|
|
64
|
+
}
|
|
40
65
|
|
|
41
66
|
export const IngredientSectionSchema = z.object({
|
|
42
67
|
ingredients: z.array(IngredientSchema).min(1),
|
|
43
68
|
slug: z.string().regex(SLUG_REGEX),
|
|
44
69
|
title: z.string().max(100).optional(),
|
|
45
|
-
})
|
|
46
|
-
export type IngredientSection = z.infer<typeof IngredientSectionSchema>;
|
|
70
|
+
}) satisfies z.ZodType<IngredientSection>;
|
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
|
-
import { TemperatureSchema } from "./temperature";
|
|
2
|
+
import { TemperatureSchema, type Temperature } from "./temperature";
|
|
3
|
+
|
|
4
|
+
export interface InstructionMeta {
|
|
5
|
+
duration?: number;
|
|
6
|
+
step: number;
|
|
7
|
+
temperature?: Temperature;
|
|
8
|
+
}
|
|
3
9
|
|
|
4
10
|
export const InstructionMetaSchema = z.object({
|
|
5
11
|
duration: z.number().int().positive().optional(),
|
|
6
12
|
step: z.number().int().positive(),
|
|
7
13
|
temperature: TemperatureSchema.optional(),
|
|
8
|
-
})
|
|
9
|
-
|
|
14
|
+
}) satisfies z.ZodType<InstructionMeta>;
|
|
15
|
+
|
|
16
|
+
export interface InstructionContent {
|
|
17
|
+
step: number;
|
|
18
|
+
text: string;
|
|
19
|
+
}
|
|
10
20
|
|
|
11
21
|
export const InstructionContentSchema = z.object({
|
|
12
22
|
step: z.number().int().positive(),
|
|
13
23
|
text: z.string().min(1).max(1000),
|
|
14
|
-
})
|
|
15
|
-
|
|
24
|
+
}) satisfies z.ZodType<InstructionContent>;
|
|
25
|
+
|
|
26
|
+
export interface Instruction extends InstructionMeta, InstructionContent {}
|
|
16
27
|
|
|
17
28
|
export const InstructionSchema = z.object({
|
|
18
29
|
...InstructionMetaSchema.shape,
|
|
19
30
|
...InstructionContentSchema.shape,
|
|
20
|
-
})
|
|
21
|
-
export type Instruction = z.infer<typeof InstructionSchema>;
|
|
31
|
+
}) satisfies z.ZodType<Instruction>;
|
|
@@ -4,6 +4,18 @@ import { z } from "genkit";
|
|
|
4
4
|
* Nutrition data per serving.
|
|
5
5
|
* Units: calories (kcal), fat/carbs/protein/fiber/sugar (g), cholesterol/sodium (mg)
|
|
6
6
|
*/
|
|
7
|
+
export interface Nutrition {
|
|
8
|
+
calories: number;
|
|
9
|
+
carbs?: number;
|
|
10
|
+
cholesterol?: number;
|
|
11
|
+
fat?: number;
|
|
12
|
+
fiber?: number;
|
|
13
|
+
protein?: number;
|
|
14
|
+
saturatedFat?: number;
|
|
15
|
+
sodium?: number;
|
|
16
|
+
sugar?: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
7
19
|
export const NutritionSchema = z.object({
|
|
8
20
|
calories: z.number().nonnegative(),
|
|
9
21
|
carbs: z.number().nonnegative().optional(),
|
|
@@ -14,5 +26,4 @@ export const NutritionSchema = z.object({
|
|
|
14
26
|
saturatedFat: z.number().nonnegative().optional(),
|
|
15
27
|
sodium: z.number().nonnegative().optional(),
|
|
16
28
|
sugar: z.number().nonnegative().optional(),
|
|
17
|
-
})
|
|
18
|
-
export type Nutrition = z.infer<typeof NutritionSchema>;
|
|
29
|
+
}) satisfies z.ZodType<Nutrition>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
2
|
import type { Timestamp } from "firebase-admin/firestore";
|
|
3
|
-
import { LocaleSchema } from "../core";
|
|
3
|
+
import { LocaleSchema, type Locale } from "../core";
|
|
4
4
|
import {
|
|
5
5
|
AllergenSchema,
|
|
6
6
|
CuisineSchema,
|
|
@@ -10,23 +10,66 @@ import {
|
|
|
10
10
|
RecipeSourceSchema,
|
|
11
11
|
RecipeStatusSchema,
|
|
12
12
|
SpicinessSchema,
|
|
13
|
+
type Allergen,
|
|
14
|
+
type Cuisine,
|
|
15
|
+
type DietaryTag,
|
|
16
|
+
type Difficulty,
|
|
17
|
+
type MealType,
|
|
18
|
+
type RecipeSource,
|
|
19
|
+
type RecipeStatus,
|
|
20
|
+
type Spiciness,
|
|
13
21
|
} from "./enums";
|
|
14
22
|
import {
|
|
15
23
|
EquipmentContentSchema,
|
|
16
24
|
EquipmentMetaSchema,
|
|
17
25
|
EquipmentSchema,
|
|
26
|
+
type Equipment,
|
|
27
|
+
type EquipmentContent,
|
|
28
|
+
type EquipmentMeta,
|
|
18
29
|
} from "./equipment";
|
|
19
30
|
import {
|
|
20
31
|
IngredientSectionContentSchema,
|
|
21
32
|
IngredientSectionMetaSchema,
|
|
22
33
|
IngredientSectionSchema,
|
|
34
|
+
type IngredientSection,
|
|
35
|
+
type IngredientSectionContent,
|
|
36
|
+
type IngredientSectionMeta,
|
|
23
37
|
} from "./ingredient";
|
|
24
38
|
import {
|
|
25
39
|
InstructionContentSchema,
|
|
26
40
|
InstructionMetaSchema,
|
|
27
41
|
InstructionSchema,
|
|
42
|
+
type Instruction,
|
|
43
|
+
type InstructionContent,
|
|
44
|
+
type InstructionMeta,
|
|
28
45
|
} from "./instruction";
|
|
29
|
-
import { NutritionSchema } from "./nutrition";
|
|
46
|
+
import { NutritionSchema, type Nutrition } from "./nutrition";
|
|
47
|
+
|
|
48
|
+
export interface RecipeMeta {
|
|
49
|
+
allergens: Allergen[];
|
|
50
|
+
confidence: number;
|
|
51
|
+
createdAt: Timestamp;
|
|
52
|
+
createdBy: string;
|
|
53
|
+
cuisine: Cuisine;
|
|
54
|
+
deletedAt?: Timestamp;
|
|
55
|
+
dietaryTags: DietaryTag[];
|
|
56
|
+
difficulty: Difficulty;
|
|
57
|
+
equipment?: EquipmentMeta[];
|
|
58
|
+
id: string;
|
|
59
|
+
imageUrl?: string;
|
|
60
|
+
ingredientSections: IngredientSectionMeta[];
|
|
61
|
+
instructions: InstructionMeta[];
|
|
62
|
+
mealTypes: MealType[];
|
|
63
|
+
nutrition?: Nutrition;
|
|
64
|
+
originalLocale: Locale;
|
|
65
|
+
servings: number;
|
|
66
|
+
source: RecipeSource;
|
|
67
|
+
sourceUrl?: string;
|
|
68
|
+
spiciness: Spiciness;
|
|
69
|
+
status: RecipeStatus;
|
|
70
|
+
time: number;
|
|
71
|
+
updatedAt: Timestamp;
|
|
72
|
+
}
|
|
30
73
|
|
|
31
74
|
export const RecipeMetaSchema = z.object({
|
|
32
75
|
allergens: z.array(AllergenSchema),
|
|
@@ -53,7 +96,16 @@ export const RecipeMetaSchema = z.object({
|
|
|
53
96
|
time: z.number().int().min(1).max(1440),
|
|
54
97
|
updatedAt: z.custom<Timestamp>(),
|
|
55
98
|
});
|
|
56
|
-
|
|
99
|
+
|
|
100
|
+
export interface RecipeContent {
|
|
101
|
+
description: string;
|
|
102
|
+
equipment?: EquipmentContent[];
|
|
103
|
+
ingredientSections: IngredientSectionContent[];
|
|
104
|
+
instructions: InstructionContent[];
|
|
105
|
+
locale: Locale;
|
|
106
|
+
tips?: string[];
|
|
107
|
+
title: string;
|
|
108
|
+
}
|
|
57
109
|
|
|
58
110
|
export const RecipeContentSchema = z.object({
|
|
59
111
|
description: z.string().min(10).max(2000),
|
|
@@ -63,8 +115,37 @@ export const RecipeContentSchema = z.object({
|
|
|
63
115
|
locale: LocaleSchema,
|
|
64
116
|
tips: z.array(z.string().max(500)).max(20).optional(),
|
|
65
117
|
title: z.string().min(3).max(200),
|
|
66
|
-
})
|
|
67
|
-
|
|
118
|
+
}) satisfies z.ZodType<RecipeContent>;
|
|
119
|
+
|
|
120
|
+
export interface Recipe {
|
|
121
|
+
allergens: Allergen[];
|
|
122
|
+
confidence: number;
|
|
123
|
+
createdAt: Timestamp;
|
|
124
|
+
createdBy: string;
|
|
125
|
+
cuisine: Cuisine;
|
|
126
|
+
deletedAt?: Timestamp;
|
|
127
|
+
description: string;
|
|
128
|
+
dietaryTags: DietaryTag[];
|
|
129
|
+
difficulty: Difficulty;
|
|
130
|
+
equipment?: Equipment[];
|
|
131
|
+
id: string;
|
|
132
|
+
imageUrl?: string;
|
|
133
|
+
ingredientSections: IngredientSection[];
|
|
134
|
+
instructions: Instruction[];
|
|
135
|
+
locale: Locale;
|
|
136
|
+
mealTypes: MealType[];
|
|
137
|
+
nutrition?: Nutrition;
|
|
138
|
+
originalLocale: Locale;
|
|
139
|
+
servings: number;
|
|
140
|
+
source: RecipeSource;
|
|
141
|
+
sourceUrl?: string;
|
|
142
|
+
spiciness: Spiciness;
|
|
143
|
+
status: RecipeStatus;
|
|
144
|
+
time: number;
|
|
145
|
+
tips?: string[];
|
|
146
|
+
title: string;
|
|
147
|
+
updatedAt: Timestamp;
|
|
148
|
+
}
|
|
68
149
|
|
|
69
150
|
export const RecipeSchema = z.object({
|
|
70
151
|
allergens: z.array(AllergenSchema),
|
|
@@ -95,7 +176,16 @@ export const RecipeSchema = z.object({
|
|
|
95
176
|
title: z.string().min(3).max(200),
|
|
96
177
|
updatedAt: z.custom<Timestamp>(),
|
|
97
178
|
});
|
|
98
|
-
|
|
179
|
+
|
|
180
|
+
export interface RecipeStats {
|
|
181
|
+
comments: number;
|
|
182
|
+
likes: number;
|
|
183
|
+
rating: number;
|
|
184
|
+
ratingCount: number;
|
|
185
|
+
saves: number;
|
|
186
|
+
updatedAt: number;
|
|
187
|
+
views: number;
|
|
188
|
+
}
|
|
99
189
|
|
|
100
190
|
export const RecipeStatsSchema = z.object({
|
|
101
191
|
comments: z.number().int().nonnegative(),
|
|
@@ -105,5 +195,4 @@ export const RecipeStatsSchema = z.object({
|
|
|
105
195
|
saves: z.number().int().nonnegative(),
|
|
106
196
|
updatedAt: z.number().int(),
|
|
107
197
|
views: z.number().int().nonnegative(),
|
|
108
|
-
})
|
|
109
|
-
export type RecipeStats = z.infer<typeof RecipeStatsSchema>;
|
|
198
|
+
}) satisfies z.ZodType<RecipeStats>;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { z } from "genkit";
|
|
2
|
-
import { TemperatureUnitSchema } from "./enums";
|
|
2
|
+
import { TemperatureUnitSchema, type TemperatureUnit } from "./enums";
|
|
3
|
+
|
|
4
|
+
export interface Temperature {
|
|
5
|
+
unit: TemperatureUnit;
|
|
6
|
+
value: number;
|
|
7
|
+
}
|
|
3
8
|
|
|
4
9
|
export const TemperatureSchema = z.object({
|
|
5
10
|
unit: TemperatureUnitSchema,
|
|
6
11
|
value: z.number().min(-50).max(1000),
|
|
7
|
-
})
|
|
8
|
-
export type Temperature = z.infer<typeof TemperatureSchema>;
|
|
12
|
+
}) satisfies z.ZodType<Temperature>;
|
|
@@ -5,15 +5,46 @@ import {
|
|
|
5
5
|
ReportStatusSchema,
|
|
6
6
|
ReportTargetTypeSchema,
|
|
7
7
|
ReportTypeSchema,
|
|
8
|
+
type ReportPriority,
|
|
9
|
+
type ReportStatus,
|
|
10
|
+
type ReportTargetType,
|
|
11
|
+
type ReportType,
|
|
8
12
|
} from "./enums";
|
|
9
13
|
|
|
14
|
+
export interface ReportEvidence {
|
|
15
|
+
aiScore?: number;
|
|
16
|
+
aiSuggestions?: Record<string, unknown>[];
|
|
17
|
+
contentSnapshot?: string;
|
|
18
|
+
imageHashes?: string[];
|
|
19
|
+
}
|
|
20
|
+
|
|
10
21
|
export const ReportEvidenceSchema = z.object({
|
|
11
22
|
aiScore: z.number().min(0).max(1).optional(),
|
|
12
23
|
aiSuggestions: z.array(z.record(z.string(), z.unknown())).optional(),
|
|
13
24
|
contentSnapshot: z.string().optional(),
|
|
14
25
|
imageHashes: z.array(z.string()).optional(),
|
|
15
|
-
})
|
|
16
|
-
|
|
26
|
+
}) satisfies z.ZodType<ReportEvidence>;
|
|
27
|
+
|
|
28
|
+
export interface Report {
|
|
29
|
+
categories: string[];
|
|
30
|
+
createdAt: Timestamp;
|
|
31
|
+
description: string;
|
|
32
|
+
evidence?: ReportEvidence;
|
|
33
|
+
id: string;
|
|
34
|
+
notes?: string;
|
|
35
|
+
priority: ReportPriority;
|
|
36
|
+
reason: string;
|
|
37
|
+
reportedBy?: string;
|
|
38
|
+
resolution?: string;
|
|
39
|
+
reviewedAt?: Timestamp;
|
|
40
|
+
reviewedBy?: string;
|
|
41
|
+
status: ReportStatus;
|
|
42
|
+
targetId: string;
|
|
43
|
+
targetType: ReportTargetType;
|
|
44
|
+
type: ReportType;
|
|
45
|
+
updatedAt: Timestamp;
|
|
46
|
+
userId: string;
|
|
47
|
+
}
|
|
17
48
|
|
|
18
49
|
export const ReportSchema = z.object({
|
|
19
50
|
categories: z.array(z.string()),
|
|
@@ -35,4 +66,3 @@ export const ReportSchema = z.object({
|
|
|
35
66
|
updatedAt: z.custom<Timestamp>(),
|
|
36
67
|
userId: z.string(),
|
|
37
68
|
});
|
|
38
|
-
export type Report = z.infer<typeof ReportSchema>;
|