48 lines
1.5 KiB
Python
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": "已关闭"})
|
|
|