PMFlow/backend/app/api/sstc_api/signals_archive.py

48 lines
1.5 KiB
Python

from __future__ import annotations
from .shared import *
from ...services.sstc.entity_lookup import _ensure_project
from ...services.sstc.signal_core import _parse_node_id, _parse_project_id
router = APIRouter(tags=["sstc"])
@router.post("/projects/{project_id}/signals/{signal_id}/archive")
async def archive_signal(
project_id: str,
signal_id: str,
permission_user: User = Depends(require_project_member_or_manager),
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user),
):
_ = permission_user
pid = _parse_project_id(project_id)
sid = _parse_node_id(signal_id, "signal_id")
svc = SSTCService(db, tenant_id=int(current_user.tenant_id))
await _ensure_project(svc, pid)
result = await db.execute(
select(Signal).where(
and_(Signal.id == sid, Signal.tenant_id == int(current_user.tenant_id))
)
)
signal = result.scalar_one_or_none()
if not signal:
raise HTTPException(status_code=404, detail="Signal not found")
before = {"processed": signal.processed}
signal.processed = True
signal.status = "已关闭"
await log_operation(
db,
tenant_id=int(current_user.tenant_id),
user_id=int(current_user.id),
project_id=pid,
entity_type="signal",
entity_id=str(sid),
action="archive",
before_data=before,
after_data={"processed": True},
)
await db.commit()
return success_response({"id": str(signal.id), "status": "已关闭"})