/
tsps
/
core
Обзор
Документация
Войти
/
tsps
/
core
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/api/lk/documents.py
97 строк
3 KB
Василий Петров
Документы в ЛК
21 мар 2026, 16:39
21 мар 2026, 16:39
cc0cd1f
Код
Авторство
О чём код?
from __future__ import annotations from typing import Optional from datetime import date from urllib.parse import quote from fastapi import APIRouter, Depends, Response from sqlalchemy.orm import Session from app.core.security import get_current_judge_account from app.database import get_db from app.schemas.common import PaginationOut, JudgeContext from app.schemas.document import DocumentRead, DocumentReadFull from app.services.document import list_documents, get_document, get_document_file_data router = APIRouter( prefix="/documents", tags=["lk: documents"] ) @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, case_number: Optional[str] = None, context: JudgeContext = Depends(get_current_judge_account), db: Session = Depends(get_db) ): """ Список документов текущего судьи с фильтрацией и пагинацией. Фильтр judge_id применяется автоматически на основе токена. """ return list_documents( db=db, skip=skip, limit=limit, judge_id=context.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, context: JudgeContext = Depends(get_current_judge_account), db: Session = Depends(get_db) ): """ Получение полного документа по ID. Проверяет, что документ принадлежит текущему судье. """ return get_document( db=db, document_id=document_id, judge_id=context.judge_id, ) @router.get("/{document_id}/document_file") def download_document_file( document_id: int, context: JudgeContext = Depends(get_current_judge_account), db: Session = Depends(get_db) ): """ Загрузка PDF-файла документа. Проверяет, что документ принадлежит текущему судье. """ content, mime_type, filename_ascii, filename_utf8 = get_document_file_data( db=db, document_id=document_id, judge_id=context.judge_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}' } )