mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-11-22 11:52:20 -05:00
* fix links * actually fix #238 * Feature/mkdocs version bump (#240) * fix links (#239) Co-authored-by: hay-kot <hay-kot@pm.me> * fix #238 * bump mkdocs version * light/dark toggle * light/dark mode css * API_DOCS defaults to True * disable build on push for master Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/recipe viewer (#244) * fix dialog placement * markdown support in ingredients * fix line render issue * fix tag rendering bug * change ingredients to text area * no slug error * add tag pages * remove console.logs Co-authored-by: hay-kot <hay-kot@pm.me> * changelog v0.4.1 * bug/backup-download (#245) * fix blocked download * + download blocked Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/meal planner (#246) * fixes duplicate recipes in meal-plan #221 * add quick week option * scope css * add mealplanner info Co-authored-by: hay-kot <hay-kot@pm.me> * Nextcloud Import Bugs - #248 (#250) * parses datetime properly + clean category - #248 * add default credentials to docs Co-authored-by: hay-kot <hay-kot@pm.me> * Add bulk import examples to docs. (#252) * Add bulk import examples to docs. * Update api-usage.md * Add Python example for bulk import. * Change IP address in API example. * Refactor/app settings (#251) * fix env setup bugs * remove unused import * fix layout issues * changelog Co-authored-by: hay-kot <hay-kot@pm.me> * env setup fixes * Feature/about api (#253) * fix settings * app info cleanup Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/image minify (#256) * fix settings * app info cleanup * bottom-bar experiment * remove dup key * type hints * add dependency * updated image with query parameters * read image options * add image minification * add image minification step * alt image routes * add image minification * set mobile bar to top Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/additional endpoints (#257) * new recipe summary route * add categories to cards * add pillow * show tags instead of categories * additional debug info * add todays meal image url * about page * fix reactive tag * changelog + docs * bump version Co-authored-by: hay-kot <hay-kot@pm.me> * add pillow dependencies (#258) Co-authored-by: hay-kot <hay-kot@pm.me> * Feature/search page (#259) * add pillow dependencies * advanced search page * advanced search apge * remove extra dependencies * add pre-run script Co-authored-by: hay-kot <hay-kot@pm.me> * no image assignment * advanced search * fix docker dev build * Do not force theme settings on login form (#260) * Fix docker dev db persistence (#264) * Fix docker dev db persistence * Make run.sh the only startup script for prod + dev Credits to @hay-kot for run.sh script logic * Restore dev backend initialization in non-docker setup * Make run.sh POSIX-friendly * Allow dev backend to auto-reload in Docker * Frontend Refactor + Bug Fixes * merge category and tag selector * unifiy category selector * add hint * spacing * fix nextcloud migration * simplify email validator #261 * formatting * cleanup * auto-gen * format * update run script * unified category/tag selector * rename component * Add advanced search link * remove old code * convert keywords to tags * add proper behavior on rename * proper image name association on rename * fix test cleanup * changelog * set docker comppand * minify on migration Co-authored-by: hay-kot <hay-kot@pm.me> * bug-fixes/category-tag-creator (#266) * fix category labels * set loader for migration * v0.4.1 Co-authored-by: hay-kot <hay-kot@pm.me> Co-authored-by: hay-kot <hay-kot@pm.me> Co-authored-by: Nat <nathanynath@yahoo.fr> Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
98 lines
3.3 KiB
Python
98 lines
3.3 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from mealie.db.database import db
|
|
from mealie.db.db_setup import generate_session
|
|
from mealie.routes.deps import get_current_user
|
|
from mealie.schema.meal import MealPlanIn, MealPlanInDB
|
|
from mealie.schema.snackbar import SnackResponse
|
|
from mealie.schema.user import GroupInDB, UserInDB
|
|
from mealie.services.image import image
|
|
from mealie.services.meal_services import get_todays_meal, process_meals
|
|
from sqlalchemy.orm.session import Session
|
|
from starlette.responses import FileResponse
|
|
|
|
router = APIRouter(prefix="/api/meal-plans", tags=["Meal Plan"])
|
|
|
|
|
|
@router.get("/all", response_model=list[MealPlanInDB])
|
|
def get_all_meals(
|
|
current_user: UserInDB = Depends(get_current_user),
|
|
session: Session = Depends(generate_session),
|
|
):
|
|
""" Returns a list of all available Meal Plan """
|
|
|
|
return db.groups.get_meals(session, current_user.group)
|
|
|
|
|
|
@router.post("/create")
|
|
def create_meal_plan(
|
|
data: MealPlanIn, session: Session = Depends(generate_session), current_user=Depends(get_current_user)
|
|
):
|
|
""" Creates a meal plan database entry """
|
|
processed_plan = process_meals(session, data)
|
|
db.meals.create(session, processed_plan.dict())
|
|
|
|
return SnackResponse.success("Mealplan Created")
|
|
|
|
|
|
@router.put("/{plan_id}")
|
|
def update_meal_plan(
|
|
plan_id: str,
|
|
meal_plan: MealPlanIn,
|
|
session: Session = Depends(generate_session),
|
|
current_user=Depends(get_current_user),
|
|
):
|
|
""" Updates a meal plan based off ID """
|
|
processed_plan = process_meals(session, meal_plan)
|
|
processed_plan = MealPlanInDB(uid=plan_id, **processed_plan.dict())
|
|
db.meals.update(session, plan_id, processed_plan.dict())
|
|
|
|
return SnackResponse.info("Mealplan Updated")
|
|
|
|
|
|
@router.delete("/{plan_id}")
|
|
def delete_meal_plan(plan_id, session: Session = Depends(generate_session), current_user=Depends(get_current_user)):
|
|
""" Removes a meal plan from the database """
|
|
|
|
db.meals.delete(session, plan_id)
|
|
|
|
return SnackResponse.error("Mealplan Deleted")
|
|
|
|
|
|
@router.get("/this-week", response_model=MealPlanInDB)
|
|
def get_this_week(session: Session = Depends(generate_session), current_user: UserInDB = Depends(get_current_user)):
|
|
""" Returns the meal plan data for this week """
|
|
|
|
return db.groups.get_meals(session, current_user.group)[0]
|
|
|
|
|
|
@router.get("/today", tags=["Meal Plan"])
|
|
def get_today(session: Session = Depends(generate_session), current_user: UserInDB = Depends(get_current_user)):
|
|
"""
|
|
Returns the recipe slug for the meal scheduled for today.
|
|
If no meal is scheduled nothing is returned
|
|
"""
|
|
|
|
group_in_db: GroupInDB = db.groups.get(session, current_user.group, "name")
|
|
recipe = get_todays_meal(session, group_in_db)
|
|
|
|
return recipe.slug
|
|
|
|
|
|
@router.get("/today/image", tags=["Meal Plan"])
|
|
def get_today(session: Session = Depends(generate_session), group_name: str = "Home"):
|
|
"""
|
|
Returns the image for todays meal-plan.
|
|
"""
|
|
|
|
group_in_db: GroupInDB = db.groups.get(session, group_name, "name")
|
|
recipe = get_todays_meal(session, group_in_db)
|
|
|
|
if recipe:
|
|
recipe_image = image.read_image(recipe.slug, image_type=image.IMG_OPTIONS.ORIGINAL_IMAGE)
|
|
else:
|
|
raise HTTPException(404, "no meal for today")
|
|
if recipe_image:
|
|
return FileResponse(recipe_image)
|
|
else:
|
|
raise HTTPException(404, "file not found")
|