aaredb/backend/app/routers/spreadsheet.py
2024-11-05 14:08:34 +01:00

60 lines
2.1 KiB
Python

# app/routers/spreadsheet.py
from fastapi import APIRouter, UploadFile, File, HTTPException
from app.services.spreadsheet_service import SampleSpreadsheetImporter, SpreadsheetImportError
import logging
router = APIRouter()
logger = logging.getLogger(__name__)
@router.post("/upload")
async def upload_file(file: UploadFile = File(...)):
importer = SampleSpreadsheetImporter()
try:
result = importer.import_spreadsheet(file)
if not result:
logger.warning("No data extracted from spreadsheet.")
return {
"dewars_count": 0,
"dewars": [],
"pucks_count": 0,
"pucks": [],
"samples_count": 0,
"samples": []
}
# Logging the raw results for debugging.
logger.info(f"Extracted Result: {result}")
# Extract and respond with detailed information.
dewars = list(set(sample['dewarname'] for sample in result))
pucks = list(set(sample['puckname'] for sample in result))
samples = list(set(sample['crystalname'] for sample in result))
# Log the extracted names.
logger.info(f"Dewars: {dewars}")
logger.info(f"Pucks: {pucks}")
logger.info(f"Samples: {samples}")
response_data = {
"dewars_count": len(dewars),
"dewars": dewars,
"pucks_count": len(pucks),
"pucks": pucks,
"samples_count": len(samples),
"samples": samples, # Ensure lists include detailed names
"dewar_names": dewars, # Redundant but for clarity in the frontend
"puck_names": pucks, # Redundant but for clarity in the frontend
"crystal_names": samples # Redundant but for clarity in the frontend
}
# Log the final response for debugging.
logger.info(f"Final response: {response_data}")
return response_data
except SpreadsheetImportError as e:
logger.error(f"Failed to process file: {str(e)}")
raise HTTPException(status_code=400, detail="Failed to upload file. Please try again.")