/
tsps
/
core
Обзор
Документация
Войти
/
tsps
/
core
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/api/admin/documents.py
84 строки
2 KB
Василий Петров
Документы в ЛК
21 мар 2026, 16:39
21 мар 2026, 16:39
cc0cd1f
Код
Авторство
О чём код?
from __future__ import annotations from fastapi import APIRouter, Depends, Response from urllib.parse import quote from typing import Optional from datetime import date from sqlalchemy.orm import Session from app.schemas.document import DocumentRead, DocumentReadFull from app.schemas.common import PaginationOut from app.core.security import get_current_admin_id from app.database import get_db from app.services.document import list_documents, get_document, get_document_file_data router = APIRouter( prefix="/documents", tags=["admin: documents"], dependencies=[Depends(get_current_admin_id)] ) @router.get("", response_model=PaginationOut[DocumentRead]) def read_documents( skip: int = 0, limit: int = 100, title: Optional[str] = None, date_from: Optional[date] = None, date_to: Optional[date] = None, type_id: Optional[int] = None, court_id: Optional[int] = None, judge_id: Optional[int] = None, case_number: Optional[str] = None, db: Session = Depends(get_db) ): """ Список документов с фильтрацией и пагинацией. """ return list_documents( db=db, skip=skip, limit=limit, judge_id=judge_id, court_id=court_id, title=title, date_from=date_from, date_to=date_to, type_id=type_id, case_number=case_number, ) @router.get("/{document_id}", response_model=DocumentReadFull) def read_document( document_id: int, db: Session = Depends(get_db) ): """ Получение полного документа по ID. """ return get_document(db=db, document_id=document_id) @router.get("/{document_id}/document_file") def download_document_file( document_id: int, db: Session = Depends(get_db) ): """ Загрузка PDF-файла документа. """ content, mime_type, filename_ascii, filename_utf8 = get_document_file_data( db=db, document_id=document_id, ) # Кодируем UTF-8 filename для заголовка filename_encoded = quote(filename_utf8, safe='') return Response( content=content, media_type=mime_type, headers={ "Content-Disposition": f'inline; filename="{filename_ascii}"; filename*=UTF-8\'\'{filename_encoded}' } )