|
11 | 11 | from todo.dto.responses.get_user_teams_response import GetUserTeamsResponse
|
12 | 12 | from todo.dto.responses.error_response import ApiErrorResponse, ApiErrorDetail, ApiErrorSource
|
13 | 13 | from todo.constants.messages import ApiErrors
|
| 14 | +from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiResponse |
| 15 | +from drf_spectacular.types import OpenApiTypes |
| 16 | +from todo.dto.team_dto import TeamDTO |
14 | 17 |
|
15 | 18 |
|
16 | 19 | class TeamListView(APIView):
|
@@ -90,3 +93,46 @@ def _handle_validation_errors(self, errors):
|
90 | 93 | error_response = ApiErrorResponse(statusCode=400, message=ApiErrors.VALIDATION_ERROR, errors=formatted_errors)
|
91 | 94 |
|
92 | 95 | return Response(data=error_response.model_dump(mode="json"), status=status.HTTP_400_BAD_REQUEST)
|
| 96 | + |
| 97 | + |
| 98 | +class TeamDetailView(APIView): |
| 99 | + @extend_schema( |
| 100 | + operation_id="get_team_by_id", |
| 101 | + summary="Get team by ID", |
| 102 | + description="Retrieve a single team by its unique identifier", |
| 103 | + tags=["teams"], |
| 104 | + parameters=[ |
| 105 | + OpenApiParameter( |
| 106 | + name="team_id", |
| 107 | + type=OpenApiTypes.STR, |
| 108 | + location=OpenApiParameter.PATH, |
| 109 | + description="Unique identifier of the team", |
| 110 | + ), |
| 111 | + ], |
| 112 | + responses={ |
| 113 | + 200: OpenApiResponse(description="Team retrieved successfully"), |
| 114 | + 404: OpenApiResponse(description="Team not found"), |
| 115 | + 500: OpenApiResponse(description="Internal server error"), |
| 116 | + }, |
| 117 | + ) |
| 118 | + def get(self, request: Request, team_id: str): |
| 119 | + """ |
| 120 | + Retrieve a single team by ID. |
| 121 | + """ |
| 122 | + try: |
| 123 | + team_dto: TeamDTO = TeamService.get_team_by_id(team_id) |
| 124 | + return Response(data=team_dto.model_dump(mode="json"), status=status.HTTP_200_OK) |
| 125 | + except ValueError as e: |
| 126 | + fallback_response = ApiErrorResponse( |
| 127 | + statusCode=404, |
| 128 | + message=str(e), |
| 129 | + errors=[{"detail": str(e)}], |
| 130 | + ) |
| 131 | + return Response(data=fallback_response.model_dump(mode="json"), status=404) |
| 132 | + except Exception as e: |
| 133 | + fallback_response = ApiErrorResponse( |
| 134 | + statusCode=500, |
| 135 | + message=ApiErrors.UNEXPECTED_ERROR_OCCURRED, |
| 136 | + errors=[{"detail": str(e) if settings.DEBUG else ApiErrors.INTERNAL_SERVER_ERROR}], |
| 137 | + ) |
| 138 | + return Response(data=fallback_response.model_dump(mode="json"), status=500) |
0 commit comments