feat: create backend skeleton

This commit is contained in:
h
2026-05-29 16:11:41 +02:00
parent e08d26dd10
commit 62aac0bf32
37 changed files with 1591 additions and 3 deletions
+30
View File
@@ -0,0 +1,30 @@
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
import asyncpg
from dishka.integrations.fastapi import FromDishka, inject, setup_dishka
from fastapi import FastAPI
from dependencies.container import container
@asynccontextmanager
async def lifespan(app_: FastAPI) -> AsyncGenerator[None]:
yield
await app_.state.dishka_container.close()
app = FastAPI(title="beavergram API", lifespan=lifespan)
@app.get("/health")
@inject
async def health(pool: FromDishka[asyncpg.Pool]) -> dict[str, bool]:
db_ok = await pool.fetchval("SELECT 1") == 1
timescale_ok = await pool.fetchval(
"SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'timescaledb')"
)
return {"db": db_ok, "timescaledb": bool(timescale_ok)}
setup_dishka(container, app)