document-processor/app/routes/trash.py

66 lines
2.4 KiB
Python

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},
)
@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)