Coverage for apps/kwai-api/src/kwai_api/v1/trainings/training_sessions/endpoints.py: 92%

26 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for endpoints for training sessions.""" 

2 

3from datetime import datetime 

4from typing import Annotated 

5 

6from fastapi import APIRouter, Depends, HTTPException, Query, status 

7from kwai_bc_training.coaches.coach_db_repository import CoachDbRepository 

8from kwai_bc_training.coaches.coach_repository import CoachNotFoundException 

9from kwai_bc_training.get_training_sessions import ( 

10 GetTrainingSessions, 

11 GetTrainingSessionsCommand, 

12) 

13from kwai_bc_training.trainings.training_db_repository import TrainingDbRepository 

14from kwai_core.db.database import Database 

15from kwai_core.json_api import PaginationModel 

16from pydantic import BaseModel, Field 

17 

18from kwai_api.dependencies import create_database 

19from kwai_api.v1.trainings.security_dependencies import check_permission 

20from kwai_api.v1.trainings.training_sessions import jsonapi 

21 

22 

23router = APIRouter() 

24 

25 

26class TrainingSessionFilter(BaseModel): 

27 """A JSON:API filter for training sessions.""" 

28 

29 start: datetime = Field(Query(alias="filter[start]")) 

30 end: datetime = Field(Query(alias="filter[end]")) 

31 

32 

33@router.get( 

34 "/trainings/sessions/{coach_uuid}", 

35 responses={status.HTTP_404_NOT_FOUND: {"description": "Coach was not found"}}, 

36 dependencies=[Depends(check_permission)], 

37) 

38async def get_sessions( 

39 coach_uuid: str, 

40 pagination: Annotated[PaginationModel, Depends(PaginationModel)], 

41 training_session_filter: Annotated[ 

42 TrainingSessionFilter, Depends(TrainingSessionFilter) 

43 ], 

44 database: Annotated[Database, Depends(create_database)], 

45) -> jsonapi.TrainingSessionsDocument: 

46 """Get all training sessions of a coach for a given period.""" 

47 command = GetTrainingSessionsCommand( 

48 offset=pagination.offset, 

49 limit=pagination.limit, 

50 coach_uuid=coach_uuid, 

51 start=training_session_filter.start, 

52 end=training_session_filter.end, 

53 ) 

54 presenter = jsonapi.TrainingSessionsPresenter() 

55 

56 try: 

57 await GetTrainingSessions( 

58 TrainingDbRepository(database), CoachDbRepository(database), presenter 

59 ).execute(command) 

60 except CoachNotFoundException as ex: 

61 raise HTTPException( 

62 status_code=status.HTTP_404_NOT_FOUND, detail=str(ex) 

63 ) from ex 

64 

65 return presenter.get_document()