Feature/shareable recipes (#866)

* simplify context menu

* move computed to comp-api

* feat:  create share tokens for recipes for sharing recieps to non-users

* feat:  shareable recipe links with og tags
This commit is contained in:
Hayden
2021-12-05 11:55:46 -09:00
committed by GitHub
parent ba4107348f
commit b2673d75bf
25 changed files with 914 additions and 199 deletions

View File

View File

@@ -0,0 +1,51 @@
from functools import cached_property
from pydantic import UUID4
from mealie.schema.recipe.recipe_share_token import (
RecipeShareToken,
RecipeShareTokenCreate,
RecipeShareTokenSave,
RecipeShareTokenSummary,
)
from mealie.services._base_http_service.crud_http_mixins import CrudHttpMixins
from mealie.services._base_http_service.http_services import UserHttpService
from mealie.services.events import create_recipe_event
class SharedRecipeService(
CrudHttpMixins[RecipeShareToken, RecipeShareTokenCreate, RecipeShareTokenCreate],
UserHttpService[UUID4, RecipeShareToken],
):
event_func = create_recipe_event
_restrict_by_group = False
_schema = RecipeShareToken
@cached_property
def dal(self):
return self.db.recipe_share_tokens
def populate_item(self, id: UUID4) -> RecipeShareToken:
self.item = self.dal.get_one(id)
return self.item
def get_all(self, recipe_id=None) -> list[RecipeShareTokenSummary]:
# sourcery skip: assign-if-exp, inline-immediately-returned-variable
if recipe_id:
return self.db.recipe_share_tokens.multi_query(
{"group_id": self.group_id, "recipe_id": recipe_id},
override_schema=RecipeShareTokenSummary,
)
else:
return self.db.recipe_share_tokens.multi_query(
{"group_id": self.group_id}, override_schema=RecipeShareTokenSummary
)
def create_one(self, data: RecipeShareTokenCreate) -> RecipeShareToken:
save_data = RecipeShareTokenSave(**data.dict(), group_id=self.group_id)
return self._create_one(save_data)
def delete_one(self, item_id: UUID4 = None) -> None:
item_id = item_id or self.item.id
return self.dal.delete(item_id)