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
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for endpoints for training sessions."""
3from datetime import datetime
4from typing import Annotated
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
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
23router = APIRouter()
26class TrainingSessionFilter(BaseModel):
27 """A JSON:API filter for training sessions."""
29 start: datetime = Field(Query(alias="filter[start]"))
30 end: datetime = Field(Query(alias="filter[end]"))
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()
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
65 return presenter.get_document()