@jclind/ingredient-parser 1.0.2 → 1.0.4
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/api/http.js +14 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/requests.js +40 -0
- package/dist/api/requests.js.map +1 -0
- package/dist/funcs/getIngredientInfo.js +16 -0
- package/dist/funcs/getIngredientInfo.js.map +1 -0
- package/dist/funcs/getSpoonacularIngrData.js +16 -0
- package/dist/funcs/getSpoonacularIngrData.js.map +1 -0
- package/dist/funcs/ingredientParser.js +38 -0
- package/dist/funcs/ingredientParser.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/types/types.js +2 -0
- package/dist/types/types.js.map +1 -0
- package/package.json +12 -5
- package/http-common.ts +0 -16
- package/index.js +0 -87
package/dist/api/http.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
export const mongoHttp = axios.create({
|
|
3
|
+
baseURL: 'https://us-east-1.aws.data.mongodb-api.com/app/prepify-ixumn/endpoint',
|
|
4
|
+
headers: {
|
|
5
|
+
'Content-type': 'application/json',
|
|
6
|
+
},
|
|
7
|
+
});
|
|
8
|
+
export const spoonacularHttp = axios.create({
|
|
9
|
+
baseURL: 'https://api.spoonacular.com/food/ingredients/',
|
|
10
|
+
headers: {
|
|
11
|
+
'Content-type': 'application/json',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IACpC,OAAO,EACL,uEAAuE;IACzE,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,+CAA+C;IACxD,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { mongoHttp, spoonacularHttp } from './http.js';
|
|
2
|
+
export const checkIngredient = async (name) => {
|
|
3
|
+
return await mongoHttp.get(`checkIngredient?name=${name}`);
|
|
4
|
+
};
|
|
5
|
+
export const searchIngredient = async (name, spoonacularAPIKey) => {
|
|
6
|
+
let searchedIngr;
|
|
7
|
+
try {
|
|
8
|
+
searchedIngr = await spoonacularHttp.get(`search?query=${name}&number=1&apiKey=${spoonacularAPIKey}`);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const res = error.response.data;
|
|
12
|
+
if (res.code === 401) {
|
|
13
|
+
return { errorMsg: 'API Key Not Valid', error };
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return { errorMsg: 'Error Occurred, Please Try Again', error };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return searchedIngr;
|
|
20
|
+
};
|
|
21
|
+
export const getIngredientInformation = async (ingrId, spoonacularAPIKey) => {
|
|
22
|
+
let ingrData;
|
|
23
|
+
try {
|
|
24
|
+
ingrData = await spoonacularHttp.get(`${ingrId}/information?amount=1&apiKey=${spoonacularAPIKey}`);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
const res = error.response.data;
|
|
28
|
+
if (res.code === 401) {
|
|
29
|
+
return { errorMsg: 'API Key Not Valid', error };
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return { errorMsg: 'Error Occurred, Please Try Again', error };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return ingrData;
|
|
36
|
+
};
|
|
37
|
+
export const setMongoDBIngrData = async (data) => {
|
|
38
|
+
await mongoHttp.post(`addIngredient`, data);
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/api/requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IACpD,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAA;AAC5D,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAAE,iBAAiB,EAAE,EAAE;IACxE,IAAI,YAAiB,CAAA;IACrB,IAAI;QACF,YAAY,GAAG,MAAM,eAAe,CAAC,GAAG,CACtC,gBAAgB,IAAI,oBAAoB,iBAAiB,EAAE,CAC5D,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,GAAG,GAAQ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAA;QACpC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;YACpB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAA;SAChD;aAAM;YACL,OAAO,EAAE,QAAQ,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAA;SAC/D;KACF;IACD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,MAAc,EACd,iBAAiB,EACjB,EAAE;IACF,IAAI,QAAa,CAAA;IACjB,IAAI;QACF,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAClC,GAAG,MAAM,gCAAgC,iBAAiB,EAAE,CAC7D,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,GAAG,GAAQ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAA;QACpC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;YACpB,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAA;SAChD;aAAM;YACL,OAAO,EAAE,QAAQ,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAA;SAC/D;KACF;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAC,IAAI,EAAC,EAAE;IAC7C,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { checkIngredient } from '../api/requests.js';
|
|
2
|
+
import { getSpoonacularIngrData } from './getSpoonacularIngrData.js';
|
|
3
|
+
export async function getIngredientInfo(ingrName, spoonacularAPIKey) {
|
|
4
|
+
const ingrNameLower = ingrName.toLowerCase();
|
|
5
|
+
if (!ingrNameLower)
|
|
6
|
+
return;
|
|
7
|
+
const mongoIngrData = await checkIngredient(ingrNameLower);
|
|
8
|
+
if (!mongoIngrData.data) {
|
|
9
|
+
const ingrData = await getSpoonacularIngrData(ingrNameLower, spoonacularAPIKey);
|
|
10
|
+
return ingrData;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return mongoIngrData.data;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=getIngredientInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getIngredientInfo.js","sourceRoot":"","sources":["../../src/funcs/getIngredientInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,iBAAyB;IAEzB,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IAC5C,IAAI,CAAC,aAAa;QAAE,OAAM;IAC1B,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAA;IAC1D,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,aAAa,EACb,iBAAiB,CAClB,CAAA;QACD,OAAO,QAAQ,CAAA;KAChB;SAAM;QACL,OAAO,aAAa,CAAC,IAAI,CAAA;KAC1B;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getIngredientInformation, searchIngredient, setMongoDBIngrData, } from '../api/requests.js';
|
|
2
|
+
export async function getSpoonacularIngrData(name, spoonacularAPIKey) {
|
|
3
|
+
const searchedIngr = await searchIngredient(name, spoonacularAPIKey);
|
|
4
|
+
if (searchedIngr.error)
|
|
5
|
+
return searchedIngr;
|
|
6
|
+
const ingrId = searchedIngr?.data?.results[0]?.id ?? null;
|
|
7
|
+
if (!ingrId)
|
|
8
|
+
return { error: 'No Data Found', errorMsg: 'No Data Found' };
|
|
9
|
+
const ingrData = await getIngredientInformation(ingrId, spoonacularAPIKey);
|
|
10
|
+
if (ingrData.error)
|
|
11
|
+
return ingrData;
|
|
12
|
+
const mongoDBIngrData = { ...ingrData.data, name };
|
|
13
|
+
setMongoDBIngrData(mongoDBIngrData);
|
|
14
|
+
return mongoDBIngrData;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=getSpoonacularIngrData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSpoonacularIngrData.js","sourceRoot":"","sources":["../../src/funcs/getSpoonacularIngrData.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,iBAAyB;IAEzB,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IACpE,IAAI,YAAY,CAAC,KAAK;QAAE,OAAO,YAAY,CAAA;IAC3C,MAAM,MAAM,GAAG,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAA;IAEzD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAA;IAEzE,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC1E,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAA;IAEnC,MAAM,eAAe,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA;IAClD,kBAAkB,CAAC,eAAe,CAAC,CAAA;IACnC,OAAO,eAAe,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parse } from 'recipe-ingredient-parser-v3';
|
|
2
|
+
import { getIngredientInfo } from './getIngredientInfo.js';
|
|
3
|
+
const editIngredientString = (ingrStr) => {
|
|
4
|
+
// Get string after first comment in ingredient string
|
|
5
|
+
let ingr = ingrStr.split(',')[0]?.trim() ?? ingrStr;
|
|
6
|
+
let comment = ingrStr.split(',')[1]?.trim() ?? null;
|
|
7
|
+
const formattedIngrName = ingr
|
|
8
|
+
.trim()
|
|
9
|
+
.replace(/\s{2,}/g, ' ')
|
|
10
|
+
.replace(/,/g, '')
|
|
11
|
+
.replace(/^(fluid )/, '')
|
|
12
|
+
.replace(/^(fl )/, '')
|
|
13
|
+
.replace(/^(oz )/, '')
|
|
14
|
+
.trim();
|
|
15
|
+
return { formattedIngrName, comment };
|
|
16
|
+
};
|
|
17
|
+
const ingredientParser = async (ingrString, spoonacularAPIKey) => {
|
|
18
|
+
const parsedIngr = parse(ingrString, 'eng');
|
|
19
|
+
const formattedIngr = editIngredientString(parsedIngr.ingredient);
|
|
20
|
+
const { formattedIngrName, comment } = formattedIngr;
|
|
21
|
+
const updatedParsedIngr = {
|
|
22
|
+
...parsedIngr,
|
|
23
|
+
ingredient: formattedIngrName,
|
|
24
|
+
comment,
|
|
25
|
+
};
|
|
26
|
+
if (formattedIngr) {
|
|
27
|
+
const ingrData = await getIngredientInfo(formattedIngrName, spoonacularAPIKey);
|
|
28
|
+
return { ...ingrData, parsedIngredient: updatedParsedIngr };
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return {
|
|
32
|
+
error: 'Ingredient not formatted correctly. Please pass ingredient comments/instructions after a comma',
|
|
33
|
+
parsedIngredient: updatedParsedIngr,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export default ingredientParser;
|
|
38
|
+
//# sourceMappingURL=ingredientParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingredientParser.js","sourceRoot":"","sources":["../../src/funcs/ingredientParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,sDAAsD;IACtD,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAA;IACnD,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAA;IAEnD,MAAM,iBAAiB,GAAG,IAAI;SAC3B,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,IAAI,EAAE,CAAA;IAET,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,KAAK,EAC5B,UAAkB,EAClB,iBAAyB,EACX,EAAE;IAChB,MAAM,UAAU,GAAqB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IACjE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,aAAa,CAAA;IAEpD,MAAM,iBAAiB,GAAG;QACxB,GAAG,UAAU;QACb,UAAU,EAAE,iBAAiB;QAC7B,OAAO;KACR,CAAA;IACD,IAAI,aAAa,EAAE;QACjB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,iBAAiB,EACjB,iBAAiB,CAClB,CAAA;QACD,OAAO,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAA;KAC5D;SAAM;QACL,OAAO;YACL,KAAK,EACH,gGAAgG;YAClG,gBAAgB,EAAE,iBAAiB;SACpC,CAAA;KACF;AACH,CAAC,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAA;AAC1D,eAAe,gBAAgB,CAAA;AAC/B,4EAA4E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jclind/ingredient-parser",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Parses given sentence including ingredient information and attemps to return quantity, measurement and ingredient",
|
|
5
|
-
"main": "index.js",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "Parses given sentence including ingredient information and attemps to return quantity, measurement and ingredient data",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
6
11
|
"scripts": {
|
|
7
|
-
"
|
|
12
|
+
"build": "tsc"
|
|
8
13
|
},
|
|
9
14
|
"repository": {
|
|
10
15
|
"type": "git",
|
|
@@ -17,8 +22,10 @@
|
|
|
17
22
|
},
|
|
18
23
|
"homepage": "https://github.com/jclind/ingredient-parser#readme",
|
|
19
24
|
"dependencies": {
|
|
25
|
+
"@types/axios": "^0.14.0",
|
|
20
26
|
"dotenv": "^16.0.3",
|
|
21
27
|
"parse-ingredient": "^0.6.0",
|
|
22
|
-
"recipe-ingredient-parser-v3": "^1.2.18"
|
|
28
|
+
"recipe-ingredient-parser-v3": "^1.2.18",
|
|
29
|
+
"typescript": "^4.9.4"
|
|
23
30
|
}
|
|
24
31
|
}
|
package/http-common.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const axios = require('axios')
|
|
2
|
-
|
|
3
|
-
const mongoHttp = axios.create({
|
|
4
|
-
baseURL:
|
|
5
|
-
'https://us-east-1.aws.data.mongodb-api.com/app/prepify-ixumn/endpoint',
|
|
6
|
-
headers: {
|
|
7
|
-
'Content-type': 'application/json',
|
|
8
|
-
},
|
|
9
|
-
})
|
|
10
|
-
const spoonacularHttp = axios.create({
|
|
11
|
-
baseURL: 'https://api.spoonacular.com/food/ingredients/',
|
|
12
|
-
headers: {
|
|
13
|
-
'Content-type': 'application/json',
|
|
14
|
-
},
|
|
15
|
-
})
|
|
16
|
-
module.exports = { mongoHttp, spoonacularHttp }
|
package/index.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
const { mongoHttp, spoonacularHttp } = require('./http-common.ts')
|
|
2
|
-
const { parse } = require('recipe-ingredient-parser-v3')
|
|
3
|
-
|
|
4
|
-
const ingredientParser = async (ingrString, spoonacularAPIKey) => {
|
|
5
|
-
const parsedIngr = parse(ingrString, 'eng')
|
|
6
|
-
const formattedIngr = parsedIngr.ingredient
|
|
7
|
-
.trim()
|
|
8
|
-
.replace(/\s{2,}/g, ' ')
|
|
9
|
-
.replace(/,/g, '')
|
|
10
|
-
.replace(/^(fluid )/, '')
|
|
11
|
-
.replace(/^(fl )/, '')
|
|
12
|
-
.replace(/^(oz )/, '')
|
|
13
|
-
.trim()
|
|
14
|
-
if (formattedIngr) {
|
|
15
|
-
const ingrData = await getIngredientInfo(formattedIngr, spoonacularAPIKey)
|
|
16
|
-
return ingrData
|
|
17
|
-
} else {
|
|
18
|
-
return null
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async function getIngredientInfo(ingrName, spoonacularAPIKey) {
|
|
23
|
-
const ingrNameLower = ingrName.toLowerCase()
|
|
24
|
-
if (!ingrNameLower) return
|
|
25
|
-
const mongoIngrData = await checkIngredient(ingrNameLower)
|
|
26
|
-
if (!mongoIngrData.data) {
|
|
27
|
-
const ingrData = await getSpoonacularIngrData(
|
|
28
|
-
ingrNameLower,
|
|
29
|
-
spoonacularAPIKey
|
|
30
|
-
)
|
|
31
|
-
return ingrData
|
|
32
|
-
} else {
|
|
33
|
-
return mongoIngrData.data
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async function checkIngredient(name) {
|
|
38
|
-
return await mongoHttp.get(`checkIngredient?name=${name}`)
|
|
39
|
-
}
|
|
40
|
-
async function getSpoonacularIngrData(name, spoonacularAPIKey) {
|
|
41
|
-
let searchedIngr = null
|
|
42
|
-
try {
|
|
43
|
-
searchedIngr = await spoonacularHttp.get(
|
|
44
|
-
`search?query=${name}&number=1&apiKey=${spoonacularAPIKey}`
|
|
45
|
-
)
|
|
46
|
-
} catch (error) {
|
|
47
|
-
const res = error.response.data
|
|
48
|
-
if (res.code === 401) {
|
|
49
|
-
return { errorMsg: 'API Key Not Valid', error }
|
|
50
|
-
} else {
|
|
51
|
-
return { errorMsg: 'Error Occurred, Please Try Again', error }
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (
|
|
56
|
-
!searchedIngr.data ||
|
|
57
|
-
!searchedIngr.data.results ||
|
|
58
|
-
searchedIngr.data.results.length <= 0
|
|
59
|
-
) {
|
|
60
|
-
return null
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const ingrId = searchedIngr.data.results[0].id
|
|
64
|
-
|
|
65
|
-
let ingrData = null
|
|
66
|
-
try {
|
|
67
|
-
ingrData = await spoonacularHttp.get(
|
|
68
|
-
`${ingrId}/information?amount=1&apiKey=${process.env.SPOONACULAR_API_KEY}`
|
|
69
|
-
)
|
|
70
|
-
} catch (error) {
|
|
71
|
-
if (res.code === 401) {
|
|
72
|
-
return { errorMsg: 'API Key Not Valid', error }
|
|
73
|
-
} else {
|
|
74
|
-
return { errorMsg: 'Error Occurred, Please Try Again', error }
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
const mongoDBIngrData = { ...ingrData.data, name }
|
|
78
|
-
setMongoDBIngrData(mongoDBIngrData)
|
|
79
|
-
return mongoDBIngrData
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async function setMongoDBIngrData(data) {
|
|
83
|
-
await mongoHttp.post(`addIngredient`, data)
|
|
84
|
-
return data
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
module.exports = ingredientParser
|