feat: recipe timeline backend api (#1685)

* added recipe_timeline_events table to db

* added schema and routes for recipe timeline events

* added missing mixin and fixed update schema

* added tests

* adjusted migration revision tree

* updated alembic revision test

* added initial timeline event for new recipes

* added additional tests

* added event bus support

* renamed event_dt to timestamp

* add timeline_events to ignore list

* run code-gen

* use new test routes implementation

* use doc string syntax

* moved event type enum from db to schema

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
This commit is contained in:
Michael Genson
2022-11-01 03:12:26 -05:00
committed by GitHub
parent 714a080ecb
commit 6ee64535df
19 changed files with 639 additions and 6 deletions

View File

@@ -70,6 +70,13 @@ from .recipe_scraper import ScrapeRecipe, ScrapeRecipeTest
from .recipe_settings import RecipeSettings
from .recipe_share_token import RecipeShareToken, RecipeShareTokenCreate, RecipeShareTokenSave, RecipeShareTokenSummary
from .recipe_step import IngredientReferences, RecipeStep
from .recipe_timeline_events import (
RecipeTimelineEventCreate,
RecipeTimelineEventIn,
RecipeTimelineEventOut,
RecipeTimelineEventPagination,
RecipeTimelineEventUpdate,
)
from .recipe_tool import RecipeToolCreate, RecipeToolOut, RecipeToolResponse, RecipeToolSave
from .request_helpers import RecipeSlug, RecipeZipTokenResponse, SlugResponse, UpdateImageResponse
@@ -78,6 +85,11 @@ __all__ = [
"RecipeToolOut",
"RecipeToolResponse",
"RecipeToolSave",
"RecipeTimelineEventCreate",
"RecipeTimelineEventIn",
"RecipeTimelineEventOut",
"RecipeTimelineEventPagination",
"RecipeTimelineEventUpdate",
"RecipeAsset",
"RecipeSettings",
"RecipeShareToken",

View File

@@ -0,0 +1,53 @@
from datetime import datetime
from enum import Enum
from pydantic import UUID4
from mealie.schema._mealie.mealie_model import MealieModel
from mealie.schema.response.pagination import PaginationBase
class TimelineEventType(Enum):
system = "system"
info = "info"
comment = "comment"
class RecipeTimelineEventIn(MealieModel):
user_id: UUID4 | None = None
"""can be inferred in some contexts, so it's not required"""
subject: str
event_type: TimelineEventType
message: str | None = None
image: str | None = None
timestamp: datetime = datetime.now()
class Config:
use_enum_values = True
class RecipeTimelineEventCreate(RecipeTimelineEventIn):
recipe_id: UUID4
user_id: UUID4
class RecipeTimelineEventUpdate(MealieModel):
subject: str
message: str | None = None
image: str | None = None
class RecipeTimelineEventOut(RecipeTimelineEventCreate):
id: UUID4
created_at: datetime
update_at: datetime
class Config:
orm_mode = True
class RecipeTimelineEventPagination(PaginationBase):
items: list[RecipeTimelineEventOut]