refactor(backend): ♻️ Update tag naming and reorganized some routes. Still WIP

This commit is contained in:
hay-kot
2021-08-21 21:49:14 -08:00
parent 19fb6af050
commit 62836e5381
23 changed files with 204 additions and 219 deletions

View File

@@ -0,0 +1,63 @@
from shutil import copyfileobj
from fastapi import Depends, File, Form, HTTPException, status
from fastapi.datastructures import UploadFile
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.routers import UserAPIRouter
from mealie.schema.recipe import Recipe, RecipeAsset, RecipeURLIn
from mealie.services.image.image import scrape_image, write_image
from slugify import slugify
from sqlalchemy.orm.session import Session
user_router = UserAPIRouter()
@user_router.post("/{recipe_slug}/image")
def scrape_image_url(
recipe_slug: str,
url: RecipeURLIn,
):
""" Removes an existing image and replaces it with the incoming file. """
scrape_image(url.url, recipe_slug)
@user_router.put("/{recipe_slug}/image")
def update_recipe_image(
recipe_slug: str,
image: bytes = File(...),
extension: str = Form(...),
session: Session = Depends(generate_session),
):
""" Removes an existing image and replaces it with the incoming file. """
write_image(recipe_slug, image, extension)
new_version = db.recipes.update_image(session, recipe_slug, extension)
return {"image": new_version}
@user_router.post("/{recipe_slug}/assets", response_model=RecipeAsset)
def upload_recipe_asset(
recipe_slug: str,
name: str = Form(...),
icon: str = Form(...),
extension: str = Form(...),
file: UploadFile = File(...),
session: Session = Depends(generate_session),
):
""" Upload a file to store as a recipe asset """
file_name = slugify(name) + "." + extension
asset_in = RecipeAsset(name=name, icon=icon, file_name=file_name)
dest = Recipe(slug=recipe_slug).asset_dir.joinpath(file_name)
with dest.open("wb") as buffer:
copyfileobj(file.file, buffer)
if not dest.is_file():
raise HTTPException(status.HTTP_500_INTERNAL_SERVER_ERROR)
recipe: Recipe = db.recipes.get(session, recipe_slug)
recipe.assets.append(asset_in)
db.recipes.update(session, recipe_slug, recipe.dict())
return asset_in