feat(vacation): 상세 — 승인은 취소처리, 미승인(작성중/제출/반려)은 삭제(hard)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 08:50:02 +09:00
parent fa1027fa1b
commit 8ab5223790
3 changed files with 55 additions and 6 deletions
+25
View File
@@ -800,3 +800,28 @@ async def cancel(
except PermissionError as exc:
raise HTTPException(status_code=403, detail=str(exc))
return RedirectResponse(url=f"/vacation/{request_id}", status_code=303)
@router.post("/{request_id}/delete")
async def delete(
request: Request,
request_id: str,
user: dict[str, Any] = Depends(_require_user),
) -> RedirectResponse:
"""완전 삭제 — 승인 전(작성중/제출/반려)만. 달력으로 복귀."""
from app.store import is_admin # noqa: WPS433
store = _store(request)
if store is None:
raise HTTPException(status_code=503, detail="vacation_db 미설정")
try:
store.hard_delete(
request_id=request_id, user_email=user["email"], is_admin=is_admin(user)
)
except KeyError:
raise HTTPException(status_code=404, detail="휴가 신청을 찾을 수 없습니다.")
except PermissionError as exc:
raise HTTPException(status_code=403, detail=str(exc))
except ValueError as exc:
raise HTTPException(status_code=409, detail=str(exc))
return RedirectResponse(url="/vacation/", status_code=303)