Coverage for apps/kwai-api/src/kwai_api/frontend/apps/_coach.py: 50%
34 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module that defines the routes for the coach frontend application."""
3from pathlib import Path
4from typing import Annotated
6from fastapi import APIRouter, Depends, Request, Response
7from fastapi.responses import RedirectResponse
8from fastapi.templating import Jinja2Templates
9from kwai_bc_club.domain.club_coach import ClubCoachEntity
10from kwai_core.settings import Settings
12from kwai_api.dependencies import create_templates, get_settings
13from kwai_api.frontend.dependencies import ViteDependency
14from kwai_api.frontend.etag_file_response import EtagFileResponse
15from kwai_api.frontend.vite import Vite
16from kwai_api.security_dependencies import check_login, get_coach
19APP_NAME = "coach"
21router = APIRouter(prefix=f"/{APP_NAME}")
23_coach_vite_dependency = ViteDependency(APP_NAME)
26@router.get("/{path:path}", name=APP_NAME)
27async def get_app(
28 path: Path,
29 request: Request,
30 response: Response,
31 templates: Annotated[Jinja2Templates, Depends(create_templates)],
32 vite: Annotated[Vite, Depends(_coach_vite_dependency)],
33 is_logged_in: Annotated[bool, Depends(check_login)],
34 coach: Annotated[ClubCoachEntity | None, Depends(get_coach)],
35 settings: Annotated[Settings, Depends(get_settings)],
36):
37 if not is_logged_in:
38 response = RedirectResponse("/apps/auth/login")
39 redirect_url = "/apps" + router.prefix
40 if str(path) != ".":
41 redirect_url += "/" + str(path)
42 response.set_cookie(
43 key="kwai_redirect",
44 value=redirect_url,
45 secure=settings.frontend.test,
46 )
47 return response
49 asset_file_path = vite.get_asset_path(path)
50 if asset_file_path is not None:
51 return EtagFileResponse(asset_file_path)
53 url = request.url_for(APP_NAME, path="")
54 if "x-forwarded-proto" in request.headers:
55 url = url.replace(scheme=request.headers["x-forwarded-proto"])
57 if coach is None:
58 coach_data = {}
59 else:
60 coach_data = {"uuid": str(coach.uuid)}
62 return templates.TemplateResponse(
63 request,
64 name="apps/coach_index.jinja2",
65 context={
66 "application": {
67 "name": APP_NAME,
68 "url": str(url),
69 },
70 "vite": vite,
71 "coach": coach_data,
72 },
73 headers=response.headers,
74 )