diff --git a/rating_api/exceptions.py b/rating_api/exceptions.py index 2ac6ca7..6f74963 100644 --- a/rating_api/exceptions.py +++ b/rating_api/exceptions.py @@ -15,7 +15,7 @@ class ObjectNotFound(RatingAPIError): def __init__(self, obj: type, obj_id_or_name: int | str): super().__init__( f"Object {obj.__name__} {obj_id_or_name=} not found", - f"Объект {obj.__name__} с идентификатором {obj_id_or_name} не найден", + f"Объект {obj.__name__} с идентификатором {obj_id_or_name} не найден", ) diff --git a/rating_api/routes/lecturer.py b/rating_api/routes/lecturer.py index 2175cb9..26e72c5 100644 --- a/rating_api/routes/lecturer.py +++ b/rating_api/routes/lecturer.py @@ -90,6 +90,16 @@ async def update_lecturer_rating( return response_validated +@lecturer.get("/timetable-id/{timetable_id}", response_model=LecturerGet) +async def get_lecturer_by_timetable_id(timetable_id: int) -> LecturerGet: + """ + Возвращает преподавателя по его timetable_id + """ + lecturer: Lecturer = Lecturer.query(session=db.session).filter(Lecturer.timetable_id == timetable_id).one_or_none() + if lecturer is None: + raise ObjectNotFound(Lecturer, timetable_id) + return LecturerGet.model_validate(lecturer) + @lecturer.get("/{id}", response_model=LecturerGet) async def get_lecturer(id: int, info: list[Literal["comments"]] = Query(default=[])) -> LecturerGet: diff --git a/tests/test_routes/test_lecturer.py b/tests/test_routes/test_lecturer.py index 3d4beed..f28fee7 100644 --- a/tests/test_routes/test_lecturer.py +++ b/tests/test_routes/test_lecturer.py @@ -29,6 +29,28 @@ def test_create_lecturer(client, dbsession, response_status): lecturer = dbsession.query(Lecturer).filter(Lecturer.timetable_id == 0).one_or_none() assert lecturer is None +@pytest.mark.parametrize( + 'lecturer_n, response_status', + [ + (0, status.HTTP_200_OK), + (1, status.HTTP_200_OK), + (2, status.HTTP_200_OK), + (3, status.HTTP_404_NOT_FOUND), + ], +) +def test_get_lecturer_by_timetable_id(client, dbsession, lecturers, lecturer_n, response_status): + lecturer = ( + dbsession.query(Lecturer).filter(Lecturer.timetable_id == lecturers[lecturer_n].timetable_id).one_or_none() + ) + timetable_id = -1 + if lecturer: + timetable_id = lecturer.timetable_id + get_response = client.get(f'{url}/timetable-id/{timetable_id}') + assert get_response.status_code == response_status + if response_status == status.HTTP_200_OK: + json_response = get_response.json() + assert json_response["id"] == lecturer.id + @pytest.mark.parametrize( 'lecturer_n,response_status',