37 lines
1010 B
Python
37 lines
1010 B
Python
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() |