mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-12 02:43:12 -05:00
* fixed incorrect var ref * added public recipe pagination route * refactored frontend public/explore API * fixed broken public cards * hid context menu from cards when public * fixed public app header * fixed random recipe * added public food, category, tag, and tool routes * not sure why I thought that would work * added public organizer/foods stores * disabled clicking on tags/categories * added public link to profile page * linting * force a 404 if the group slug is missing or invalid * oops * refactored to fit sidebar into explore * fixed invalid logic for app header * removed most sidebar options from public * added backend routes for public cookbooks * added explore cookbook pages/apis * codegen * added backend tests * lint * fixes v-for keys * I do not understand but sure why not --------- Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
145 lines
4.4 KiB
Python
145 lines
4.4 KiB
Python
from abc import ABC
|
|
from logging import Logger
|
|
|
|
from fastapi import Depends
|
|
from pydantic import UUID4
|
|
from sqlalchemy.orm import Session
|
|
|
|
from mealie.core.config import get_app_dirs, get_app_settings
|
|
from mealie.core.dependencies.dependencies import get_admin_user, get_current_user, get_integration_id, get_public_group
|
|
from mealie.core.exceptions import mealie_registered_exceptions
|
|
from mealie.core.root_logger import get_logger
|
|
from mealie.core.settings.directories import AppDirectories
|
|
from mealie.core.settings.settings import AppSettings
|
|
from mealie.db.db_setup import generate_session
|
|
from mealie.lang import local_provider
|
|
from mealie.lang.providers import Translator
|
|
from mealie.repos.all_repositories import AllRepositories
|
|
from mealie.routes._base.checks import OperationChecks
|
|
from mealie.schema.user.user import GroupInDB, PrivateUser
|
|
from mealie.services.event_bus_service.event_bus_service import EventBusService
|
|
from mealie.services.event_bus_service.event_types import EventDocumentDataBase, EventTypes
|
|
|
|
|
|
class _BaseController(ABC):
|
|
session: Session = Depends(generate_session)
|
|
translator: Translator = Depends(local_provider)
|
|
|
|
_repos: AllRepositories | None
|
|
_logger: Logger | None
|
|
_settings: AppSettings | None
|
|
_folders: AppDirectories | None
|
|
|
|
@property
|
|
def t(self):
|
|
return self.translator.t if self.translator else local_provider().t
|
|
|
|
@property
|
|
def repos(self):
|
|
if not self._repos:
|
|
self._repos = AllRepositories(self.session)
|
|
return self._repos
|
|
|
|
@property
|
|
def logger(self) -> Logger:
|
|
if not self._logger:
|
|
self._logger = get_logger()
|
|
return self._logger
|
|
|
|
@property
|
|
def settings(self) -> AppSettings:
|
|
if not self._settings:
|
|
self._settings = get_app_settings()
|
|
return self._settings
|
|
|
|
@property
|
|
def folders(self) -> AppDirectories:
|
|
if not self._folders:
|
|
self._folders = get_app_dirs()
|
|
return self._folders
|
|
|
|
class Config:
|
|
arbitrary_types_allowed = True
|
|
|
|
|
|
class BasePublicController(_BaseController):
|
|
"""
|
|
This is a public class for all User restricted controllers in the API.
|
|
It includes the common SharedDependencies and some common methods used
|
|
by all Admin controllers.
|
|
"""
|
|
|
|
...
|
|
|
|
|
|
class BasePublicExploreController(BasePublicController):
|
|
"""
|
|
This is a public class for all User restricted controllers in the API.
|
|
It includes the common SharedDependencies and some common methods used
|
|
by all Admin controllers.
|
|
"""
|
|
|
|
group: GroupInDB = Depends(get_public_group)
|
|
|
|
|
|
class BaseUserController(_BaseController):
|
|
"""
|
|
This is a base class for all User restricted controllers in the API.
|
|
It includes the common SharedDependencies and some common methods used
|
|
by all Admin controllers.
|
|
"""
|
|
|
|
user: PrivateUser = Depends(get_current_user)
|
|
integration_id: str = Depends(get_integration_id)
|
|
translator: Translator = Depends(local_provider)
|
|
|
|
# Manual Cache
|
|
_checks: OperationChecks
|
|
|
|
def registered_exceptions(self, ex: type[Exception]) -> str:
|
|
registered = {
|
|
**mealie_registered_exceptions(self.translator),
|
|
}
|
|
return registered.get(ex, self.t("generic.server-error"))
|
|
|
|
@property
|
|
def group_id(self) -> UUID4:
|
|
return self.user.group_id
|
|
|
|
@property
|
|
def group(self) -> GroupInDB:
|
|
return self.repos.groups.get_one(self.group_id)
|
|
|
|
@property
|
|
def checks(self) -> OperationChecks:
|
|
if not self._checks:
|
|
self._checks = OperationChecks(self.user)
|
|
return self._checks
|
|
|
|
|
|
class BaseAdminController(BaseUserController):
|
|
"""
|
|
This is a base class for all Admin restricted controllers in the API.
|
|
It includes the common Shared Dependencies and some common methods used
|
|
by all Admin controllers.
|
|
"""
|
|
|
|
user: PrivateUser = Depends(get_admin_user)
|
|
|
|
|
|
class BaseCrudController(BaseUserController):
|
|
"""
|
|
Base class for all CRUD controllers to facilitate common CRUD functions.
|
|
"""
|
|
|
|
event_bus: EventBusService = Depends(EventBusService.create)
|
|
|
|
def publish_event(self, event_type: EventTypes, document_data: EventDocumentDataBase, message: str = "") -> None:
|
|
self.event_bus.dispatch(
|
|
integration_id=self.integration_id,
|
|
group_id=self.group_id,
|
|
event_type=event_type,
|
|
document_data=document_data,
|
|
message=message,
|
|
)
|