refactor: migrate to SQLAlchemy 2.0 ORM-style patterns

- Replace __table__.join() with ORM-style joins using select_from().outerjoin()
- Replace __table__.delete() with delete(Model) in tests
- Migrate from **row.__dict__ to model_validate() with ConfigDict(from_attributes=True)
- Add ConfigDict(from_attributes=True) to all Pydantic models for proper SQLAlchemy model conversion
- Update all controller methods to use model_validate() instead of dict unpacking

This completes the migration to SQLAlchemy 2.0 recommended patterns while maintaining
backwards compatibility and improving code consistency.
This commit is contained in:
2025-09-23 16:46:37 -06:00
parent a883df0d63
commit e0c71c5548
7 changed files with 51 additions and 40 deletions

View File

@@ -2,7 +2,7 @@ from datetime import datetime, timedelta, timezone
from unittest.mock import AsyncMock, patch
import pytest
from sqlalchemy import insert, select, update
from sqlalchemy import delete, insert, select, update
from reflector.db.base import (
MeetingConsentModel,
@@ -310,11 +310,9 @@ async def test_meeting_consent_cascade_delete(db_session):
# Delete the transcript and meeting
await db_session.execute(
TranscriptModel.__table__.delete().where(TranscriptModel.id == transcript.id)
)
await db_session.execute(
MeetingModel.__table__.delete().where(MeetingModel.id == meeting_id)
delete(TranscriptModel).where(TranscriptModel.id == transcript.id)
)
await db_session.execute(delete(MeetingModel).where(MeetingModel.id == meeting_id))
await db_session.commit()
# Verify consent entries were cascade deleted