Files
Mini-ERP-app/doc-service/app/models/document.py
2025-08-27 12:47:23 +04:00

87 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional, Dict, Any, List
from pydantic import BaseModel, Field
from datetime import datetime
from enum import Enum
class DocumentType(str, Enum):
"""Типы документов"""
PDF = "pdf"
EXCEL = "excel"
WORD = "word"
QR_CODE = "qr_code"
class DocumentStatus(str, Enum):
"""Статусы документов"""
PENDING = "pending"
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
class QRCodeRequest(BaseModel):
"""Запрос на генерацию QR-кода"""
location_id: str = Field(..., description="ID места хранения")
location_address: str = Field(..., description="Адрес места")
organization_id: str = Field(..., description="ID организации")
size: Optional[int] = Field(10, description="Размер QR-кода")
border: Optional[int] = Field(2, description="Размер границы")
class QRCodeResponse(BaseModel):
"""Ответ с QR-кодом"""
document_id: str = Field(..., description="ID документа")
qr_code_url: str = Field(..., description="URL для скачивания QR-кода")
qr_code_data: str = Field(..., description="Данные QR-кода")
expires_at: datetime = Field(..., description="Время истечения")
class ReportRequest(BaseModel):
"""Запрос на генерацию отчета"""
report_type: str = Field(..., description="Тип отчета")
organization_id: str = Field(..., description="ID организации")
filters: Optional[Dict[str, Any]] = Field({}, description="Фильтры для отчета")
format: DocumentType = Field(DocumentType.PDF, description="Формат отчета")
class ReportResponse(BaseModel):
"""Ответ с отчетом"""
document_id: str = Field(..., description="ID документа")
download_url: str = Field(..., description="URL для скачивания")
file_size: int = Field(..., description="Размер файла в байтах")
expires_at: datetime = Field(..., description="Время истечения")
class DocumentStatusResponse(BaseModel):
"""Ответ со статусом документа"""
document_id: str = Field(..., description="ID документа")
status: DocumentStatus = Field(..., description="Статус документа")
progress: Optional[int] = Field(None, description="Прогресс в процентах")
error_message: Optional[str] = Field(None, description="Сообщение об ошибке")
created_at: datetime = Field(..., description="Время создания")
updated_at: datetime = Field(..., description="Время обновления")
class GeneratePDFRequest(BaseModel):
"""Запрос на генерацию PDF"""
template_name: str = Field(..., description="Название шаблона")
data: Dict[str, Any] = Field(..., description="Данные для шаблона")
filename: Optional[str] = Field(None, description="Имя файла")
class GenerateExcelRequest(BaseModel):
"""Запрос на генерацию Excel"""
data: List[Dict[str, Any]] = Field(..., description="Данные для таблицы")
sheet_name: str = Field("Sheet1", description="Название листа")
filename: Optional[str] = Field(None, description="Имя файла")
class TemplateInfo(BaseModel):
"""Информация о шаблоне"""
name: str = Field(..., description="Название шаблона")
description: str = Field(..., description="Описание шаблона")
variables: List[str] = Field(..., description="Переменные шаблона")
created_at: datetime = Field(..., description="Время создания")
updated_at: datetime = Field(..., description="Время обновления")
class DocumentInfo(BaseModel):
"""Информация о документе"""
id: str = Field(..., description="ID документа")
type: DocumentType = Field(..., description="Тип документа")
status: DocumentStatus = Field(..., description="Статус документа")
filename: str = Field(..., description="Имя файла")
file_size: int = Field(..., description="Размер файла")
created_at: datetime = Field(..., description="Время создания")
expires_at: datetime = Field(..., description="Время истечения")