Code indexing in gitaly is broken and leads to code not being visible to the user. We work on the issue with highest priority.

Skip to content
Snippets Groups Projects
Commit 5d7dcebe authored by GotthardG's avatar GotthardG
Browse files

get puck events

parent c3e47600
No related branches found
No related tags found
No related merge requests found
......@@ -131,46 +131,57 @@ async def get_last_tell_position(puck_id: str, db: Session = Depends(get_db)):
@router.get("/slot/{slot_id}", response_model=List[PuckSchema])
async def get_pucks_by_latest_beamline_dewar_slot(slot_id: int, db: Session = Depends(get_db)):
"""
Retrieve all pucks for the most recent dewar associated with the given slot_id
with a 'beamline' event type.
Retrieve all pucks for the most recent dewar associated with the given slot_id,
where the last logistics event is of type 'beamline'.
"""
# Query the Slot table to ensure the slot exists
# Step 1: Verify the slot exists
slot = db.query(SlotModel).filter(SlotModel.id == slot_id).first()
if not slot:
logger.error(f"No slot found with ID={slot_id}.")
raise HTTPException(status_code=404, detail="Slot not found")
# Check if this slot has an associated dewar
if not slot.dewar:
raise HTTPException(status_code=404, detail="No dewar associated with the given slot")
logger.info(f"Slot found: {slot}")
# Find the most recent dewar associated with a "beamline" event type
# Step 2: Fetch the most recent 'beamline' event for the slot
recent_beamline_event = (
db.query(LogisticsEventModel)
.filter(
LogisticsEventModel.slot_id == slot_id,
LogisticsEventModel.event_type == "beamline" # Filter by "beamline"
LogisticsEventModel.event_type == "beamline"
)
.order_by(LogisticsEventModel.timestamp.desc()) # Order by most recent event
.order_by(LogisticsEventModel.timestamp.desc())
.first()
)
# Confirm if we found a "beamline" event for the slot
if not recent_beamline_event:
logger.error(f"No 'beamline' event found for slot_id={slot_id}.")
raise HTTPException(
status_code=404,
detail="No 'beamline' event found for the given slot"
)
# Retrieve the dewar linked to the "beamline" event
logger.info(f"Found beamline event: {recent_beamline_event}")
# Step 3: Retrieve the Dewar from the recent event
dewar = db.query(DewarModel).filter(DewarModel.id == recent_beamline_event.dewar_id).first()
if not dewar:
logger.error(
f"No dewar found for the most recent beamline event. Dewar ID={recent_beamline_event.dewar_id}"
)
raise HTTPException(
status_code=404,
detail="No dewar associated with the most recent 'beamline' event"
)
# Retrieve all pucks associated with the dewar
logger.info(f"Associated dewar found: {dewar}")
# Step 4: Retrieve all pucks associated with the Dewar
pucks = db.query(PuckModel).filter(PuckModel.dewar_id == dewar.id).all()
# Return the list of pucks
if not pucks:
logger.warning(f"No pucks found for Dewar ID={dewar.id}.")
else:
logger.info(f"Retrieved pucks for Dewar ID={dewar.id}: {pucks}")
return pucks
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment