from datetime import datetime from sqlalchemy import select from sqlalchemy.orm import Session from app.db.models import ModelDefinition class ModelDefinitionRepository: def __init__(self, db: Session) -> None: self.db = db def create(self, entity: ModelDefinition) -> ModelDefinition: self.db.add(entity) self.db.commit() self.db.refresh(entity) return entity def list_all(self) -> list[ModelDefinition]: stmt = select(ModelDefinition).order_by( ModelDefinition.status.asc(), ModelDefinition.name.asc(), ) return list(self.db.scalars(stmt)) def get_by_id(self, model_id: str) -> ModelDefinition | None: return self.db.get(ModelDefinition, model_id) def get_by_code(self, code: str) -> ModelDefinition | None: stmt = select(ModelDefinition).where(ModelDefinition.code == code).limit(1) return self.db.scalar(stmt) def get_active_for_request(self, model: str) -> ModelDefinition | None: stmt = ( select(ModelDefinition) .where(ModelDefinition.status == "active") .where( (ModelDefinition.code == model) | (ModelDefinition.model_name == model) ) .limit(1) ) return self.db.scalar(stmt) def update(self, entity: ModelDefinition) -> ModelDefinition: entity.updated_time = datetime.utcnow() self.db.commit() self.db.refresh(entity) return entity def delete(self, entity: ModelDefinition) -> None: self.db.delete(entity) self.db.commit()