feat(trash): exclude trashed rows from events/projects/milestones/rulebooks/embeddings reads + filtering tests

This commit is contained in:
2026-05-28 20:33:40 -04:00
parent e7f214fc80
commit eb41e772cd
6 changed files with 152 additions and 9 deletions
+10 -2
View File
@@ -37,7 +37,10 @@ async def create_project(
async def get_project(user_id: int, project_id: int) -> Project | None:
async with async_session() as session:
result = await session.execute(
select(Project).where(Project.id == project_id, Project.user_id == user_id)
select(Project).where(
Project.id == project_id, Project.user_id == user_id,
Project.deleted_at.is_(None),
)
)
return result.scalars().first()
@@ -48,6 +51,7 @@ async def get_project_by_title(user_id: int, title: str) -> Project | None:
select(Project).where(
Project.user_id == user_id,
func.lower(Project.title) == func.lower(title.strip()),
Project.deleted_at.is_(None),
).limit(1)
)
return result.scalars().first()
@@ -62,7 +66,9 @@ async def get_or_create_project(user_id: int, title: str) -> Project:
async def list_projects(user_id: int, status: str | None = None) -> list[Project]:
async with async_session() as session:
query = select(Project).where(Project.user_id == user_id)
query = select(Project).where(
Project.user_id == user_id, Project.deleted_at.is_(None)
)
if status:
query = query.where(Project.status == status)
query = query.order_by(Project.updated_at.desc())
@@ -111,6 +117,7 @@ async def get_project_summary(user_id: int, project_id: int) -> dict:
Note.user_id == user_id,
Note.project_id == project_id,
Note.status.isnot(None),
Note.deleted_at.is_(None),
)
.group_by(Note.status)
)
@@ -127,6 +134,7 @@ async def get_project_summary(user_id: int, project_id: int) -> dict:
Note.user_id == user_id,
Note.project_id == project_id,
Note.status.is_(None),
Note.deleted_at.is_(None),
)
)
note_count = note_count_result or 0