Skip to content

Commit f7f3248

Browse files
authored
feat: populate pupil details while fetching event pupils (#17)
1 parent b769efa commit f7f3248

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

models/event_pupil.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
from datetime import datetime, timezone, timezone
33
from sqlmodel import SQLModel, Field, Relationship
44

5+
# Import PupilRead for the detailed response
6+
from models.pupils import PupilRead
7+
58
# Event Pupils (Junction Table)
69
class EventPupilBase(SQLModel):
710
event_id: int = Field(foreign_key="events.id")
@@ -23,3 +26,7 @@ class EventPupilCreate(EventPupilBase):
2326
class EventPupilRead(EventPupilBase):
2427
id: int
2528
added_at: datetime
29+
30+
class EventPupilWithDetails(EventPupilRead):
31+
"""EventPupil with full pupil details included"""
32+
pupil: PupilRead

routers/event.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Event, EventCreate, EventRead, EventUpdate,
1010
EventRepeatDay, EventRepeatDayCreate, EventRepeatDayRead, EventRepeatDayUpdate, EventPupilUpdate
1111
)
12-
from models.event_pupil import EventPupil, EventPupilCreate, EventPupilRead
12+
from models.event_pupil import EventPupil, EventPupilCreate, EventPupilRead, EventPupilWithDetails
1313
from models.utils.enums import RepeatPatternEnum, EventTypeEnum
1414
from .utils.helpers import generate_repeat_instances
1515
event = APIRouter(prefix="/events", tags=["events"])
@@ -382,17 +382,17 @@ def delete_event_repeat_days(
382382
session.delete(repeat_day)
383383
session.commit()
384384

385-
@event.get("/{event_id}/pupils", response_model=List[EventPupilRead])
385+
@event.get("/{event_id}/pupils", response_model=List[EventPupilWithDetails])
386386
def get_event_pupils(
387387
event_id: int,
388388
session: Session = Depends(get_session)
389389
):
390-
"""Get all pupils assigned to an event"""
390+
"""Get all pupils assigned to an event with full pupil details"""
391391
event = session.get(Event, event_id)
392392
if not event:
393393
raise HTTPException(status_code=404, detail="Event not found")
394394

395-
statement = select(EventPupil).where(EventPupil.event_id == event_id)
395+
statement = select(EventPupil).where(EventPupil.event_id == event_id).options(selectinload(EventPupil.pupil))
396396
event_pupils = session.exec(statement).all()
397397
return event_pupils
398398

0 commit comments

Comments
 (0)