added puck events
This commit is contained in:
@ -2,9 +2,10 @@ from fastapi import APIRouter, HTTPException, status, Depends
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List
|
||||
import uuid
|
||||
from app.schemas import Puck as PuckSchema, PuckCreate, PuckUpdate
|
||||
from app.models import Puck as PuckModel, Sample as SampleModel
|
||||
from app.schemas import Puck as PuckSchema, PuckCreate, PuckUpdate, SetTellPosition, PuckEventCreate
|
||||
from app.models import Puck as PuckModel, Sample as SampleModel, PuckEvent as PuckEventModel
|
||||
from app.dependencies import get_db
|
||||
from datetime import datetime
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@ -61,3 +62,43 @@ async def delete_puck(puck_id: str, db: Session = Depends(get_db)):
|
||||
db.delete(puck)
|
||||
db.commit()
|
||||
return
|
||||
|
||||
@router.put("/{puck_id}/tell_position", status_code=status.HTTP_200_OK)
|
||||
async def set_tell_position(
|
||||
puck_id: int,
|
||||
request: SetTellPosition,
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
# Get the requested tell_position
|
||||
tell_position = request.tell_position
|
||||
|
||||
# Define valid positions
|
||||
valid_positions = [f"{letter}{num}" for letter in "ABCDEF" for num in range(1, 6)] + ["null", None]
|
||||
|
||||
# Validate tell_position
|
||||
if tell_position not in valid_positions:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=f"Invalid tell_position value. Must be one of {valid_positions}.",
|
||||
)
|
||||
|
||||
# Set the correct tell_position logic
|
||||
actual_position = None if tell_position in ["null", None] else tell_position
|
||||
|
||||
# Create a new PuckEvent (always a new event, even with null/None)
|
||||
new_puck_event = PuckEventModel(
|
||||
puck_id=puck_id,
|
||||
tell_position=actual_position, # Null for disassociation, else the valid position
|
||||
event_type="tell_position_set", # Example event type
|
||||
timestamp=datetime.utcnow(),
|
||||
)
|
||||
db.add(new_puck_event)
|
||||
db.commit()
|
||||
db.refresh(new_puck_event)
|
||||
|
||||
# Send the response
|
||||
return {
|
||||
"message": "New tell position event created successfully",
|
||||
"tell_position": new_puck_event.tell_position,
|
||||
"timestamp": new_puck_event.timestamp,
|
||||
}
|
||||
|
Reference in New Issue
Block a user