66 lines
2.4 KiB
Python
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, "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)
|