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
55 lines
1.8 KiB
Python
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
|