초기 커밋
This commit is contained in:
0
app/db/__init__.py
Normal file
0
app/db/__init__.py
Normal file
22
app/db/base.py
Normal file
22
app/db/base.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import func
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class TimestampMixin(SQLModel):
|
||||
created_at: datetime = Field(
|
||||
default_factory=datetime.utcnow,
|
||||
sa_column_kwargs={"server_default": func.now()},
|
||||
)
|
||||
updated_at: datetime = Field(
|
||||
default_factory=datetime.utcnow,
|
||||
sa_column_kwargs={"server_default": func.now(), "onupdate": func.now()},
|
||||
)
|
||||
|
||||
|
||||
class SoftDeleteMixin(SQLModel):
|
||||
is_deleted: bool = Field(default=False)
|
||||
deleted_at: datetime | None = Field(default=None)
|
||||
42
app/db/mariadb.py
Normal file
42
app/db/mariadb.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlmodel import SQLModel
|
||||
|
||||
from app.core.config import settings
|
||||
|
||||
async_engine = create_async_engine(
|
||||
settings.MARIADB_DSN,
|
||||
echo=settings.DEBUG,
|
||||
pool_pre_ping=True,
|
||||
pool_size=10,
|
||||
max_overflow=20,
|
||||
)
|
||||
|
||||
AsyncSessionLocal = sessionmaker(
|
||||
bind=async_engine,
|
||||
class_=AsyncSession,
|
||||
expire_on_commit=False,
|
||||
)
|
||||
|
||||
|
||||
async def init_mariadb() -> None:
|
||||
async with async_engine.begin() as conn:
|
||||
await conn.run_sync(SQLModel.metadata.create_all)
|
||||
|
||||
|
||||
async def close_mariadb() -> None:
|
||||
await async_engine.dispose()
|
||||
|
||||
|
||||
async def get_db() -> AsyncGenerator[AsyncSession, None]:
|
||||
async with AsyncSessionLocal() as session:
|
||||
try:
|
||||
yield session
|
||||
await session.commit()
|
||||
except Exception:
|
||||
await session.rollback()
|
||||
raise
|
||||
37
app/db/mongodb.py
Normal file
37
app/db/mongodb.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from beanie import init_beanie
|
||||
from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase
|
||||
|
||||
from app.core.config import settings
|
||||
|
||||
mongo_client: AsyncIOMotorClient | None = None
|
||||
mongo_db: AsyncIOMotorDatabase | None = None
|
||||
|
||||
|
||||
async def init_mongodb() -> None:
|
||||
global mongo_client, mongo_db
|
||||
|
||||
mongo_client = AsyncIOMotorClient(settings.MONGODB_URL)
|
||||
mongo_db = mongo_client[settings.MONGODB_DATABASE]
|
||||
|
||||
from app.models.mongodb.analytics_result import AnalyticsResult
|
||||
from app.models.mongodb.device_log import DeviceLog
|
||||
from app.models.mongodb.notification import Notification
|
||||
from app.models.mongodb.telemetry import TelemetryData
|
||||
|
||||
await init_beanie(
|
||||
database=mongo_db,
|
||||
document_models=[DeviceLog, TelemetryData, AnalyticsResult, Notification],
|
||||
)
|
||||
|
||||
|
||||
async def close_mongodb() -> None:
|
||||
global mongo_client
|
||||
if mongo_client:
|
||||
mongo_client.close()
|
||||
|
||||
|
||||
def get_mongo_db() -> AsyncIOMotorDatabase:
|
||||
assert mongo_db is not None, "MongoDB not initialized"
|
||||
return mongo_db
|
||||
27
app/db/redis.py
Normal file
27
app/db/redis.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from redis.asyncio import Redis, from_url
|
||||
|
||||
from app.core.config import settings
|
||||
|
||||
redis_client: Redis | None = None
|
||||
|
||||
|
||||
async def init_redis() -> None:
|
||||
global redis_client
|
||||
redis_client = from_url(
|
||||
settings.REDIS_URL,
|
||||
encoding="utf-8",
|
||||
decode_responses=True,
|
||||
)
|
||||
|
||||
|
||||
async def close_redis() -> None:
|
||||
global redis_client
|
||||
if redis_client:
|
||||
await redis_client.close()
|
||||
|
||||
|
||||
def get_redis() -> Redis:
|
||||
assert redis_client is not None, "Redis not initialized"
|
||||
return redis_client
|
||||
Reference in New Issue
Block a user