ForcePilot/backend/package/yuxi/repositories/base_repository.py
Kris 41bd0a618c refactor: 统一将日志方法从 warn 改为 warning
将代码库中所有使用 logger.warn 的地方替换为标准的 logger.warning,对齐日志方法命名规范,修复多处测试和业务代码中的方法调用不匹配问题。
2026-07-13 17:32:29 +08:00

39 lines
1.2 KiB
Python

"""BaseRepository: enforces transaction boundary at UoW layer.
Repository layer must NOT commit/rollback. Use _flush() instead.
Transaction boundary is controlled by SharedUnitOfWork in Service/UseCase layer.
"""
from __future__ import annotations
from sqlalchemy.ext.asyncio import AsyncSession
class BaseRepository:
"""Base repository class that prohibits commit/rollback.
Subclasses should use self.db for ORM operations and
await self._flush to get DB-generated values,
but must NEVER call self.db.commit or self.db.rollback.
"""
def __init__(self, db: AsyncSession) -> None:
self._db = db
@property
def db(self) -> AsyncSession:
return self._db
async def _flush(self) -> None:
"""Flush to DB without committing. Safe alternative to commit."""
await self._db.flush()
async def commit(self) -> None:
raise NotImplementedError(
"Repository must not commit. Use SharedUnitOfWork for transaction control."
)
async def rollback(self) -> None:
raise NotImplementedError(
"Repository must not rollback. Use SharedUnitOfWork for transaction control."
)