from ast import Dict from typing import Any, Optional from fastapi import status from fastapi.responses import JSONResponse class BaseEndpointResponse: def __init__(self, code: str, lang: str): self.code = code self.lang = lang def retrieve_message(self): messages = {} return messages[self.code][self.lang] # 1. 200 OK class EndpointSuccessResponse(BaseEndpointResponse): def as_dict(self, data: Optional[Dict[str, Any]] = None): return JSONResponse( status_code=status.HTTP_200_OK, content=dict( completed=True, message=self.retrieve_message(), lang=self.lang, data=data ) ) # 2. 201 Created class EndpointCreatedResponse(BaseEndpointResponse): def as_dict(self, data: Optional[Dict[str, Any]] = None): return JSONResponse( status_code=status.HTTP_201_CREATED, content=dict( completed=True, message=self.retrieve_message(), lang=self.lang, data=data ) ) # 3. 202 Accepted class EndpointAcceptedResponse(BaseEndpointResponse): def as_dict(self, data: Optional[Dict[str, Any]] = None): return JSONResponse( status_code=status.HTTP_202_ACCEPTED, content=dict( completed=True, message=self.retrieve_message(), lang=self.lang, data=data ) ) # 4. 400 Bad Request class EndpointBadRequestResponse(BaseEndpointResponse): def as_dict(self, data: Optional[Dict[str, Any]] = None): return JSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang, data=data ) ) # 5. 401 Unauthorized class EndpointUnauthorizedResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_401_UNAUTHORIZED, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) # 6. 404 Not Found class EndpointNotFoundResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_404_NOT_FOUND, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) # 3. 403 Forbidden class EndpointForbiddenResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_403_FORBIDDEN, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) # 6. 409 Conflict class EndpointConflictResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_409_CONFLICT, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) # 7. 429 Too Many Requests class EndpointTooManyRequestsResponse(BaseEndpointResponse): def __init__(self, retry_after: int): self.retry_after = retry_after def as_dict(self): return JSONResponse( status_code=status.HTTP_429_TOO_MANY_REQUESTS, headers={"Retry-After": str(self.retry_after)}, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) # 7. 500 Internal Server Error class EndpointInternalErrorResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) ) class EndpointErrorResponse(BaseEndpointResponse): def as_dict(self): return JSONResponse( status_code=status.HTTP_304_NOT_MODIFIED, content=dict( completed=False, message=self.retrieve_message(), lang=self.lang ) )