from datetime import datetime, timezone from uuid import uuid4 from packages.adapters.sqlalchemy_impl.models import ProjectTitleModel class SQLAlchemyProjectTitleRepository: def __init__(self, session): self.session = session def list_by_project(self, project_id: str, active_only: bool = False) -> list[ProjectTitleModel]: query = self.session.query(ProjectTitleModel).filter(ProjectTitleModel.project_id == project_id) if active_only: query = query.filter(ProjectTitleModel.is_active.is_(True)) return query.order_by(ProjectTitleModel.created_at.desc()).all() def get(self, title_id: str) -> ProjectTitleModel | None: return self.session.query(ProjectTitleModel).filter(ProjectTitleModel.id == title_id).first() def create( self, *, workspace_id: str, project_id: str, text: str, category: str, created_by_user_id: str, favorite: bool = False, ) -> ProjectTitleModel: now = datetime.now(timezone.utc) item = ProjectTitleModel( id=uuid4().hex, workspace_id=workspace_id, project_id=project_id, text=text.strip(), category=category, favorite=favorite, usage_count=0, is_active=True, created_by_user_id=created_by_user_id, created_at=now, updated_at=now, ) self.session.add(item) self.session.commit() self.session.refresh(item) return item def update(self, item: ProjectTitleModel) -> ProjectTitleModel: item.updated_at = datetime.now(timezone.utc) self.session.add(item) self.session.commit() self.session.refresh(item) return item