Source code for views.index

"""Router for the Home of the Website"""
import fastapi
from fastapi import Depends
from fastapi.responses import HTMLResponse
from sqlalchemy.orm import Session
from starlette.requests import Request
from starlette.templating import Jinja2Templates

from db.database import get_db
from schemes import Allergies
from schemes import Cuisine
from schemes import scheme_cuisine
from schemes import scheme_filter
from schemes.scheme_user import UserLogin
from services import service_res
from tools.security import get_current_user
from tools.legal import read_legal

templates = Jinja2Templates("templates")
router = fastapi.APIRouter()


[docs]@router.get("/main", response_class=HTMLResponse) def main(request: Request, current_user: UserLogin = Depends(get_current_user), db_session: Session = Depends(get_db)): """Return the renderd template for the /main.html Args: request (Request): Requerd for Template current_user (UserLogin, optional): the current user logged in. Defaults to Depends(get_current_user). db_session (Session, optional): the db session. Defaults to Depends(get_db). Returns: TemplateResponse: the http response """ # request filter of user rest_filter_db = service_res.get_rest_filter_from_user(db_session=db_session, user=current_user) # default filter for first login if rest_filter_db is None: cuisine_list = [scheme_cuisine.PydanticCuisine(name=scheme_cuisine.Cuisine.RESTAURANT.value)] rest_filter_db = scheme_filter.FilterRestDatabase( cuisines=cuisine_list, allergies=None, rating=4, costs=2, radius=5000, manuell_location="Friedrichshafen" ) service_res.create_rest_filter(db_session=db_session, filter_rest=rest_filter_db, user=current_user) # rest_filter-cuisine to comma seperated str cuisines_selected: str = ",".join([cuisine.name for cuisine in rest_filter_db.cuisines]) # cuisine_options from Enum to comma seperated str cuisines_options: str = ",".join([cuisine.value for cuisine in Cuisine]) allergies_selected = "" if rest_filter_db.allergies is not None: allergies_selected: str = ",".join([allergie.name for allergie in rest_filter_db.allergies]) allergies_options: str = ",".join([allergie.value for allergie in Allergies]) return templates.TemplateResponse( "main.html", { "request": request, "rest_filter": rest_filter_db, "cuisines_selected": cuisines_selected, "cuisines_selected_arr": [cuisine.name for cuisine in rest_filter_db.cuisines], "cuisines_options": cuisines_options, "cuisines_options_arr": [cuisine.value for cuisine in Cuisine], "allergies_selected": allergies_selected, "allergies_selected_arr": allergies_selected.split(","), "allergies_options": allergies_options, "allergies_options_arr": allergies_options.split(","), "username": current_user.email, }, )
[docs]@router.get("/", response_class=HTMLResponse) def index(request: Request, db_session: Session = Depends(get_db)): # <- REMOVE DB WITH MOCKED USER """Return landing page for new users Args: request (Request): the http request db_session (Session, optional): the db session. Defaults to Depends(get_db). Returns: TemplateResponse: the http response """ # TODO: Remove Mocked User ########## try: from db.crud.user import create_user from schemes.scheme_user import UserCreate from schemes.exceptions import DuplicateEntry create_user(db_session, UserCreate(email="example@gmx.de", password="password")) except DuplicateEntry: db_session.rollback() ############ END REMOVE ############### return templates.TemplateResponse("index.html", {"request": request})
[docs]@router.get("/impressum", response_class=HTMLResponse) def impressum(request: Request): """Return legal page Args: request (Request): the http request Returns: TemplateResponse: the http response """ return templates.TemplateResponse("impressum.html", {"request": request, "entity": read_legal()})