diff --git a/backend/alembic/versions/054_add_calendar_event_indexes.py b/backend/alembic/versions/054_add_calendar_event_indexes.py deleted file mode 100644 index e69a8c2..0000000 --- a/backend/alembic/versions/054_add_calendar_event_indexes.py +++ /dev/null @@ -1,36 +0,0 @@ -"""Add performance indexes to calendar_events - -Revision ID: 054 -Revises: 053 -""" -from alembic import op - -revision = "054" -down_revision = "053" - - -def upgrade(): - # Covers range queries in dashboard today's events and events list - op.create_index( - "ix_calendar_events_calendar_start", - "calendar_events", - ["calendar_id", "start_datetime"], - ) - # Covers bulk DELETE on recurrence edit/regeneration and sibling lookups - op.create_index( - "ix_calendar_events_parent_event_id", - "calendar_events", - ["parent_event_id"], - ) - # Covers starred widget query (calendar_id + is_starred + start_datetime) - op.create_index( - "ix_calendar_events_calendar_starred_start", - "calendar_events", - ["calendar_id", "is_starred", "start_datetime"], - ) - - -def downgrade(): - op.drop_index("ix_calendar_events_calendar_starred_start", table_name="calendar_events") - op.drop_index("ix_calendar_events_parent_event_id", table_name="calendar_events") - op.drop_index("ix_calendar_events_calendar_start", table_name="calendar_events") diff --git a/backend/app/routers/dashboard.py b/backend/app/routers/dashboard.py index b131e77..94ea5ac 100644 --- a/backend/app/routers/dashboard.py +++ b/backend/app/routers/dashboard.py @@ -35,8 +35,8 @@ async def get_dashboard( today = client_date or date.today() upcoming_cutoff = today + timedelta(days=current_settings.upcoming_days) - # Fetch calendar IDs once as a plain list — PostgreSQL handles IN (1,2,3) more - # efficiently than re-evaluating a correlated subquery for each of the 3 queries below. + # Fetch calendar IDs once as a plain list — avoids repeating the subquery + # expression in each of the 3+ queries below and makes intent clearer. calendar_id_result = await db.execute( select(Calendar.id).where(Calendar.user_id == current_user.id) ) diff --git a/frontend/src/components/calendar/CalendarPage.tsx b/frontend/src/components/calendar/CalendarPage.tsx index a02f834..8de5365 100644 --- a/frontend/src/components/calendar/CalendarPage.tsx +++ b/frontend/src/components/calendar/CalendarPage.tsx @@ -33,6 +33,8 @@ const viewLabels: Record = { timeGridDay: 'Day', }; +const UMBRA_EVENT_CLASSES = ['umbra-event']; + export default function CalendarPage() { const queryClient = useQueryClient(); const location = useLocation(); @@ -507,7 +509,7 @@ export default function CalendarPage() { if (color) { info.el.style.setProperty('--event-color', color); } - }, []); + }, []); const renderEventContent = useCallback((arg: EventContentArg) => { const isMonth = arg.view.type === 'dayGridMonth'; @@ -551,7 +553,7 @@ export default function CalendarPage() { {arg.timeText} ); - }, []) + }, []); return ( @@ -708,7 +710,7 @@ export default function CalendarPage() { slotLabelFormat={{ hour: 'numeric', minute: '2-digit', meridiem: 'short' }} slotEventOverlap={false} eventDidMount={handleEventDidMount} - eventClassNames={() => ['umbra-event']} + eventClassNames={UMBRA_EVENT_CLASSES} eventContent={renderEventContent} />