"""Base repository with common DB helpers.""" from __future__ import annotations from sqlalchemy import text from sqlalchemy.engine import Connection class BaseRepository: def __init__(self, db: Connection): self._db = db def _execute(self, query: str, params: dict | None = None): return self._db.execute(text(query), params or {}) def _fetchone(self, query: str, params: dict | None = None) -> dict | None: row = self._db.execute(text(query), params or {}).fetchone() if row is None: return None return dict(row._mapping) def _fetchall(self, query: str, params: dict | None = None) -> list[dict]: rows = self._db.execute(text(query), params or {}).fetchall() return [dict(r._mapping) for r in rows] def _lastrowid(self, query: str, params: dict | None = None) -> int: result = self._db.execute(text(query), params or {}) return result.lastrowid