diff --git a/src/app/core/config.py b/src/app/core/config.py index 2147f66..0d1229e 100644 --- a/src/app/core/config.py +++ b/src/app/core/config.py @@ -18,13 +18,38 @@ class CryptSettings(BaseSettings): ACCESS_TOKEN_EXPIRE_MINUTES: int = config("ACCESS_TOKEN_EXPIRE_MINUTES") -class PostgresSettings(BaseSettings): +class DatabaseSettings(BaseSettings): + pass + + +class SQLiteSettings(DatabaseSettings): + SQLITE_URI: str = config("SQLITE_URI", default="./sql_app.db") + SQLITE_SYNC_PREFIX: str = config("SQLITE_SYNC_PREFIX", default="sqlite:///") + SQLITE_ASYNC_PREFIX: str = config("SQLITE_ASYNC_PREFIX", default="sqlite+aiosqlite:///") + + +class MySQLSettings(DatabaseSettings): + MYSQL_USER: str = config("MYSQL_USER", default="username") + MYSQL_PASSWORD: str = config("MYSQL_PASSWORD", default="password") + MYSQL_SERVER: str = config("MYSQL_SERVER", default="localhost") + MYSQL_PORT: str = config("MYSQL_PORT", default=5432) + MYSQL_DB: str = config("MYSQL_DB", default="dbname") + MYSQL_URI: str = f"{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_SERVER}:{MYSQL_PORT}/{MYSQL_DB}" + MYSQL_SYNC_PREFIX: str = config("MYSQL_SYNC_PREFIX", default="mysql://") + MYSQL_ASYNC_PREFIX: str = config("MYSQL_ASYNC_PREFIX", default="mysql+aiomysql://") + MYSQL_URL: str = config("MYSQL_URL", default=None) + + +class PostgresSettings(DatabaseSettings): POSTGRES_USER: str = config("POSTGRES_USER", default="postgres") POSTGRES_PASSWORD: str = config("POSTGRES_PASSWORD", default="postgres") POSTGRES_SERVER: str = config("POSTGRES_SERVER", default="localhost") POSTGRES_PORT: str = config("POSTGRES_PORT", default=5432) POSTGRES_DB: str = config("POSTGRES_DB", default="postgres") + POSTGRES_SYNC_PREFIX: str = config("POSTGRES_SYNC_PREFIX", default="postgresql://") + POSTGRES_ASYNC_PREFIX: str = config("POSTGRES_ASYNC_PREFIX", default="postgresql+asyncpg://") POSTGRES_URI: str = f"{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_SERVER}:{POSTGRES_PORT}/{POSTGRES_DB}" + POSTGRES_URL: str | None = config("POSTGRES_URL", default=None) class FirstUserSettings(BaseSettings): diff --git a/src/app/core/database.py b/src/app/core/database.py index 9775ae7..25289c1 100644 --- a/src/app/core/database.py +++ b/src/app/core/database.py @@ -9,11 +9,12 @@ class Base(DeclarativeBase, MappedAsDataclass): pass DATABASE_URI = settings.POSTGRES_URI -ASYNC_SQLALCHEMY_DATABASE_URL = f"postgresql+asyncpg://{DATABASE_URI}" +DATABASE_PREFIX = settings.POSTGRES_ASYNC_PREFIX +DATABASE_URL = f"{DATABASE_PREFIX}{DATABASE_URI}" async_engine = create_async_engine( - ASYNC_SQLALCHEMY_DATABASE_URL, - echo=False, + DATABASE_URL, + echo=False, future=True ) diff --git a/src/app/main.py b/src/app/main.py index 58d52da..c23a2fe 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -3,7 +3,7 @@ from app.core.database import Base from app.core.database import async_engine as engine -from app.core.config import settings +from app.core.config import settings, DatabaseSettings, RedisCacheSettings, AppSettings from app.api import router from app.core import cache @@ -25,17 +25,24 @@ async def close_redis_cache_pool(): # -------------- application -------------- def create_application() -> FastAPI: - application = FastAPI( - title=settings.APP_NAME, - description=settings.APP_DESCRIPTION, - contact=settings.CONTACT, - license_info=settings.CONTACT - ) + if isinstance(settings, AppSettings): + application = FastAPI( + title=settings.APP_NAME, + description=settings.APP_DESCRIPTION, + contact=settings.CONTACT, + license_info=settings.CONTACT + ) + else: + application = FastAPI() application.include_router(router) - application.add_event_handler("startup", create_tables) - application.add_event_handler("startup", create_redis_cache_pool) - application.add_event_handler("shutdown", close_redis_cache_pool) + + if isinstance(settings, DatabaseSettings): + application.add_event_handler("startup", create_tables) + + if isinstance(settings, RedisCacheSettings): + application.add_event_handler("startup", create_redis_cache_pool) + application.add_event_handler("shutdown", close_redis_cache_pool) return application