@cravery/core 0.0.6 → 0.0.8

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.
Files changed (341) hide show
  1. package/dist/config/collections.d.ts +5 -0
  2. package/dist/config/collections.d.ts.map +1 -1
  3. package/dist/config/collections.js +5 -0
  4. package/dist/config/collections.js.map +1 -1
  5. package/dist/config/common.js +1 -1
  6. package/dist/config/index.d.ts +2 -0
  7. package/dist/config/index.d.ts.map +1 -1
  8. package/dist/config/index.js +2 -0
  9. package/dist/config/index.js.map +1 -1
  10. package/dist/config/limits.d.ts +8 -0
  11. package/dist/config/limits.d.ts.map +1 -0
  12. package/dist/config/limits.js +36 -0
  13. package/dist/config/limits.js.map +1 -0
  14. package/dist/config/subscription.d.ts +2 -0
  15. package/dist/config/subscription.d.ts.map +1 -0
  16. package/dist/config/subscription.js +5 -0
  17. package/dist/config/subscription.js.map +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/errors/index.d.ts +11 -2
  23. package/dist/lib/errors/index.d.ts.map +1 -1
  24. package/dist/lib/errors/index.js +31 -4
  25. package/dist/lib/errors/index.js.map +1 -1
  26. package/dist/lib/index.d.ts +1 -0
  27. package/dist/lib/index.d.ts.map +1 -1
  28. package/dist/lib/index.js +1 -0
  29. package/dist/lib/index.js.map +1 -1
  30. package/dist/lib/repository/equipment.repository.d.ts +15 -0
  31. package/dist/lib/repository/equipment.repository.d.ts.map +1 -0
  32. package/dist/lib/repository/equipment.repository.js +65 -0
  33. package/dist/lib/repository/equipment.repository.js.map +1 -0
  34. package/dist/lib/repository/factory.d.ts +10 -0
  35. package/dist/lib/repository/factory.d.ts.map +1 -1
  36. package/dist/lib/repository/factory.js +15 -0
  37. package/dist/lib/repository/factory.js.map +1 -1
  38. package/dist/lib/repository/index.d.ts +5 -0
  39. package/dist/lib/repository/index.d.ts.map +1 -1
  40. package/dist/lib/repository/index.js +5 -0
  41. package/dist/lib/repository/index.js.map +1 -1
  42. package/dist/lib/repository/ingredient.repository.d.ts +15 -0
  43. package/dist/lib/repository/ingredient.repository.d.ts.map +1 -0
  44. package/dist/lib/repository/ingredient.repository.js +65 -0
  45. package/dist/lib/repository/ingredient.repository.js.map +1 -0
  46. package/dist/lib/repository/profile.repository.d.ts +1 -1
  47. package/dist/lib/repository/profile.repository.d.ts.map +1 -1
  48. package/dist/lib/repository/profile.repository.js +1 -1
  49. package/dist/lib/repository/profile.repository.js.map +1 -1
  50. package/dist/lib/repository/recipe-queue.repository.d.ts +10 -0
  51. package/dist/lib/repository/recipe-queue.repository.d.ts.map +1 -0
  52. package/dist/lib/repository/recipe-queue.repository.js +37 -0
  53. package/dist/lib/repository/recipe-queue.repository.js.map +1 -0
  54. package/dist/lib/repository/recipe.repository.d.ts +10 -0
  55. package/dist/lib/repository/recipe.repository.d.ts.map +1 -0
  56. package/dist/lib/repository/recipe.repository.js +40 -0
  57. package/dist/lib/repository/recipe.repository.js.map +1 -0
  58. package/dist/lib/repository/report.repository.d.ts +15 -0
  59. package/dist/lib/repository/report.repository.d.ts.map +1 -0
  60. package/dist/lib/repository/report.repository.js +47 -0
  61. package/dist/lib/repository/report.repository.js.map +1 -0
  62. package/dist/lib/repository/user.repository.d.ts +1 -1
  63. package/dist/lib/repository/user.repository.d.ts.map +1 -1
  64. package/dist/lib/repository/user.repository.js +1 -1
  65. package/dist/lib/repository/user.repository.js.map +1 -1
  66. package/dist/lib/usage/index.d.ts +2 -0
  67. package/dist/lib/usage/index.d.ts.map +1 -0
  68. package/dist/lib/usage/index.js +18 -0
  69. package/dist/lib/usage/index.js.map +1 -0
  70. package/dist/lib/usage/usage.service.d.ts +28 -0
  71. package/dist/lib/usage/usage.service.d.ts.map +1 -0
  72. package/dist/lib/usage/usage.service.js +131 -0
  73. package/dist/lib/usage/usage.service.js.map +1 -0
  74. package/dist/lib/utils/index.d.ts +1 -0
  75. package/dist/lib/utils/index.d.ts.map +1 -1
  76. package/dist/lib/utils/index.js +1 -0
  77. package/dist/lib/utils/index.js.map +1 -1
  78. package/dist/lib/utils/slug.d.ts +13 -0
  79. package/dist/lib/utils/slug.d.ts.map +1 -0
  80. package/dist/lib/utils/slug.js +33 -0
  81. package/dist/lib/utils/slug.js.map +1 -0
  82. package/dist/types/ai/filters.js +1 -1
  83. package/dist/types/ai/filters.js.map +1 -1
  84. package/dist/types/ai/genkit.d.ts +246 -0
  85. package/dist/types/ai/genkit.d.ts.map +1 -0
  86. package/dist/types/ai/genkit.js +68 -0
  87. package/dist/types/ai/genkit.js.map +1 -0
  88. package/dist/types/ai/index.d.ts +1 -0
  89. package/dist/types/ai/index.d.ts.map +1 -1
  90. package/dist/types/ai/index.js +1 -0
  91. package/dist/types/ai/index.js.map +1 -1
  92. package/dist/types/ai/recipe.js +5 -5
  93. package/dist/types/ai/recipe.js.map +1 -1
  94. package/dist/types/ai/translation.js +3 -3
  95. package/dist/types/ai/translation.js.map +1 -1
  96. package/dist/types/asset.d.ts +21 -0
  97. package/dist/types/asset.d.ts.map +1 -0
  98. package/dist/types/asset.js +18 -0
  99. package/dist/types/asset.js.map +1 -0
  100. package/dist/types/enums/allergen.d.ts +19 -0
  101. package/dist/types/enums/allergen.d.ts.map +1 -0
  102. package/dist/types/enums/allergen.js +21 -0
  103. package/dist/types/enums/allergen.js.map +1 -0
  104. package/dist/types/enums/cuisine.d.ts +39 -0
  105. package/dist/types/enums/cuisine.d.ts.map +1 -0
  106. package/dist/types/enums/cuisine.js +41 -0
  107. package/dist/types/enums/cuisine.js.map +1 -0
  108. package/dist/types/enums/dietary_tag.d.ts +21 -0
  109. package/dist/types/enums/dietary_tag.d.ts.map +1 -0
  110. package/dist/types/enums/dietary_tag.js +23 -0
  111. package/dist/types/enums/dietary_tag.js.map +1 -0
  112. package/dist/types/enums/difficulty.d.ts +10 -0
  113. package/dist/types/enums/difficulty.d.ts.map +1 -0
  114. package/dist/types/enums/difficulty.js +12 -0
  115. package/dist/types/enums/difficulty.js.map +1 -0
  116. package/dist/types/enums/image_type.d.ts +8 -0
  117. package/dist/types/enums/image_type.d.ts.map +1 -0
  118. package/dist/types/enums/image_type.js +7 -0
  119. package/dist/types/enums/image_type.js.map +1 -0
  120. package/dist/types/enums/index.d.ts +22 -0
  121. package/dist/types/enums/index.d.ts.map +1 -0
  122. package/dist/types/enums/index.js +38 -0
  123. package/dist/types/enums/index.js.map +1 -0
  124. package/dist/types/enums/locale.d.ts +11 -0
  125. package/dist/types/enums/locale.d.ts.map +1 -0
  126. package/dist/types/enums/locale.js +7 -0
  127. package/dist/types/enums/locale.js.map +1 -0
  128. package/dist/types/enums/meal_type.d.ts +14 -0
  129. package/dist/types/enums/meal_type.d.ts.map +1 -0
  130. package/dist/types/enums/meal_type.js +16 -0
  131. package/dist/types/enums/meal_type.js.map +1 -0
  132. package/dist/types/enums/moderation_status.d.ts +9 -0
  133. package/dist/types/enums/moderation_status.d.ts.map +1 -0
  134. package/dist/types/enums/moderation_status.js +11 -0
  135. package/dist/types/enums/moderation_status.js.map +1 -0
  136. package/dist/types/enums/priority.d.ts +9 -0
  137. package/dist/types/enums/priority.d.ts.map +1 -0
  138. package/dist/types/enums/priority.js +7 -0
  139. package/dist/types/enums/priority.js.map +1 -0
  140. package/dist/types/enums/profile_status.d.ts +10 -0
  141. package/dist/types/enums/profile_status.d.ts.map +1 -0
  142. package/dist/types/enums/profile_status.js +12 -0
  143. package/dist/types/enums/profile_status.js.map +1 -0
  144. package/dist/types/enums/recipe_source.d.ts +10 -0
  145. package/dist/types/enums/recipe_source.d.ts.map +1 -0
  146. package/dist/types/enums/recipe_source.js +7 -0
  147. package/dist/types/enums/recipe_source.js.map +1 -0
  148. package/dist/types/enums/recipe_status.d.ts +13 -0
  149. package/dist/types/enums/recipe_status.d.ts.map +1 -0
  150. package/dist/types/enums/recipe_status.js +15 -0
  151. package/dist/types/enums/recipe_status.js.map +1 -0
  152. package/dist/types/enums/role.d.ts +11 -0
  153. package/dist/types/enums/role.d.ts.map +1 -0
  154. package/dist/types/enums/role.js +13 -0
  155. package/dist/types/enums/role.js.map +1 -0
  156. package/dist/types/enums/severity.d.ts +9 -0
  157. package/dist/types/enums/severity.d.ts.map +1 -0
  158. package/dist/types/enums/severity.js +7 -0
  159. package/dist/types/enums/severity.js.map +1 -0
  160. package/dist/types/enums/spiciness.d.ts +10 -0
  161. package/dist/types/enums/spiciness.d.ts.map +1 -0
  162. package/dist/types/enums/spiciness.js +7 -0
  163. package/dist/types/enums/spiciness.js.map +1 -0
  164. package/dist/types/enums/status.d.ts +11 -0
  165. package/dist/types/enums/status.d.ts.map +1 -0
  166. package/dist/types/enums/status.js +13 -0
  167. package/dist/types/enums/status.js.map +1 -0
  168. package/dist/types/enums/subscription_tier.d.ts +8 -0
  169. package/dist/types/enums/subscription_tier.d.ts.map +1 -0
  170. package/dist/types/enums/subscription_tier.js +6 -0
  171. package/dist/types/enums/subscription_tier.js.map +1 -0
  172. package/dist/types/enums/suggestion_category.d.ts +11 -0
  173. package/dist/types/enums/suggestion_category.d.ts.map +1 -0
  174. package/dist/types/enums/suggestion_category.js +13 -0
  175. package/dist/types/enums/suggestion_category.js.map +1 -0
  176. package/dist/types/enums/temperature_unit.d.ts +8 -0
  177. package/dist/types/enums/temperature_unit.d.ts.map +1 -0
  178. package/dist/types/enums/temperature_unit.js +7 -0
  179. package/dist/types/enums/temperature_unit.js.map +1 -0
  180. package/dist/types/enums/unit.d.ts +43 -0
  181. package/dist/types/enums/unit.d.ts.map +1 -0
  182. package/dist/types/enums/unit.js +53 -0
  183. package/dist/types/enums/unit.js.map +1 -0
  184. package/dist/types/enums/url_type.d.ts +13 -0
  185. package/dist/types/enums/url_type.d.ts.map +1 -0
  186. package/dist/types/enums/url_type.js +15 -0
  187. package/dist/types/enums/url_type.js.map +1 -0
  188. package/dist/types/enums/user_status.d.ts +10 -0
  189. package/dist/types/enums/user_status.d.ts.map +1 -0
  190. package/dist/types/enums/user_status.js +12 -0
  191. package/dist/types/enums/user_status.js.map +1 -0
  192. package/dist/types/equipment-entry.d.ts +21 -0
  193. package/dist/types/equipment-entry.d.ts.map +1 -0
  194. package/dist/types/equipment-entry.js +17 -0
  195. package/dist/types/equipment-entry.js.map +1 -0
  196. package/dist/types/global-asset.d.ts +21 -0
  197. package/dist/types/global-asset.d.ts.map +1 -0
  198. package/dist/types/global-asset.js +18 -0
  199. package/dist/types/global-asset.js.map +1 -0
  200. package/dist/types/iam/index.d.ts +4 -0
  201. package/dist/types/iam/index.d.ts.map +1 -0
  202. package/dist/types/iam/index.js +20 -0
  203. package/dist/types/iam/index.js.map +1 -0
  204. package/dist/types/iam/profile.d.ts +30 -0
  205. package/dist/types/iam/profile.d.ts.map +1 -0
  206. package/dist/types/iam/profile.js +26 -0
  207. package/dist/types/iam/profile.js.map +1 -0
  208. package/dist/types/iam/subscription.d.ts +43 -0
  209. package/dist/types/iam/subscription.d.ts.map +1 -0
  210. package/dist/types/iam/subscription.js +22 -0
  211. package/dist/types/iam/subscription.js.map +1 -0
  212. package/dist/types/iam/user.d.ts +27 -0
  213. package/dist/types/iam/user.d.ts.map +1 -0
  214. package/dist/types/iam/user.js +18 -0
  215. package/dist/types/iam/user.js.map +1 -0
  216. package/dist/types/idempotency.d.ts +32 -0
  217. package/dist/types/idempotency.d.ts.map +1 -0
  218. package/dist/types/idempotency.js +25 -0
  219. package/dist/types/idempotency.js.map +1 -0
  220. package/dist/types/index.d.ts +3 -8
  221. package/dist/types/index.d.ts.map +1 -1
  222. package/dist/types/index.js +3 -8
  223. package/dist/types/index.js.map +1 -1
  224. package/dist/types/ingredient-entry.d.ts +21 -0
  225. package/dist/types/ingredient-entry.d.ts.map +1 -0
  226. package/dist/types/ingredient-entry.js +17 -0
  227. package/dist/types/ingredient-entry.js.map +1 -0
  228. package/dist/types/moderation.d.ts +24 -17
  229. package/dist/types/moderation.d.ts.map +1 -1
  230. package/dist/types/moderation.js +9 -8
  231. package/dist/types/moderation.js.map +1 -1
  232. package/dist/types/rate-limit.d.ts +26 -0
  233. package/dist/types/rate-limit.d.ts.map +1 -0
  234. package/dist/types/rate-limit.js +22 -0
  235. package/dist/types/rate-limit.js.map +1 -0
  236. package/dist/types/recipe/equipment.d.ts +20 -0
  237. package/dist/types/recipe/equipment.d.ts.map +1 -0
  238. package/dist/types/recipe/equipment.js +16 -0
  239. package/dist/types/recipe/equipment.js.map +1 -0
  240. package/dist/types/recipe/index.d.ts +7 -0
  241. package/dist/types/recipe/index.d.ts.map +1 -0
  242. package/dist/types/recipe/index.js +23 -0
  243. package/dist/types/recipe/index.js.map +1 -0
  244. package/dist/types/recipe/ingredient.d.ts +209 -0
  245. package/dist/types/recipe/ingredient.d.ts.map +1 -0
  246. package/dist/types/recipe/ingredient.js +33 -0
  247. package/dist/types/recipe/ingredient.js.map +1 -0
  248. package/dist/types/recipe/instruction.d.ts +32 -0
  249. package/dist/types/recipe/instruction.d.ts.map +1 -0
  250. package/dist/types/recipe/instruction.js +16 -0
  251. package/dist/types/recipe/instruction.js.map +1 -0
  252. package/dist/types/recipe/nutrition.d.ts +18 -0
  253. package/dist/types/recipe/nutrition.d.ts.map +1 -0
  254. package/dist/types/recipe/nutrition.js +20 -0
  255. package/dist/types/recipe/nutrition.js.map +1 -0
  256. package/dist/types/recipe/recipe.d.ts +453 -0
  257. package/dist/types/recipe/recipe.d.ts.map +1 -0
  258. package/dist/types/recipe/recipe.js +82 -0
  259. package/dist/types/recipe/recipe.js.map +1 -0
  260. package/dist/types/recipe/temperature.d.ts +10 -0
  261. package/dist/types/recipe/temperature.d.ts.map +1 -0
  262. package/dist/types/recipe/temperature.js +10 -0
  263. package/dist/types/recipe/temperature.js.map +1 -0
  264. package/dist/types/report.d.ts +91 -0
  265. package/dist/types/report.d.ts.map +1 -0
  266. package/dist/types/report.js +61 -0
  267. package/dist/types/report.js.map +1 -0
  268. package/dist/types/settings.js +6 -6
  269. package/dist/types/settings.js.map +1 -1
  270. package/dist/types/user-recipe-ref.d.ts +29 -0
  271. package/dist/types/user-recipe-ref.d.ts.map +1 -0
  272. package/dist/types/user-recipe-ref.js +22 -0
  273. package/dist/types/user-recipe-ref.js.map +1 -0
  274. package/package.json +25 -1
  275. package/src/config/collections.ts +5 -0
  276. package/src/config/common.ts +1 -1
  277. package/src/config/index.ts +2 -0
  278. package/src/config/limits.ts +41 -0
  279. package/src/config/subscription.ts +1 -0
  280. package/src/index.ts +1 -1
  281. package/src/lib/errors/index.ts +30 -3
  282. package/src/lib/iam.ts +1 -1
  283. package/src/lib/index.ts +1 -0
  284. package/src/lib/repository/equipment.repository.ts +93 -0
  285. package/src/lib/repository/factory.ts +15 -0
  286. package/src/lib/repository/index.ts +5 -0
  287. package/src/lib/repository/ingredient.repository.ts +93 -0
  288. package/src/lib/repository/profile.repository.ts +2 -2
  289. package/src/lib/repository/recipe-queue.repository.ts +49 -0
  290. package/src/lib/repository/recipe.repository.ts +51 -0
  291. package/src/lib/repository/report.repository.ts +79 -0
  292. package/src/lib/repository/user.repository.ts +2 -2
  293. package/src/lib/usage/index.ts +1 -0
  294. package/src/lib/usage/usage.service.ts +187 -0
  295. package/src/lib/utils/index.ts +1 -0
  296. package/src/lib/utils/slug.ts +33 -0
  297. package/src/types/ai/filters.ts +1 -1
  298. package/src/types/ai/genkit.ts +77 -0
  299. package/src/types/ai/index.ts +1 -0
  300. package/src/types/ai/recipe.ts +5 -5
  301. package/src/types/ai/translation.ts +3 -3
  302. package/src/types/asset.ts +19 -0
  303. package/src/{enums → types/enums}/recipe_status.ts +3 -0
  304. package/src/types/iam/index.ts +3 -0
  305. package/src/types/{profile.ts → iam/profile.ts} +1 -1
  306. package/src/types/iam/subscription.ts +23 -0
  307. package/src/types/{user.ts → iam/user.ts} +2 -1
  308. package/src/types/index.ts +3 -8
  309. package/src/types/moderation.ts +11 -9
  310. package/src/types/{equipment.ts → recipe/equipment.ts} +1 -1
  311. package/src/types/recipe/index.ts +6 -0
  312. package/src/types/{ingredient.ts → recipe/ingredient.ts} +1 -1
  313. package/src/types/{recipe.ts → recipe/recipe.ts} +7 -7
  314. package/src/types/report.ts +70 -0
  315. package/src/types/settings.ts +7 -7
  316. package/src/types/subscription.ts +0 -13
  317. /package/src/{enums → types/enums}/allergen.ts +0 -0
  318. /package/src/{enums → types/enums}/cuisine.ts +0 -0
  319. /package/src/{enums → types/enums}/dietary_tag.ts +0 -0
  320. /package/src/{enums → types/enums}/difficulty.ts +0 -0
  321. /package/src/{enums → types/enums}/image_type.ts +0 -0
  322. /package/src/{enums → types/enums}/index.ts +0 -0
  323. /package/src/{enums → types/enums}/locale.ts +0 -0
  324. /package/src/{enums → types/enums}/meal_type.ts +0 -0
  325. /package/src/{enums → types/enums}/moderation_status.ts +0 -0
  326. /package/src/{enums → types/enums}/priority.ts +0 -0
  327. /package/src/{enums → types/enums}/profile_status.ts +0 -0
  328. /package/src/{enums → types/enums}/recipe_source.ts +0 -0
  329. /package/src/{enums → types/enums}/role.ts +0 -0
  330. /package/src/{enums → types/enums}/severity.ts +0 -0
  331. /package/src/{enums → types/enums}/spiciness.ts +0 -0
  332. /package/src/{enums → types/enums}/status.ts +0 -0
  333. /package/src/{enums → types/enums}/subscription_tier.ts +0 -0
  334. /package/src/{enums → types/enums}/suggestion_category.ts +0 -0
  335. /package/src/{enums → types/enums}/temperature_unit.ts +0 -0
  336. /package/src/{enums → types/enums}/unit.ts +0 -0
  337. /package/src/{enums → types/enums}/url_type.ts +0 -0
  338. /package/src/{enums → types/enums}/user_status.ts +0 -0
  339. /package/src/types/{instruction.ts → recipe/instruction.ts} +0 -0
  340. /package/src/types/{nutrition.ts → recipe/nutrition.ts} +0 -0
  341. /package/src/types/{temperature.ts → recipe/temperature.ts} +0 -0
@@ -1,11 +1,12 @@
1
1
  import { z } from "zod";
2
- import { Timestamp } from "firebase-admin/firestore";
2
+ import type { Timestamp } from "firebase-admin/firestore";
3
3
  import {
4
+ LocaleSchema,
4
5
  ModerationStatusSchema,
5
6
  PrioritySchema,
6
7
  SeveritySchema,
7
8
  SuggestionCategorySchema,
8
- } from "../enums";
9
+ } from "./enums";
9
10
 
10
11
  export const ModerationSuggestionSchema = z.object({
11
12
  category: SuggestionCategorySchema,
@@ -16,18 +17,19 @@ export const ModerationSuggestionSchema = z.object({
16
17
  export type ModerationSuggestion = z.infer<typeof ModerationSuggestionSchema>;
17
18
 
18
19
  export const ModerationSchema = z.object({
20
+ aiSuggestions: z.array(ModerationSuggestionSchema).optional(),
21
+ assessedAt: z.custom<Timestamp>().optional(),
22
+ createdAt: z.custom<Timestamp>(),
19
23
  id: z.string(),
20
- recipeId: z.string(),
21
- userId: z.string(),
22
- status: ModerationStatusSchema,
24
+ originalLocale: LocaleSchema,
23
25
  priority: PrioritySchema,
24
26
  qualityScore: z.number().min(0).max(1).optional(),
25
- aiSuggestions: z.array(ModerationSuggestionSchema).optional(),
27
+ recipeId: z.string(),
26
28
  rejectionReason: z.string().optional(),
27
- createdAt: z.custom<Timestamp>(),
28
- assessedAt: z.custom<Timestamp>().optional(),
29
- reviewedBy: z.string().optional(),
30
29
  reviewedAt: z.custom<Timestamp>().optional(),
30
+ reviewedBy: z.string().optional(),
31
+ status: ModerationStatusSchema,
32
+ userId: z.string(),
31
33
  });
32
34
  export type Moderation = z.infer<typeof ModerationSchema>;
33
35
 
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { SlugRegex } from "../config";
2
+ import { SlugRegex } from "../../config";
3
3
 
4
4
  export const EquipmentMetaSchema = z.object({
5
5
  required: z.boolean().optional(),
@@ -0,0 +1,6 @@
1
+ export * from "./equipment";
2
+ export * from "./ingredient";
3
+ export * from "./instruction";
4
+ export * from "./nutrition";
5
+ export * from "./recipe";
6
+ export * from "./temperature";
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { SlugRegex } from "../config";
2
+ import { SlugRegex } from "../../config";
3
3
  import { UnitSchema } from "../enums";
4
4
 
5
5
  export const IngredientMetaSchema = z.object({
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { Timestamp } from "firebase-admin/firestore";
2
+ import type { Timestamp } from "firebase-admin/firestore";
3
3
  import {
4
4
  AllergenSchema,
5
5
  CuisineSchema,
@@ -37,11 +37,11 @@ export const RecipeMetaSchema = z.object({
37
37
  deletedAt: z.custom<Timestamp>().optional(),
38
38
  dietaryTags: z.array(DietaryTagSchema),
39
39
  difficulty: DifficultySchema,
40
- equipment: z.array(EquipmentMetaSchema).optional(),
40
+ equipment: z.array(EquipmentMetaSchema).max(30).optional(),
41
41
  id: z.string(),
42
42
  imageUrl: z.string().optional(),
43
- ingredientSections: z.array(IngredientSectionMetaSchema).min(1),
44
- instructions: z.array(InstructionMetaSchema).min(1),
43
+ ingredientSections: z.array(IngredientSectionMetaSchema).min(1).max(20),
44
+ instructions: z.array(InstructionMetaSchema).min(1).max(100),
45
45
  mealTypes: z.array(MealTypeSchema).min(1),
46
46
  nutrition: NutritionSchema.optional(),
47
47
  originalLocale: LocaleSchema,
@@ -58,10 +58,10 @@ export type RecipeMeta = z.infer<typeof RecipeMetaSchema>;
58
58
  export const RecipeContentSchema = z.object({
59
59
  description: z.string().min(10).max(2000),
60
60
  equipment: z.array(EquipmentContentSchema).optional(),
61
- ingredientSections: z.array(IngredientSectionContentSchema).min(1),
62
- instructions: z.array(InstructionContentSchema).min(1),
61
+ ingredientSections: z.array(IngredientSectionContentSchema).min(1).max(20),
62
+ instructions: z.array(InstructionContentSchema).min(1).max(100),
63
63
  locale: LocaleSchema,
64
- tips: z.array(z.string().max(500)).optional(),
64
+ tips: z.array(z.string().max(500)).max(20).optional(),
65
65
  title: z.string().min(3).max(200),
66
66
  });
67
67
  export type RecipeContent = z.infer<typeof RecipeContentSchema>;
@@ -0,0 +1,70 @@
1
+ import { z } from "zod";
2
+ import type { Timestamp } from "firebase-admin/firestore";
3
+
4
+ export const REPORT_TYPE_VALUES = [
5
+ "auto_rejected",
6
+ "manual_rejected",
7
+ "repeated_violations",
8
+ "unsafe_generated",
9
+ "unsafe_upload",
10
+ "user_report",
11
+ ] as const;
12
+ export const ReportTypeSchema = z.enum(REPORT_TYPE_VALUES);
13
+ export type ReportType = (typeof REPORT_TYPE_VALUES)[number];
14
+
15
+ export const REPORT_STATUS_VALUES = [
16
+ "escalated",
17
+ "pending",
18
+ "resolved",
19
+ "reviewed",
20
+ ] as const;
21
+ export const ReportStatusSchema = z.enum(REPORT_STATUS_VALUES);
22
+ export type ReportStatus = (typeof REPORT_STATUS_VALUES)[number];
23
+
24
+ export const REPORT_PRIORITY_VALUES = [
25
+ "critical",
26
+ "high",
27
+ "low",
28
+ "medium",
29
+ ] as const;
30
+ export const ReportPrioritySchema = z.enum(REPORT_PRIORITY_VALUES);
31
+ export type ReportPriority = (typeof REPORT_PRIORITY_VALUES)[number];
32
+
33
+ export const REPORT_TARGET_TYPE_VALUES = [
34
+ "image",
35
+ "profile",
36
+ "recipe",
37
+ "user",
38
+ ] as const;
39
+ export const ReportTargetTypeSchema = z.enum(REPORT_TARGET_TYPE_VALUES);
40
+ export type ReportTargetType = (typeof REPORT_TARGET_TYPE_VALUES)[number];
41
+
42
+ export const ReportEvidenceSchema = z.object({
43
+ aiScore: z.number().min(0).max(1).optional(),
44
+ aiSuggestions: z.array(z.record(z.string(), z.unknown())).optional(),
45
+ contentSnapshot: z.string().optional(),
46
+ imageHashes: z.array(z.string()).optional(),
47
+ });
48
+ export type ReportEvidence = z.infer<typeof ReportEvidenceSchema>;
49
+
50
+ export const ReportSchema = z.object({
51
+ categories: z.array(z.string()),
52
+ createdAt: z.custom<Timestamp>(),
53
+ description: z.string(),
54
+ evidence: ReportEvidenceSchema.optional(),
55
+ id: z.string(),
56
+ notes: z.string().optional(),
57
+ priority: ReportPrioritySchema,
58
+ reason: z.string(),
59
+ reportedBy: z.string().optional(),
60
+ resolution: z.string().optional(),
61
+ reviewedAt: z.custom<Timestamp>().optional(),
62
+ reviewedBy: z.string().optional(),
63
+ status: ReportStatusSchema,
64
+ targetId: z.string(),
65
+ targetType: ReportTargetTypeSchema,
66
+ type: ReportTypeSchema,
67
+ updatedAt: z.custom<Timestamp>(),
68
+ userId: z.string(),
69
+ });
70
+ export type Report = z.infer<typeof ReportSchema>;
@@ -1,11 +1,11 @@
1
1
  import { z } from "zod";
2
- import { Timestamp } from "firebase-admin/firestore";
3
- import { AllergenSchema } from "../enums/allergen";
4
- import { DietaryTagSchema } from "../enums/dietary_tag";
5
- import { CuisineSchema } from "../enums/cuisine";
6
- import { SpicinessSchema } from "../enums/spiciness";
7
- import { LocaleSchema } from "../enums/locale";
8
- import { TemperatureUnitSchema } from "../enums/temperature_unit";
2
+ import type { Timestamp } from "firebase-admin/firestore";
3
+ import { AllergenSchema } from "./enums/allergen";
4
+ import { DietaryTagSchema } from "./enums/dietary_tag";
5
+ import { CuisineSchema } from "./enums/cuisine";
6
+ import { SpicinessSchema } from "./enums/spiciness";
7
+ import { LocaleSchema } from "./enums/locale";
8
+ import { TemperatureUnitSchema } from "./enums/temperature_unit";
9
9
 
10
10
  export const MEASUREMENT_SYSTEM_VALUES = ["metric", "imperial"] as const;
11
11
  export const MeasurementSystemSchema = z.enum(MEASUREMENT_SYSTEM_VALUES);
@@ -1,13 +0,0 @@
1
- import { z } from "zod";
2
- import { Timestamp } from "firebase-admin/firestore";
3
- import { SubscriptionTierSchema } from "../enums";
4
-
5
- export const SubscriptionSchema = z.object({
6
- expiresAt: z.custom<Timestamp>(),
7
- familyMembers: z.array(z.string()).max(3).optional(),
8
- id: z.string(),
9
- revenuecatId: z.string(),
10
- tier: SubscriptionTierSchema,
11
- updatedAt: z.custom<Timestamp>(),
12
- });
13
- export type Subscription = z.infer<typeof SubscriptionSchema>;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes