mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 14:33:33 -07:00
new recipe summary route
This commit is contained in:
parent
4c3f751e80
commit
fbd8d49880
5 changed files with 51 additions and 26 deletions
|
@ -8,6 +8,7 @@ const prefix = baseURL + "recipes/";
|
||||||
|
|
||||||
const recipeURLs = {
|
const recipeURLs = {
|
||||||
allRecipes: baseURL + "recipes",
|
allRecipes: baseURL + "recipes",
|
||||||
|
summary: baseURL + "recipes" + "/summary",
|
||||||
allRecipesByCategory: prefix + "category",
|
allRecipesByCategory: prefix + "category",
|
||||||
create: prefix + "create",
|
create: prefix + "create",
|
||||||
createByURL: prefix + "create-url",
|
createByURL: prefix + "create-url",
|
||||||
|
@ -86,6 +87,11 @@ export const recipeAPI = {
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async allSummary() {
|
||||||
|
const response = await apiReq.get(recipeURLs.summary);
|
||||||
|
return response.data;
|
||||||
|
},
|
||||||
|
|
||||||
recipeImage(recipeSlug) {
|
recipeImage(recipeSlug) {
|
||||||
return `/api/recipes/${recipeSlug}/image?image_type=original`;
|
return `/api/recipes/${recipeSlug}/image?image_type=original`;
|
||||||
},
|
},
|
||||||
|
|
|
@ -54,15 +54,15 @@ const store = new Vuex.Store({
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
async requestRecentRecipes() {
|
async requestRecentRecipes() {
|
||||||
const keys = [
|
// const keys = [
|
||||||
"name",
|
// "name",
|
||||||
"slug",
|
// "slug",
|
||||||
"image",
|
// "image",
|
||||||
"description",
|
// "description",
|
||||||
"dateAdded",
|
// "dateAdded",
|
||||||
"rating",
|
// "rating",
|
||||||
];
|
// ];
|
||||||
const payload = await api.recipes.allByKeys(keys);
|
const payload = await api.recipes.allSummary();
|
||||||
|
|
||||||
this.commit("setRecentRecipes", payload);
|
this.commit("setRecentRecipes", payload);
|
||||||
},
|
},
|
||||||
|
|
|
@ -15,17 +15,10 @@ class BaseDocument:
|
||||||
self.schema: BaseModel
|
self.schema: BaseModel
|
||||||
|
|
||||||
# TODO: Improve Get All Query Functionality
|
# TODO: Improve Get All Query Functionality
|
||||||
def get_all(self, session: Session, limit: int = None, order_by: str = None) -> List[dict]:
|
def get_all(self, session: Session, limit: int = None, order_by: str = None, override_schema=None) -> List[dict]:
|
||||||
|
eff_schema = override_schema or self.schema
|
||||||
|
|
||||||
if self.orm_mode:
|
return [eff_schema.from_orm(x) for x in session.query(self.sql_model).limit(limit).all()]
|
||||||
return [self.schema.from_orm(x) for x in session.query(self.sql_model).limit(limit).all()]
|
|
||||||
|
|
||||||
# list = [x.dict() for x in session.query(self.sql_model).limit(limit).all()]
|
|
||||||
|
|
||||||
# if limit == 1:
|
|
||||||
# return list[0]
|
|
||||||
|
|
||||||
# return list
|
|
||||||
|
|
||||||
def get_all_limit_columns(self, session: Session, fields: List[str], limit: int = None) -> List[SqlAlchemyBase]:
|
def get_all_limit_columns(self, session: Session, fields: List[str], limit: int = None) -> List[SqlAlchemyBase]:
|
||||||
"""Queries the database for the selected model. Restricts return responses to the
|
"""Queries the database for the selected model. Restricts return responses to the
|
||||||
|
|
|
@ -3,13 +3,24 @@ from typing import List, Optional
|
||||||
from fastapi import APIRouter, Depends, Query
|
from fastapi import APIRouter, Depends, Query
|
||||||
from mealie.db.database import db
|
from mealie.db.database import db
|
||||||
from mealie.db.db_setup import generate_session
|
from mealie.db.db_setup import generate_session
|
||||||
from mealie.schema.recipe import AllRecipeRequest
|
from mealie.schema.recipe import AllRecipeRequest, RecipeSummary
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
from sqlalchemy.orm.session import Session
|
from sqlalchemy.orm.session import Session
|
||||||
|
|
||||||
router = APIRouter(tags=["Query All Recipes"])
|
router = APIRouter(tags=["Query All Recipes"])
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/api/recipes/summary")
|
||||||
|
async def get_recipe_summary(
|
||||||
|
skip=0,
|
||||||
|
end=9999,
|
||||||
|
session: Session = Depends(generate_session),
|
||||||
|
):
|
||||||
|
""" Returns the summary data for recipes in the database """
|
||||||
|
|
||||||
|
return db.recipes.get_all(session, limit=end, override_schema=RecipeSummary)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/api/recipes")
|
@router.get("/api/recipes")
|
||||||
def get_all_recipes(
|
def get_all_recipes(
|
||||||
keys: Optional[List[str]] = Query(...),
|
keys: Optional[List[str]] = Query(...),
|
||||||
|
|
|
@ -34,12 +34,30 @@ class Nutrition(BaseModel):
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
|
||||||
class Recipe(BaseModel):
|
class RecipeSummary(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
description: Optional[str]
|
slug: Optional[str] = ""
|
||||||
image: Optional[Any]
|
image: Optional[Any]
|
||||||
recipeYield: Optional[str]
|
|
||||||
|
description: Optional[str]
|
||||||
recipeCategory: Optional[List[str]] = []
|
recipeCategory: Optional[List[str]] = []
|
||||||
|
tags: Optional[List[str]] = []
|
||||||
|
rating: Optional[int]
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getter_dict(_cls, name_orm: RecipeModel):
|
||||||
|
return {
|
||||||
|
**GetterDict(name_orm),
|
||||||
|
"recipeCategory": [x.name for x in name_orm.recipeCategory],
|
||||||
|
"tags": [x.name for x in name_orm.tags],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Recipe(RecipeSummary):
|
||||||
|
recipeYield: Optional[str]
|
||||||
recipeIngredient: Optional[list[str]]
|
recipeIngredient: Optional[list[str]]
|
||||||
recipeInstructions: Optional[list[RecipeStep]]
|
recipeInstructions: Optional[list[RecipeStep]]
|
||||||
nutrition: Optional[Nutrition]
|
nutrition: Optional[Nutrition]
|
||||||
|
@ -50,11 +68,8 @@ class Recipe(BaseModel):
|
||||||
performTime: Optional[str] = None
|
performTime: Optional[str] = None
|
||||||
|
|
||||||
# Mealie Specific
|
# Mealie Specific
|
||||||
slug: Optional[str] = ""
|
|
||||||
tags: Optional[List[str]] = []
|
|
||||||
dateAdded: Optional[datetime.date]
|
dateAdded: Optional[datetime.date]
|
||||||
notes: Optional[List[RecipeNote]] = []
|
notes: Optional[List[RecipeNote]] = []
|
||||||
rating: Optional[int]
|
|
||||||
orgURL: Optional[str]
|
orgURL: Optional[str]
|
||||||
extras: Optional[dict] = {}
|
extras: Optional[dict] = {}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue