From 18abf8759874112425c2bf84d81459fee4fcd569 Mon Sep 17 00:00:00 2001 From: Artem Litvinov Date: Mon, 2 Oct 2023 20:08:31 +0100 Subject: [PATCH] build: joke handler & app --- .../lib/api/v1/handlers/__init__.py | 8 ++--- src/fastapi_app/lib/api/v1/handlers/joke.py | 35 +++++++++++-------- src/fastapi_app/lib/app/app.py | 8 +++-- src/fastapi_app/lib/clients/__init__.py | 3 +- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/fastapi_app/lib/api/v1/handlers/__init__.py b/src/fastapi_app/lib/api/v1/handlers/__init__.py index cfea8ca..0335d3f 100644 --- a/src/fastapi_app/lib/api/v1/handlers/__init__.py +++ b/src/fastapi_app/lib/api/v1/handlers/__init__.py @@ -1,6 +1,4 @@ -from .health import * -from .joke import get_joke, joke_router +from .health import basic_router +from .joke import JokeHandler -__all__ = [ - "basic_router", "joke_router", "get_joke" -] +__all__ = ["JokeHandler", "basic_router"] diff --git a/src/fastapi_app/lib/api/v1/handlers/joke.py b/src/fastapi_app/lib/api/v1/handlers/joke.py index 50226a9..066e642 100644 --- a/src/fastapi_app/lib/api/v1/handlers/joke.py +++ b/src/fastapi_app/lib/api/v1/handlers/joke.py @@ -1,22 +1,27 @@ import fastapi import lib.api.v1.schemas as api_shemas -import lib.joke.services as services - -joke_router = fastapi.APIRouter() +import lib.joke.services as joke_services -@joke_router.get( - "/", - response_model=api_shemas.JokeResponse, - summary="Random joke", - description="Return a random joke from a free API.", -) -async def get_joke(joke_service: services.JokeService): - joke = await joke_service.get_joke() - if joke: - return api_shemas.JokeResponse( - joke=f"{joke.setup}\n{joke.punchline}", id=joke.id_field, category=joke.type_field +class JokeHandler: + router = fastapi.APIRouter() + + def __init__(self, joke_service: joke_services.JokeService): + self.joke_service = joke_service + self.router = fastapi.APIRouter() + self.router.add_api_route( + "/", + self.get_joke, + methods=["GET"], + summary="Статус работоспособности", + description="Проверяет доступность сервиса FastAPI.", ) - return api_shemas.JokeResponse(joke="No joke for you!", id=0, category="No category") + async def get_joke(self): + joke = await self.joke_service.get_joke() + if joke: + return api_shemas.JokeResponse( + joke=f"{joke.setup}\n{joke.punchline}", id=joke.id_field, category=joke.type_field + ) + return api_shemas.JokeResponse(joke="No joke for you!", id=0, category="No category") diff --git a/src/fastapi_app/lib/app/app.py b/src/fastapi_app/lib/app/app.py index c63283e..1366d98 100644 --- a/src/fastapi_app/lib/app/app.py +++ b/src/fastapi_app/lib/app/app.py @@ -11,6 +11,7 @@ import lib.app.errors as app_errors import lib.app.settings as app_settings import lib.app.split_settings as app_split_settings import lib.clients as clients +import lib.joke.repository as joke_repository import lib.joke.services as joke_services logger = logging.getLogger(__name__) @@ -46,7 +47,6 @@ class Application: logger.info("Initializing global clients") postgres_client = clients.AsyncPostgresClient(settings=settings) - http_client = clients.get_async_http_session() disposable_resources.append( DisposableResource( @@ -62,6 +62,7 @@ class Application: # Repositories logger.info("Initializing repositories") + jk_repository = joke_repository.JokeRepository(async_session=postgres_client.get_async_session()) # Caches @@ -70,13 +71,13 @@ class Application: # Services logger.info("Initializing services") - jk_serivces = joke_services.JokeService(http_client=http_client) + jk_serivces = joke_services.JokeService(jk_repository) # Handlers logger.info("Initializing handlers") liveness_probe_handler = api_v1_handlers.basic_router - joke_handler = api_v1_handlers.get_joke(joke_service=jk_serivces) + joke_handler = api_v1_handlers.JokeHandler(joke_service=jk_serivces).router logger.info("Creating application") @@ -90,6 +91,7 @@ class Application: # Routes fastapi_app.include_router(liveness_probe_handler, prefix="/api/v1/health", tags=["health"]) + fastapi_app.include_router(joke_handler, prefix="/test", tags=["some"]) application = Application( settings=settings, diff --git a/src/fastapi_app/lib/clients/__init__.py b/src/fastapi_app/lib/clients/__init__.py index 40d0e2f..1fbe64c 100644 --- a/src/fastapi_app/lib/clients/__init__.py +++ b/src/fastapi_app/lib/clients/__init__.py @@ -1,4 +1,3 @@ -from .httpx import get_async_http_session from .postgres import AsyncPostgresClient -__all__ = ["AsyncPostgresClient", "get_async_http_session"] +__all__ = ["AsyncPostgresClient"]