From fa1228039e919ee26f2b4a585635db7e80025975 Mon Sep 17 00:00:00 2001 From: herrdelta83 Date: Fri, 10 Apr 2026 14:27:14 -0600 Subject: [PATCH] chore: requieiremens(Added SQLAlchemy, asyncpg, aiosqlite, pytest, httpx, email-validato), .env.example(Added DATABASE_URL), oconfig.py (added database_url), main.py (Added DB lifespan), router.py (usuarios_router.py) --- backend/.env.example | 1 + backend/app/core/config.py | 1 + backend/app/main.py | 20 +++++++++++++++++++- backend/requirements.txt | 7 +++++++ docs/database-design.pdf | Bin 629822 -> 651017 bytes 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/.env.example b/backend/.env.example index fd42e4c..c831f49 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,3 +1,4 @@ APP_NAME="Temis RiskControl API" APP_VERSION="0.1.0" DEBUG=false +DATABASE_URL="postgresql+asyncpg://user:password@localhost:5432/temis" diff --git a/backend/app/core/config.py b/backend/app/core/config.py index e11676c..69b5bdc 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -5,6 +5,7 @@ class Settings(BaseSettings): app_name: str = "Temis RiskControl API" app_version: str = "0.1.0" debug: bool = False + database_url: str = "sqlite+aiosqlite:///./temis.db" model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8") diff --git a/backend/app/main.py b/backend/app/main.py index d300f9f..454287a 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,9 +1,27 @@ +from contextlib import asynccontextmanager +from collections.abc import AsyncGenerator + from fastapi import FastAPI from app.api.router import api_router from app.core.config import settings +from app.database.base import Base +from app.database.session import engine + + +@asynccontextmanager +async def lifespan(application: FastAPI) -> AsyncGenerator[None, None]: + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + yield + -app = FastAPI(title=settings.app_name, version=settings.app_version, debug=settings.debug) +app = FastAPI( + title=settings.app_name, + version=settings.app_version, + debug=settings.debug, + lifespan=lifespan, +) app.include_router(api_router) diff --git a/backend/requirements.txt b/backend/requirements.txt index dad5104..4b0bc49 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,3 +1,10 @@ fastapi==0.115.12 uvicorn[standard]==0.34.0 pydantic-settings==2.8.1 +pydantic[email]==2.11.3 +sqlalchemy[asyncio]==2.0.40 +asyncpg==0.30.0 +aiosqlite==0.20.0 +pytest==8.3.5 +pytest-asyncio==0.24.0 +httpx==0.28.1 diff --git a/docs/database-design.pdf b/docs/database-design.pdf index 47fb84f4daa4220b458913ba64fd20fe0728918e..5d594c682d9b6dec7e935ff28c9c2e9fa6059916 100644 GIT binary patch delta 66430 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 X(CDxX=Qy}H$D!iY-}v$9tn>c>vp@qH delta 45257 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