瀏覽代碼

Refactor Ingredients model: Add measure, improve units, remove repetitive data

Tatiana Inama 7 年之前
父節點
當前提交
877f009232
共有 3 個文件被更改,包括 169 次插入220 次删除
  1. 2 208
      ktchn/src/ingredients/controller.ts
  2. 143 0
      ktchn/src/ingredients/data.ts
  3. 24 12
      ktchn/src/ingredients/model.ts

+ 2 - 208
ktchn/src/ingredients/controller.ts

@@ -1,216 +1,10 @@
 import { Ingredient } from './model';
 import { IMongoService } from '../mongo';
 import { Request, Response, NextFunction } from 'express';
+import data from './data';
 
 const create = (db: IMongoService) => (req: Request, res: Response, next: NextFunction) => {
-  const ingredients: Ingredient[] = [{
-    name: 'all purpose flour',
-    variants: ['plain flour', 'all purpose flour', 'regular flour'],
-    equivalences: {
-      cup: 1,
-      gr: 125,
-      tbsp: 15.5,
-      tsp: 47,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-    translation: {
-      dutch: 'patentbloem'
-    }
-  }, {
-    name: 'bread flour',
-    variants: ['bread flour'],
-    equivalences: {
-      cup: 1,
-      gr: 127,
-      tbsp: 12.7,
-      tsp: 38.1,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-    translation: {
-      dutch: 'tarwebloem'
-    }
-  }, {
-    name: 'pastry flour',
-    variants: ['pastry flour'],
-    equivalences: {
-      cup: 1,
-      gr: 114,
-      tbsp: 16.8,
-      tsp: 50.6,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-    translation: {
-      dutch: 'zeeuwsebloem'
-    }
-  }, {
-    name: 'almond flour',
-    equivalences: {
-      cup: 1,
-      gr: 96,
-      tbsp: 16,
-      tsp: 48,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'cornflour',
-    equivalences: {
-      cup: 1,
-      gr: 150,
-      tbsp: 16,
-      tsp: 48,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'self raising flour',
-    equivalences: {
-      cup: 1,
-      gr: 125,
-      tbsp: 15.6,
-      tsp: 47,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'honey',
-    equivalences: {
-      cup: 1,
-      gr: 340,
-      oz: 12,
-      tbsp: 16,
-      tsp: 48,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'semolina',
-    equivalences: {
-      cup: 1,
-      gr: 167,
-      oz: 5.9,
-      lb: 0.37,
-      tbsp: 16,
-      tsp: 50,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'long rice',
-    equivalences: {
-      cup: 1,
-      gr: 185,
-      oz: 6.5,
-      lb: 0.44
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'short rice',
-    variants: ['sushi rice'],
-    equivalences: {
-      cup: 1,
-      gr: 200,
-      oz: 7.05,
-      lb: 0.44,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'basmati rice',
-    equivalences: {
-      cup: 1,
-      gr: 195,
-      oz: 6.88,
-      lb: 0.43,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'granulated sugar',
-    variants: ['sugar', 'plain sugar'],
-    equivalences: {
-      cup: 1,
-      gr: 200,
-      oz: 7.1,
-      tbsp: 14,
-      tsp: 42,
-      lb: 0.4
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'icing sugar',
-    variants: ['confectioner sugar', 'powdered sugar'],
-    equivalences: {
-      cup: 1,
-      gr: 125,
-      oz: 0.27,
-      tbsp: 15,
-      tsp: 45,
-      lb: 0.27
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'caster sugar',
-    variants: ['fine sugar'],
-    equivalences: {
-      cup: 1,
-      gr: 225,
-      oz: 7.9,
-      tbsp: 15,
-      tsp: 5,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'brown sugar',
-    equivalences: {
-      cup: 1,
-      gr: 200,
-      oz: 7.05,
-      lb: 0.44,
-      tbsp: 14,
-      tsp: 42,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'yeast',
-    equivalences: {
-      gr: 2.83,
-      tsp: 1,
-    },
-    referenceUnit: 'tsp',
-    prefferedUnit: 'gr',
-  }, {
-    name: 'yogurt',
-    variants: ['plain yogurt'],
-    equivalences: {
-      cup: 1,
-      gr: 245,
-      oz: 8.64,
-      tbsp: 16,
-      tsp: 48,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  },  {
-    name: 'cocoa powder',
-    variants: ['cocoa'],
-    equivalences: {
-      cup: 1,
-      gr: 118,
-      tbsp: 16,
-      tsp: 48,
-    },
-    referenceUnit: 'cup',
-    prefferedUnit: 'gr',
-  }];
+  const ingredients = data;
 
   return db.insertMany(ingredients)
     .then(dbIngredient => res.json(dbIngredient))

+ 143 - 0
ktchn/src/ingredients/data.ts

@@ -0,0 +1,143 @@
+import Ingredient from "./model";
+
+const data: Ingredient[] = [{
+  name: 'all purpose flour',
+  variants: ['plain flour', 'all purpose flour', 'regular flour'],
+  equivalence: 125,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  translation: {
+    dutch: 'patentbloem'
+  },
+  measure: 0
+}, {
+  name: 'bread flour',
+  variants: ['bread flour'],
+  equivalence: 127,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  translation: {
+    dutch: 'tarwebloem'
+  },
+  measure: 0
+}, {
+  name: 'pastry flour',
+  variants: ['pastry flour'],
+  equivalence: 114,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  translation: {
+    dutch: 'zeeuwsebloem'
+  },
+  measure: 0
+}, {
+  name: 'almond flour',
+  equivalence: 96,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'cornflour',
+  equivalence: 150,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'self raising flour',
+  equivalence: 125,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'honey',
+  equivalence: 340,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'semolina',
+  equivalence: 167,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'long rice',
+  equivalence: 185,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'short rice',
+  variants: ['sushi rice'],
+  equivalence: 200,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'basmati rice',
+  equivalence: 195,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'granulated sugar',
+  variants: ['sugar', 'plain sugar'],
+  equivalence: 200,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'icing sugar',
+  variants: ['confectioner sugar', 'powdered sugar'],
+  equivalence: 125,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'caster sugar',
+  variants: ['fine sugar'],
+  equivalence: 225,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'brown sugar',
+  equivalence: 200,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'yeast',
+  equivalence: 2.83,
+  referenceUnit: 'tsp',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'yogurt',
+  variants: ['plain yogurt'],
+  equivalence: 245,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 2
+},  {
+  name: 'cocoa powder',
+  variants: ['cocoa'],
+  equivalence: 118,
+  referenceUnit: 'cup',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'chicken breast',
+  variants: ['chicken', 'skinless chicken'],
+  referenceUnit: 'lb',
+  prefferedUnit: 'gr',
+  measure: 0
+}, {
+  name: 'olive oil',
+  variants: [],
+  referenceUnit: 'tbsp',
+  prefferedUnit: 'tbsp',
+  measure: 1
+}];
+
+export default data;

+ 24 - 12
ktchn/src/ingredients/model.ts

@@ -1,23 +1,35 @@
 import  { ObjectID } from 'mongodb';
 
-type Equivalences = {
-  cup?: number,
-  tbsp?: number,
-  tsp?: number,
-  stick?: number,
-  gr?: number,
-  ml?: number,
-  oz?: number,
-  lb?: number,
+enum Measures {
+  mass,
+  volume,
+  hybrid,
 };
 
+type Units = 
+  "cup" |
+  "tbsp" |
+  "tsp" |
+  "stick" |
+  "gr" |
+  "ml" |
+  "oz" |
+  "lb" |
+  "pint" |
+  "gal" |
+  "unit" |
+  "pinch" |
+  "to taste"
+;
+
 export interface Ingredient {
   _id?: ObjectID,
   name: string,
   variants?: string[],
-  equivalences: Equivalences,
-  prefferedUnit: keyof Equivalences,
-  referenceUnit: keyof Equivalences,
+  equivalence?: number,
+  prefferedUnit: Units,
+  referenceUnit: Units,
+  measure: Measures,
   translation?: {
     english?: string,
     dutch?: string,