repositories.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from datetime import datetime
  2. from sqlalchemy import select
  3. from sqlalchemy.orm import Session
  4. from app.db.models import ModelDefinition
  5. class ModelDefinitionRepository:
  6. def __init__(self, db: Session) -> None:
  7. self.db = db
  8. def create(self, entity: ModelDefinition) -> ModelDefinition:
  9. self.db.add(entity)
  10. self.db.commit()
  11. self.db.refresh(entity)
  12. return entity
  13. def list_all(self) -> list[ModelDefinition]:
  14. stmt = select(ModelDefinition).order_by(
  15. ModelDefinition.status.asc(),
  16. ModelDefinition.name.asc(),
  17. )
  18. return list(self.db.scalars(stmt))
  19. def get_by_id(self, model_id: str) -> ModelDefinition | None:
  20. return self.db.get(ModelDefinition, model_id)
  21. def get_by_code(self, code: str) -> ModelDefinition | None:
  22. stmt = select(ModelDefinition).where(ModelDefinition.code == code).limit(1)
  23. return self.db.scalar(stmt)
  24. def get_active_for_request(self, model: str) -> ModelDefinition | None:
  25. stmt = (
  26. select(ModelDefinition)
  27. .where(ModelDefinition.status == "active")
  28. .where(
  29. (ModelDefinition.code == model)
  30. | (ModelDefinition.model_name == model)
  31. )
  32. .limit(1)
  33. )
  34. return self.db.scalar(stmt)
  35. def update(self, entity: ModelDefinition) -> ModelDefinition:
  36. entity.updated_time = datetime.utcnow()
  37. self.db.commit()
  38. self.db.refresh(entity)
  39. return entity
  40. def delete(self, entity: ModelDefinition) -> None:
  41. self.db.delete(entity)
  42. self.db.commit()