from abc import ABC, abstractmethod from typing import TypeVar, Generic, List, Optional, Dict, Any from sqlalchemy.orm import Query from models import db T = TypeVar('T') class BaseRepository(Generic[T], ABC): """Repository de base avec opérations CRUD.""" def __init__(self, model_class: type): self.model_class = model_class self.session = db.session def find_by_id(self, id: int) -> Optional[T]: return self.session.get(self.model_class, id) def find_all(self) -> List[T]: return self.model_class.query.all() def save(self, entity: T) -> T: self.session.add(entity) return entity def delete(self, entity: T) -> None: self.session.delete(entity) def commit(self) -> None: self.session.commit() def rollback(self) -> None: self.session.rollback() def flush(self) -> None: """Flush pour obtenir les IDs sans committer.""" self.session.flush()