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

1"""Module that defines the routes for the coach frontend application.""" 

2 

3from pathlib import Path 

4from typing import Annotated 

5 

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 

11 

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 

17 

18 

19APP_NAME = "coach" 

20 

21router = APIRouter(prefix=f"/{APP_NAME}") 

22 

23_coach_vite_dependency = ViteDependency(APP_NAME) 

24 

25 

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 

48 

49 asset_file_path = vite.get_asset_path(path) 

50 if asset_file_path is not None: 

51 return EtagFileResponse(asset_file_path) 

52 

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"]) 

56 

57 if coach is None: 

58 coach_data = {} 

59 else: 

60 coach_data = {"uuid": str(coach.uuid)} 

61 

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 )