# 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.")