from datetime import datetime from pathlib import Path from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.templating import Jinja2Templates from sqlalchemy.orm import Session from app.db.deps import get_db from app.models.document import Document from app.models.document_version import DocumentVersion from app.models.extracted_field import ExtractedField from app.models.layer1_candidate import Layer1Candidate from app.models.text_version import TextVersion router = APIRouter(prefix="/trash", tags=["trash"]) BASE_DIR = Path(__file__).resolve().parent.parent templates = Jinja2Templates(directory=str(BASE_DIR / "templates")) @router.get("/", response_class=HTMLResponse) def trash_index(request: Request, db: Session = Depends(get_db)): documents = ( db.query(Document) .filter(Document.is_trashed.is_(True)) .order_by(Document.trashed_at.desc(), Document.updated_at.desc()) .all() ) return templates.TemplateResponse( request=request, name="trash/index.html", context={"request": request, "documents": documents, "active_page": "trash"}, ) @router.post("/{document_id}/restore", response_class=RedirectResponse) def restore_document(document_id: str, db: Session = Depends(get_db)): document = db.query(Document).filter(Document.document_id == document_id).first() if document is None: return RedirectResponse(url="/trash/", status_code=303) document.is_trashed = False document.trashed_at = None db.commit() return RedirectResponse(url=f"/documents/{document.document_id}", status_code=303) @router.post("/{document_id}/delete", response_class=RedirectResponse) def permanently_delete_document(document_id: str, db: Session = Depends(get_db)): document = db.query(Document).filter(Document.document_id == document_id).first() if document is None: return RedirectResponse(url="/trash/", status_code=303) doc_pk = document.id db.query(Layer1Candidate).filter(Layer1Candidate.document_id == doc_pk).delete() db.query(ExtractedField).filter(ExtractedField.document_id == doc_pk).delete() db.query(TextVersion).filter(TextVersion.document_id == doc_pk).delete() db.query(DocumentVersion).filter(DocumentVersion.document_id == doc_pk).delete() db.delete(document) db.commit() return RedirectResponse(url="/trash/", status_code=303)