ForcePilot/backend/package/yuxi/repositories/task_repository.py
Wenjie Zhang 410dd47c14 refactor: 将后端代码迁移至 backend 目录
- 将 server/, src/, scripts/, test/ 等目录移动到 backend/ 目录下
- 使用 git rename 保留文件历史记录
- 更新 docker-compose.yml 和 api.Dockerfile 配置

WIP: 项目结构重构进行中
2026-03-24 11:08:12 +08:00

52 lines
2.3 KiB
Python

from __future__ import annotations
from typing import Any
from sqlalchemy import delete, select
from yuxi.storage.postgres.manager import pg_manager
from yuxi.storage.postgres.models_business import TaskRecord
class TaskRepository:
async def get_by_id(self, task_id: str) -> TaskRecord | None:
async with pg_manager.get_async_session_context() as session:
result = await session.execute(select(TaskRecord).where(TaskRecord.id == task_id))
return result.scalar_one_or_none()
async def list(self, status: str | None = None, limit: int = 100) -> list[TaskRecord]:
async with pg_manager.get_async_session_context() as session:
stmt = select(TaskRecord)
if status:
stmt = stmt.where(TaskRecord.status == status)
stmt = stmt.order_by(TaskRecord.created_at.desc()).limit(max(limit, 0))
result = await session.execute(stmt)
return list(result.scalars().all())
async def list_all(self) -> list[TaskRecord]:
async with pg_manager.get_async_session_context() as session:
result = await session.execute(select(TaskRecord).order_by(TaskRecord.created_at.desc()))
return list(result.scalars().all())
async def upsert(self, task_id: str, data: dict[str, Any]) -> TaskRecord:
async with pg_manager.get_async_session_context() as session:
result = await session.execute(select(TaskRecord).where(TaskRecord.id == task_id))
record = result.scalar_one_or_none()
if record is None:
record = TaskRecord(id=task_id, **data)
session.add(record)
return record
for key, value in data.items():
setattr(record, key, value)
return record
async def delete(self, task_id: str) -> bool:
"""Delete a task by id. Returns True if deleted, False if not found."""
async with pg_manager.get_async_session_context() as session:
result = await session.execute(delete(TaskRecord).where(TaskRecord.id == task_id))
return result.rowcount > 0
async def delete_all(self) -> None:
async with pg_manager.get_async_session_context() as session:
await session.execute(delete(TaskRecord))