Files
xiaoxia-saas/packages/adapters/sqlalchemy_impl/project_title_repository.py
T
Xiaoxia AI 34dbc0af5f
Deploy / Build Production Runtime Images (push) Successful in 9m4s
Deploy / Deploy Production (push) Successful in 51s
Deploy / Production Browser E2E (push) Successful in 38s
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
Deploy / Deploy Staging (push) Has been skipped
fix(titles): keep selected title ids generation-safe
2026-06-24 01:13:01 +08:00

55 lines
1.8 KiB
Python

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