41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
# abstracts/repository.py
|
|
from sqlalchemy.orm import Session
|
|
from database.mysql import SessionLocal
|
|
|
|
|
|
class BaseRepository:
|
|
"""Classe base para repositórios ORM."""
|
|
|
|
def __init__(self):
|
|
self.session: Session = SessionLocal()
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
if exc_type:
|
|
self.session.rollback()
|
|
else:
|
|
self.session.commit()
|
|
self.session.close()
|
|
|
|
# 🔹 Métodos utilitários ORM
|
|
def add(self, instance):
|
|
"""Adiciona um registro."""
|
|
self.session.add(instance)
|
|
self.session.commit()
|
|
self.session.refresh(instance)
|
|
return instance
|
|
|
|
def delete(self, instance):
|
|
"""Remove um registro."""
|
|
self.session.delete(instance)
|
|
self.session.commit()
|
|
|
|
def all(self, model, limit: int = 100):
|
|
"""Retorna todos os registros de um modelo."""
|
|
return self.session.query(model).limit(limit).all()
|
|
|
|
def get(self, model, pk: int):
|
|
"""Busca um registro por ID."""
|
|
return self.session.get(model, pk)
|