34 lines
1.4 KiB
Python
34 lines
1.4 KiB
Python
import os
|
||
import tempfile
|
||
from pathlib import Path
|
||
|
||
from fastapi import APIRouter, File, HTTPException, UploadFile
|
||
|
||
from backend.services.import_service import import_file, import_from_statements_dir
|
||
|
||
router = APIRouter(prefix="/api/import", tags=["import"])
|
||
|
||
|
||
@router.post("/upload")
|
||
async def upload_statement(file: UploadFile = File(...)):
|
||
if not file.filename or not file.filename.lower().endswith(".pdf"):
|
||
raise HTTPException(status_code=400, detail="Only PDF files are allowed")
|
||
if not (file.filename.startswith("Т-") or file.filename.startswith("С-") or file.filename.startswith("Я-")):
|
||
raise HTTPException(status_code=400, detail="Поддерживаются выписки Т-, С- и Я-банка (Т/С/Я-MM-YY.pdf)")
|
||
suffix = Path(file.filename).suffix
|
||
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
|
||
content = await file.read()
|
||
tmp.write(content)
|
||
tmp_path = tmp.name
|
||
try:
|
||
added, skipped, parsed = import_file(tmp_path, file.filename)
|
||
return {"added": added, "skipped_duplicates": skipped, "parsed": parsed, "filename": file.filename}
|
||
finally:
|
||
os.unlink(tmp_path)
|
||
|
||
|
||
@router.post("/from-folder")
|
||
def import_from_folder():
|
||
added, skipped, parsed = import_from_statements_dir()
|
||
return {"added": added, "skipped_duplicates": skipped, "parsed": parsed}
|