mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-11-01 18:53:59 -04:00
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm.session import Session
|
|
|
|
from mealie.db.database import db
|
|
from mealie.db.db_setup import generate_session
|
|
from mealie.core.dependencies import is_logged_in
|
|
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
|
|
from mealie.schema.recipe import CategoryIn, RecipeCategoryResponse
|
|
|
|
public_router = APIRouter()
|
|
user_router = UserAPIRouter()
|
|
admin_router = AdminAPIRouter()
|
|
|
|
|
|
@public_router.get("")
|
|
async def get_all_recipe_categories(session: Session = Depends(generate_session)):
|
|
""" Returns a list of available categories in the database """
|
|
return db.categories.get_all_limit_columns(session, ["slug", "name"])
|
|
|
|
|
|
@public_router.get("/empty")
|
|
def get_empty_categories(session: Session = Depends(generate_session)):
|
|
""" Returns a list of categories that do not contain any recipes"""
|
|
return db.categories.get_empty(session)
|
|
|
|
|
|
@public_router.get("/{category}", response_model=RecipeCategoryResponse)
|
|
def get_all_recipes_by_category(
|
|
category: str, session: Session = Depends(generate_session), is_user: bool = Depends(is_logged_in)
|
|
):
|
|
""" Returns a list of recipes associated with the provided category. """
|
|
|
|
category_obj = db.categories.get(session, category)
|
|
category_obj = RecipeCategoryResponse.from_orm(category_obj)
|
|
|
|
if not is_user:
|
|
category_obj.recipes = [x for x in category_obj.recipes if x.settings.public]
|
|
|
|
return category_obj
|
|
|
|
|
|
@user_router.post("")
|
|
async def create_recipe_category(category: CategoryIn, session: Session = Depends(generate_session)):
|
|
""" Creates a Category in the database """
|
|
|
|
try:
|
|
return db.categories.create(session, category.dict())
|
|
except Exception:
|
|
raise HTTPException(status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
@admin_router.put("/{category}", response_model=RecipeCategoryResponse)
|
|
async def update_recipe_category(category: str, new_category: CategoryIn, session: Session = Depends(generate_session)):
|
|
""" Updates an existing Tag in the database """
|
|
|
|
try:
|
|
return db.categories.update(session, category, new_category.dict())
|
|
except Exception:
|
|
raise HTTPException(status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
@admin_router.delete("/{category}")
|
|
async def delete_recipe_category(category: str, session: Session = Depends(generate_session)):
|
|
"""
|
|
Removes a recipe category from the database. Deleting a
|
|
category does not impact a recipe. The category will be removed
|
|
from any recipes that contain it
|
|
"""
|
|
|
|
try:
|
|
db.categories.delete(session, category)
|
|
except Exception:
|
|
raise HTTPException(status.HTTP_400_BAD_REQUEST)
|