"""B01_Dashboard 프로젝트 휴지통 API(592) — 본체 라우터가 include 함. 보기 · 되살리기 = 시스템 관리자(전부) · 회사 관리자(자기 회사) · 영구 삭제 = 시스템 관리자만. """ from typing import Any from fastapi import APIRouter, Depends, HTTPException, Request from common_util.common_util_auth import require_system_admin from common_util.common_util_project_delete import hard_delete_project from .B01_Dashboard_Repository_Trash import get_trash_project, list_trash_projects, restore_project from .B01_Dashboard_Scope import _require_company_id, _same_company, require_company_admin router = APIRouter() _GONE = "휴지통에 없는 프로젝트입니다." @router.get("/trash/projects") async def trash_projects(session: dict[str, Any] = Depends(require_company_admin)): company_id = None if session["role"] == "SYSTEM_ADMIN" else _require_company_id(session) return {"status": "success", "projects": await list_trash_projects(company_id)} @router.post("/trash/projects/{project_id}/restore") async def trash_restore( project_id: str, request: Request, session: dict[str, Any] = Depends(require_company_admin), ): project = await get_trash_project(project_id) if not project: raise HTTPException(status_code=404, detail=_GONE) if session["role"] != "SYSTEM_ADMIN" and not _same_company(session, project.get("company_id")): raise HTTPException(status_code=403, detail="다른 회사의 프로젝트는 되살릴 수 없습니다.") if not await restore_project(project_id, int(session["user_id"]), request): raise HTTPException(status_code=404, detail=_GONE) return {"status": "success"} @router.delete("/trash/projects/{project_id}") async def trash_purge( project_id: str, request: Request, session: dict[str, Any] = Depends(require_system_admin), ): if not await hard_delete_project(project_id, int(session["user_id"]), request): raise HTTPException(status_code=404, detail=_GONE) return {"status": "success"}