Files
Cibello-app/apps/api/package.json
T
Sven (AAMOS AI) b1b6eb994c feat(seed): import 246 verified recipes as committed seed catalog
- Convert C:\Users\Public\cibello-verified-final-result.json to
  packages/database/src/seed/data/verified-recipes.ts (committed, hermetic).
- Replace/extend the 23 placeholder SEED_RECIPES via re-export.
- Upsert on slug with onConflictDoUpdate of ALL recipe fields.
- Hard-reject recipes with unmapped canonical ingredients (0 rejected this batch).
- Derive allergens and compute nutrition per portion from ingredients at seed time.
- Run food-safety lint; auto-patch 8 legacy raw-protein recipes with safe-cooking phrase.
- Resolve 4 suspected title duplicates via variantOfSlug.
- Guard brand name: creatorDisplayName uses BRAND.name, never JSON placeholder.
- Preserve verificationStatus (editorial/verified) and source-registry FKs.
- Extend allergen-invariant test to cover full 246-recipe catalog.
- Stabilise API tests by disabling file parallelism (flakiness from shared DB state).

Refs: seed pipeline, brand-guard, safety canary
2026-08-11 00:47:08 +07:00

68 lines
1.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"name": "@app/api",
"version": "0.1.0",
"private": true,
"type": "module",
"description": "Food API enda ingången för mobilappen (spec §31, §50)",
"scripts": {
"dev": "tsx watch src/index.ts",
"start": "node dist/index.js",
"build": "tsup src/index.ts --format esm --target node22 --sourcemap --clean",
"typecheck": "tsc --noEmit",
"test": "vitest run --fileParallelism=false"
},
"dependencies": {
"@app/ai-contracts": "workspace:*",
"@app/analytics": "workspace:*",
"@app/connectors": "workspace:*",
"@app/database": "workspace:*",
"@app/events": "workspace:*",
"@app/feature-flags": "workspace:*",
"@app/inventory-engine": "workspace:*",
"@app/memory-client": "workspace:*",
"@app/nutrition-engine": "workspace:*",
"@app/recipe-engine": "workspace:*",
"@app/recommendation-engine": "workspace:*",
"@app/shared-types": "workspace:*",
"@app/subscriptions": "workspace:*",
"@app/validation": "workspace:*",
"@aws-sdk/client-s3": "^3.1102.0",
"@aws-sdk/s3-request-presigner": "^3.1102.0",
"@fastify/cors": "^11.0.0",
"@fastify/jwt": "^10.0.0",
"@fastify/rate-limit": "^10.0.0",
"bullmq": "^6.0.0",
"dotenv": "^16.4.0",
"drizzle-orm": "^0.45.0",
"fastify": "^5.6.0",
"fastify-plugin": "^5.0.0",
"ioredis": "^6.0.0",
"nodemailer": "^9.0.3",
"pg": "^8.13.0",
"zod": "^4.4.0"
},
"devDependencies": {
"@types/nodemailer": "^8.0.1",
"@types/pg": "^8.11.0",
"tsup": "^8.3.0"
},
"tsup": {
"noExternal": [
"@app/ai-contracts",
"@app/analytics",
"@app/connectors",
"@app/database",
"@app/events",
"@app/feature-flags",
"@app/inventory-engine",
"@app/memory-client",
"@app/nutrition-engine",
"@app/recipe-engine",
"@app/recommendation-engine",
"@app/shared-types",
"@app/subscriptions",
"@app/validation"
]
}
}