fixed response models
This commit is contained in:
parent
e6b423cde0
commit
3cb7c9c0b2
9 changed files with 169 additions and 167 deletions
193
frontend/package-lock.json
generated
193
frontend/package-lock.json
generated
|
@ -1738,6 +1738,16 @@
|
|||
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"cacache": {
|
||||
"version": "13.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594428402513&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
|
||||
|
@ -1764,6 +1774,34 @@
|
|||
"unique-filename": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"find-cache-dir": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz?cache=0&sync_timestamp=1583735626956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz",
|
||||
|
@ -1785,6 +1823,25 @@
|
|||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597081764621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz",
|
||||
|
@ -1849,6 +1906,16 @@
|
|||
"minipass": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"terser-webpack-plugin": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1603882075288&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
|
||||
|
@ -1865,6 +1932,18 @@
|
|||
"terser": "^4.6.12",
|
||||
"webpack-sources": "^1.4.3"
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -9082,7 +9161,7 @@
|
|||
},
|
||||
"rechoir": {
|
||||
"version": "0.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz",
|
||||
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -9736,6 +9815,11 @@
|
|||
"rechoir": "^0.6.2"
|
||||
}
|
||||
},
|
||||
"shvl": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.1.tgz",
|
||||
"integrity": "sha512-VU7R5Uxp38LKHooGuZe0TcX2EPK95nn8DvclAvTPyD9/qHmXvt3dR2pJ4JLZ8uLjxQNQ3zNLFJCreteIj3cvpw=="
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&sync_timestamp=1585253323149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz",
|
||||
|
@ -11065,11 +11149,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"vue-cookies": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/vue-cookies/-/vue-cookies-1.7.4.tgz",
|
||||
"integrity": "sha512-mOS5Btr8V9zvAtkmQ7/TfqJIropOx7etDAgBywPCmHjvfJl2gFbH2XgoMghleLoyyMTi5eaJss0mPN7arMoslA=="
|
||||
},
|
||||
"vue-eslint-parser": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.1.tgz",
|
||||
|
@ -11102,11 +11181,6 @@
|
|||
"integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
|
||||
"dev": true
|
||||
},
|
||||
"vue-html-to-paper": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-html-to-paper/-/vue-html-to-paper-1.3.1.tgz",
|
||||
"integrity": "sha512-5IdAPUgStfpVHfcG6nXD0FbUB1onWpvwVD+OZ00jJpy3qaRPkaGD7fFIvYgBB9YPkr0VK065LayEvmGmkkfhaQ=="
|
||||
},
|
||||
"vue-loader": {
|
||||
"version": "15.9.5",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.5.tgz?cache=0&sync_timestamp=1605670886675&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.5.tgz",
|
||||
|
@ -11128,87 +11202,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-router": {
|
||||
"version": "3.4.9",
|
||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
|
||||
|
@ -11268,6 +11261,22 @@
|
|||
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",
|
||||
"integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
|
||||
},
|
||||
"vuex-persistedstate": {
|
||||
"version": "4.0.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.0.0-beta.2.tgz",
|
||||
"integrity": "sha512-JeiweafcU+9d4+/nRvQwK2PyHS9xCRcGIlL2cn0ny/afTw2RP+5M6SdsjkcYoGNICTGPi5i+K3J46ioWEyVgvg==",
|
||||
"requires": {
|
||||
"deepmerge": "^4.2.2",
|
||||
"shvl": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"deepmerge": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
|
||||
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"watchpack": {
|
||||
"version": "1.7.5",
|
||||
"resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
"qs": "^6.9.4",
|
||||
"v-jsoneditor": "^1.4.2",
|
||||
"vue": "^2.6.11",
|
||||
"vue-html-to-paper": "^1.3.1",
|
||||
"vue-router": "^3.4.9",
|
||||
"vuetify": "^2.4.1",
|
||||
"vuex": "^3.6.0",
|
||||
|
|
|
@ -7,11 +7,13 @@ import userSettings from "./modules/userSettings";
|
|||
Vue.use(Vuex);
|
||||
|
||||
const store = new Vuex.Store({
|
||||
plugins: [createPersistedState({
|
||||
paths: ['userSettings']
|
||||
})],
|
||||
plugins: [
|
||||
createPersistedState({
|
||||
paths: ["userSettings"],
|
||||
}),
|
||||
],
|
||||
modules: {
|
||||
userSettings
|
||||
userSettings,
|
||||
},
|
||||
state: {
|
||||
// Snackbar
|
||||
|
@ -40,7 +42,6 @@ const store = new Vuex.Store({
|
|||
},
|
||||
|
||||
actions: {
|
||||
|
||||
async requestRecentRecipes() {
|
||||
const keys = [
|
||||
"name",
|
||||
|
|
|
@ -1,33 +1,28 @@
|
|||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "Recipe",
|
||||
"articleBody": "Leftover rice is ideal for this dish (and a great way to use up any takeout that\u2019s hanging around), since fully chilled rice tends to be drier and will become crispier and browner in the skillet. To get the best texture, evenly distribute the rice in your pan and gently press down to flatten it out like a pancake. Don\u2019t touch until you hear it crackle! Finish with a sunny-side-up egg\u2014or poach it if you don't mind the stovetop fuss. This recipe is part of the 2021\u00a0Feel Good Food Plan, our eight-day dinner plan for starting the year off right.",
|
||||
"alternativeHeadline": "To get the best texture, evenly distribute the rice in your pan and gently press down to flatten it. Don\u2019t touch until you hear it crackle!",
|
||||
"dateModified": "2021-01-03 03:40:32.190000",
|
||||
"datePublished": "2021-01-01 06:00:00",
|
||||
"articleBody": "You\u2019ll find innumerable versions of huevos rancheros throughout Mexico (and beyond!), but at its heart, the dish consists of fried corn tortillas, fried eggs, and a generous amount of tomato salsa. \u201cThere should be a lot of salsa for the eggs,\u201d says recipe developer Rick Martinez\u2014and since that salsa is spicy, fresh, and, thanks to the charred cherry tomatoes, a little bit smoky, you\u2019ll be glad to have it. Rick\u2019s recipe also includes a layer of saut\u00e9ed mushrooms and poblanos topped with cheese for a substantive yet meat-free meal; you could also add chorizo, refried beans, queso fresco, and/or guacamole. Serve for breakfast, lunch, and/or dinner.",
|
||||
"alternativeHeadline": "For his take on this classic Mexican dish, which originated as a simple but hearty ranchers' breakfast, Rick Martinez adds a layer of cheesy saut\u00e9ed poblanos and mushrooms to the tostada-egg-salsa trio.",
|
||||
"dateModified": "2021-01-07 21:20:28.325000",
|
||||
"datePublished": "2021-01-03 04:00:00",
|
||||
"keywords": [
|
||||
"recipes",
|
||||
"healthyish",
|
||||
"salad",
|
||||
"ginger",
|
||||
"garlic",
|
||||
"orange",
|
||||
"oil",
|
||||
"soy sauce",
|
||||
"lemon juice",
|
||||
"sesame oil",
|
||||
"kosher salt",
|
||||
"broccoli",
|
||||
"brown rice",
|
||||
"basically",
|
||||
"egg",
|
||||
"celery",
|
||||
"serrano chiles",
|
||||
"cherry tomatoes",
|
||||
"onion",
|
||||
"cilantro",
|
||||
"mint",
|
||||
"feel good food plan 2021",
|
||||
"feel good food plan",
|
||||
"kosher salt",
|
||||
"lime juice",
|
||||
"mushroom",
|
||||
"poblano",
|
||||
"garlic",
|
||||
"cheddar",
|
||||
"olive oil",
|
||||
"web"
|
||||
],
|
||||
"thumbnailUrl": "https://assets.bonappetit.com/photos/5fdbe70a84d333dd1dcc7900/1:1/w_1698,h_1698,c_limit/BA1220feelgoodalt.jpg",
|
||||
"thumbnailUrl": "https://assets.bonappetit.com/photos/5fdcf8f4da09df8b9416548f/1:1/w_3242,h_3242,c_limit/Basically-Huevos-Rancheros.jpg",
|
||||
"publisher": {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
|
@ -51,75 +46,72 @@
|
|||
"author": [
|
||||
{
|
||||
"@type": "Person",
|
||||
"name": "Devonn Francis",
|
||||
"sameAs": "https://bon-appetit.com/contributor/devonn-francis/"
|
||||
"name": "Rick Martinez",
|
||||
"sameAs": "https://bon-appetit.com/contributor/rick-martinez/"
|
||||
}
|
||||
],
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": 4,
|
||||
"ratingCount": 2
|
||||
"ratingValue": 4.8,
|
||||
"ratingCount": 5
|
||||
},
|
||||
"description": "To get the best texture, evenly distribute the rice in your pan and gently press down to flatten it. Don\u2019t touch until you hear it crackle! ",
|
||||
"image": "crispy-rice-with-ginger-citrus-celery-salad.jpg",
|
||||
"name": "Crispy Rice With Ginger-Citrus Celery Salad",
|
||||
"description": "For his take on this classic Mexican dish, which originated as a simple but hearty ranchers' breakfast, Rick Martinez adds a layer of cheesy saut\u00e9ed poblanos and mushrooms to the tostada-egg-salsa trio.",
|
||||
"image": "huevos-rancheros-con-rajas-y-champinones.jpg",
|
||||
"headline": "Huevos Rancheros con Rajas y Champi\u00f1ones",
|
||||
"name": "Huevos Rancheros con Rajas y Champi\u00f1ones",
|
||||
"recipeIngredient": [
|
||||
"1 2\" piece ginger, peeled, finely grated",
|
||||
"1 small garlic clove, finely grated",
|
||||
"Juice of 1 orange",
|
||||
"2 tbsp. vegetable oil",
|
||||
"1Tbsp. coconut aminos or low-sodium soy sauce",
|
||||
"1 Tbsp. fresh lemon juice",
|
||||
"\u00bc tsp. toasted sesame oil",
|
||||
"Kosher salt",
|
||||
"1 medium head of broccoli",
|
||||
"6 Tbsp. (or more) vegetable oil, divided",
|
||||
"Kosher salt",
|
||||
"2 cups chilled cooked brown rice",
|
||||
"1 serrano chile",
|
||||
"16 oz. cherry tomatoes (about 3 cups)",
|
||||
"\u00bc onion",
|
||||
"\u00bc cup cilantro leaves with tender stems, plus more for serving",
|
||||
"3 tsp. Diamond Crystal or 1\u00bd tsp. Morton kosher salt, divided, plus more",
|
||||
"1\u00bd tsp. (or more) fresh lime juice",
|
||||
"8 oz. button mushrooms",
|
||||
"2 medium poblano chiles or any color bell peppers",
|
||||
"2 garlic cloves",
|
||||
"6 oz. white cheddar",
|
||||
"5 Tbsp. extra-virgin olive oil, divided",
|
||||
"4 large eggs",
|
||||
"3 celery stalks, thinly sliced on a steep diagonal",
|
||||
"\u00bd cup cilantro leaves with tender stems",
|
||||
"\u00bd cup mint leaves",
|
||||
"Crushed red pepper flakes (for serving)"
|
||||
"4 tostadas"
|
||||
],
|
||||
"recipeInstructions": [
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Whisk ginger, garlic, orange juice, vegetable oil, coconut aminos, lemon juice, and sesame oil in a small bowl; season with salt and set aside."
|
||||
"text": "Make the salsa ranchera: Remove stem from 1 serrano chile (only use \u00bd if you don\u2019t want your salsa spicy) and halve lengthwise. Heat a medium skillet, preferably cast iron, over high until you see wisps of smoke, about 2 minutes. Arrange serrano chile, skin side down, on one side of pan and add 16 oz. cherry tomatoes. Cook, leaving chile undisturbed and occasionally tossing tomatoes, until charred, 6\u20138 minutes. It is going to get a little smoky so turn on the vent and open a window. Transfer serrano chile and tomatoes to a blender or food processor. Reserve skillet."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Trim about \u00bd\" from woody end of broccoli stem. Peel tough outer layer from stem. Cut florets from stems and thinly slice stems about \u00bd\" thick. Break florets apart with your hands into 1\"\u20131\u00bd\" pieces."
|
||||
"text": "Add \u00bc onion, \u00bc cup cilantro leaves with tender stems, and 1 tsp. Diamond Crystal or \u00bd tsp. Morton kosher salt to blender and blend on low speed (or pulse if using a food processor) until vegetables are broken up, about 30 seconds. Increase speed to medium-low and pur\u00e9e until salsa is almost smooth but some chunks remain. Don\u2019t be tempted to blend on high or you will incorporate air into the salsa and it will look and taste more like a smoothie than a salsa. Transfer to a medium bowl and stir in 1\u00bd tsp. fresh lime juice. Taste and season with more salt and add more lime juice if needed. Set aside until ready to serve."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Heat 2 Tbsp. oil in a large nonstick skillet over medium. Working in 2 batches if needed, arrange broccoli in a single layer and cook, tossing occasionally, until broccoli is bright green and lightly charred around the edges, about\u00a03 minutes. Transfer to a large plate."
|
||||
"text": "Using a paper towel, brush off dirt from 8 oz. button mushrooms. Trim woody stems and discard. Cut mushrooms into quarters. Cut 2 medium poblano chiles or any color bell peppers in half lengthwise and remove stems, seeds, and ribs. Cut chiles into long thin strips about \u00bc\" thick. Use the side of a chef\u2019s knife to lightly smash 2 garlic cloves, then peel and thinly slice. Grate 6 oz. white cheddar on the large holes of a box grater."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Pour 2 Tbsp. oil into same pan and heat over medium-high. Once you see the first wisp of smoke, add rice and season lightly with salt. Using a spatula or spoon, press rice evenly into pan like a pancake. Rice will begin to crackle, but don\u2019t fuss with it. When the crackling has died down almost completely, about\u00a03 minutes, break rice into large pieces and turn over."
|
||||
"text": "Head over to the stove with all of your prep work (gathering it on a rimmed baking sheet will make this easy!). Now, you\u2019re ready to make the mushroom topping. Wipe out reserved skillet with a paper towel and heat 3 Tbsp. extra-virgin olive oil over medium-high. Arrange mushrooms in a single layer in skillet and cook, undisturbed, until brown underneath, about 3 minutes. Give mushrooms a toss and season with 1 tsp. Diamond Crystal or \u00bd tsp. Morton kosher salt. Continue to cook, tossing occasionally, until deep golden brown all over, 5\u20137 minutes longer. Using a slotted spoon, transfer to a small bowl, leaving oil behind."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Add broccoli back to pan and give everything a toss to combine. Cook, tossing occasionally and adding another\u00a01 Tbsp. oil if pan looks dry, until broccoli is tender and rice is warmed through and very crisp, about 5 minutes. Transfer mixture to a platter or divide among plates and set aside."
|
||||
"text": "Arrange poblano chiles in an even layer in same skillet and cook, undisturbed, until browned underneath, about 2 minutes. Add garlic and season with 1 tsp. Diamond Crystal or \u00bd tsp. Morton kosher salt. Cook, tossing occasionally, until lightly browned all over, 5\u20137 minutes longer. Add 3 Tbsp. water and cook, stirring occasionally, until water has evaporated, about 2 minutes. The water will soften the chiles and pull up all those tasty brown bits from the bottom of the pan."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Wipe out skillet; heat remaining\u00a02 Tbsp. oil over medium-high. Crack eggs into skillet; season with salt. Oil should bubble around eggs right away. Cook, rotating skillet occasionally, until whites are golden brown and crisp at the edges and set around the yolk (which should be runny), about 2 minutes."
|
||||
"text": "Add mushrooms with any accumulated juices back to pan and toss until evenly distributed. Sprinkle cheese over in an even layer and remove skillet from heat. Cover (a baking sheet works great if you don\u2019t have a lid that will work) and let sit 5 minutes for cheese to melt."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Toss celery, cilantro, and mint with\u00a03 Tbsp. reserved dressing and a pinch of salt in a medium bowl to combine."
|
||||
"text": "You are almost there; you just need to cook the eggs. Heat remaining 2 Tbsp. extra-virgin olive oil in a large nonstick skillet over medium-high. Crack 4 large eggs into skillet, leaving space around each one, and cook until whites are set and edges are crisp, about 4 minutes. Season with salt."
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"text": "Scatter celery salad over fried rice; top with fried eggs and sprinkle with red pepper flakes. Serve extra dressing alongside."
|
||||
"text": "To serve, spoon cheesy mushroom mixture onto 4 tostadas, dividing evenly, and top each with an egg, then reserved salsa and some cilantro."
|
||||
}
|
||||
],
|
||||
"recipeYield": "4 servings",
|
||||
"url": "https://www.bonappetit.com/recipe/crispy-rice-with-ginger-citrus-celery-salad",
|
||||
"slug": "crispy-rice-with-ginger-citrus-celery-salad",
|
||||
"orgURL": "https://www.bonappetit.com/recipe/crispy-rice-with-ginger-citrus-celery-salad",
|
||||
"recipeYield": "4-6 servings",
|
||||
"url": "https://www.bonappetit.com/recipe/huevos-rancheros-con-rajas-y-champinones",
|
||||
"slug": "huevos-rancheros-con-rajas-y-champinones",
|
||||
"orgURL": "https://www.bonappetit.com/recipe/huevos-rancheros-con-rajas-y-champinones",
|
||||
"categories": [],
|
||||
"tags": [],
|
||||
"dateAdded": null,
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1,002 KiB |
Binary file not shown.
Before Width: | Height: | Size: 622 KiB |
|
@ -5,6 +5,8 @@ from pydantic.main import BaseModel
|
|||
|
||||
|
||||
class RecipeResponse(BaseModel):
|
||||
List
|
||||
|
||||
class Config:
|
||||
schema_extra = {
|
||||
"example": [
|
||||
|
@ -46,11 +48,12 @@ class AllRecipeRequest(BaseModel):
|
|||
|
||||
|
||||
class RecipeURLIn(BaseModel):
|
||||
url: str
|
||||
|
||||
class Config:
|
||||
schema_extra = {"example": {"url": "https://myfavoriterecipes.com/recipes"}}
|
||||
|
||||
|
||||
class SlugResponse(BaseModel):
|
||||
class Config:
|
||||
schema_extra = {
|
||||
"example": "adult-mac-and-cheese"
|
||||
}
|
||||
schema_extra = {"example": "adult-mac-and-cheese"}
|
||||
|
|
|
@ -54,7 +54,10 @@ async def delete_meal_plan(plan_id):
|
|||
return SnackResponse.success("Mealplan Deleted")
|
||||
|
||||
|
||||
@router.get("/api/meal-plan/today/", tags=["Meal Plan"], response_model=SlugResponse)
|
||||
@router.get(
|
||||
"/api/meal-plan/today/",
|
||||
tags=["Meal Plan"],
|
||||
)
|
||||
async def get_today():
|
||||
"""
|
||||
Returns the recipe slug for the meal scheduled for today.
|
||||
|
|
|
@ -2,12 +2,7 @@ from typing import List, Optional
|
|||
|
||||
from fastapi import APIRouter, File, Form, HTTPException, Query
|
||||
from fastapi.responses import FileResponse
|
||||
from models.recipe_models import (
|
||||
AllRecipeRequest,
|
||||
RecipeResponse,
|
||||
RecipeURLIn,
|
||||
SlugResponse,
|
||||
)
|
||||
from models.recipe_models import AllRecipeRequest, RecipeURLIn, SlugResponse
|
||||
from services.image_services import read_image, write_image
|
||||
from services.recipe_services import Recipe, read_requested_values
|
||||
from services.scrape_services import create_from_url
|
||||
|
@ -16,7 +11,7 @@ from utils.snackbar import SnackResponse
|
|||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/api/all-recipes/", tags=["Recipes"], response_model=RecipeResponse)
|
||||
@router.get("/api/all-recipes/", tags=["Recipes"], response_model=List[dict])
|
||||
async def get_all_recipes(
|
||||
keys: Optional[List[str]] = Query(...), num: Optional[int] = 100
|
||||
):
|
||||
|
@ -35,7 +30,7 @@ async def get_all_recipes(
|
|||
return all_recipes
|
||||
|
||||
|
||||
@router.post("/api/all-recipes/", tags=["Recipes"], response_model=RecipeResponse)
|
||||
@router.post("/api/all-recipes/", tags=["Recipes"], response_model=List[dict])
|
||||
async def get_all_recipes_post(body: AllRecipeRequest):
|
||||
"""
|
||||
Returns key data for all recipes based off the body data provided.
|
||||
|
@ -72,7 +67,7 @@ async def get_recipe_img(recipe_slug: str):
|
|||
"/api/recipe/create-url/",
|
||||
tags=["Recipes"],
|
||||
status_code=201,
|
||||
response_model=SlugResponse,
|
||||
response_model=str,
|
||||
)
|
||||
async def parse_recipe_url(url: RecipeURLIn):
|
||||
""" Takes in a URL and attempts to scrape data and load it into the database """
|
||||
|
|
Loading…
Reference in a new issue