átlagos kiegészítséek jó sok
This commit is contained in:
@@ -84,4 +84,147 @@ async def get_document_status(
|
||||
):
|
||||
"""Lekérdezhető, hogy a robot végzett-e már a feldolgozással."""
|
||||
# (Itt egy egyszerű lekérdezés a Document táblából a státuszra)
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
# RBAC helper function
|
||||
def _check_premium_or_admin(user: User) -> bool:
|
||||
"""Check if user has premium subscription or admin role."""
|
||||
premium_plans = ['PREMIUM', 'PREMIUM_PLUS', 'VIP', 'VIP_PLUS']
|
||||
if user.role == 'admin':
|
||||
return True
|
||||
if hasattr(user, 'subscription_plan') and user.subscription_plan in premium_plans:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
@router.post("/scan-instant")
|
||||
async def scan_instant(
|
||||
file: UploadFile = File(...),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
Szinkron végpont (Villámszkenner) - forgalmi/ID dokumentumokhoz.
|
||||
Azonnali OCR feldolgozás és válasz.
|
||||
RBAC: Csak prémium előfizetés vagy admin.
|
||||
"""
|
||||
# RBAC ellenőrzés
|
||||
if not _check_premium_or_admin(current_user):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="Prémium előfizetés szükséges a funkcióhoz"
|
||||
)
|
||||
|
||||
try:
|
||||
# 1. Fájl feltöltése MinIO-ba (StorageService segítségével)
|
||||
# Jelenleg mock: feltételezzük, hogy a StorageService.upload_file létezik
|
||||
from app.services.storage_service import StorageService
|
||||
file_url = await StorageService.upload_file(file, prefix="instant_scan")
|
||||
|
||||
# 2. Mock OCR hívás (valós implementációban AiOcrService-t hívnánk)
|
||||
mock_ocr_result = {
|
||||
"plate": "TEST-123",
|
||||
"vin": "TRX12345",
|
||||
"make": "Toyota",
|
||||
"model": "Corolla",
|
||||
"year": 2022,
|
||||
"fuel_type": "petrol",
|
||||
"engine_capacity": 1600
|
||||
}
|
||||
|
||||
# 3. Dokumentum rekord létrehozása system.documents táblában
|
||||
from app.models import Document
|
||||
from datetime import datetime, timezone
|
||||
import uuid
|
||||
|
||||
doc = Document(
|
||||
id=uuid.uuid4(),
|
||||
user_id=current_user.id,
|
||||
original_name=file.filename,
|
||||
file_path=file_url,
|
||||
file_size=file.size,
|
||||
mime_type=file.content_type,
|
||||
status='processed',
|
||||
ocr_data=mock_ocr_result,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
updated_at=datetime.now(timezone.utc)
|
||||
)
|
||||
db.add(doc)
|
||||
await db.commit()
|
||||
await db.refresh(doc)
|
||||
|
||||
# 4. Válasz
|
||||
return {
|
||||
"document_id": str(doc.id),
|
||||
"status": "processed",
|
||||
"ocr_result": mock_ocr_result,
|
||||
"file_url": file_url,
|
||||
"message": "Dokumentum sikeresen feldolgozva"
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
await db.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=f"Hiba a dokumentum feldolgozása során: {str(e)}"
|
||||
)
|
||||
|
||||
|
||||
@router.post("/upload-async")
|
||||
async def upload_async(
|
||||
file: UploadFile = File(...),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
Aszinkron végpont (Költség/Számla nyelő) - háttérben futó OCR-nek.
|
||||
Azonnali 202 Accepted válasz, pending_ocr státusszal.
|
||||
RBAC: Csak prémium előfizetés vagy admin.
|
||||
"""
|
||||
# RBAC ellenőrzés
|
||||
if not _check_premium_or_admin(current_user):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="Prémium előfizetés szükséges a funkcióhoz"
|
||||
)
|
||||
|
||||
try:
|
||||
# 1. Fájl feltöltése MinIO-ba
|
||||
from app.services.storage_service import StorageService
|
||||
file_url = await StorageService.upload_file(file, prefix="async_upload")
|
||||
|
||||
# 2. Dokumentum rekord létrehozása pending_ocr státusszal
|
||||
from app.models import Document
|
||||
from datetime import datetime, timezone
|
||||
import uuid
|
||||
|
||||
doc = Document(
|
||||
id=uuid.uuid4(),
|
||||
user_id=current_user.id,
|
||||
original_name=file.filename,
|
||||
file_path=file_url,
|
||||
file_size=file.size,
|
||||
mime_type=file.content_type,
|
||||
status='pending_ocr', # Fontos: a háttérrobot ezt fogja felvenni
|
||||
created_at=datetime.now(timezone.utc),
|
||||
updated_at=datetime.now(timezone.utc)
|
||||
)
|
||||
db.add(doc)
|
||||
await db.commit()
|
||||
await db.refresh(doc)
|
||||
|
||||
# 3. 202 Accepted válasz
|
||||
return {
|
||||
"document_id": str(doc.id),
|
||||
"status": "pending_ocr",
|
||||
"message": "A dokumentum feltöltve, háttérben történő elemzése megkezdődött.",
|
||||
"file_url": file_url
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
await db.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=f"Hiba a dokumentum feltöltése során: {str(e)}"
|
||||
)
|
||||
Reference in New Issue
Block a user