diff --git a/server/migrations/versions/35e035defa85_add_platform_field_to_rooms_and_meetings.py b/server/migrations/versions/6e6ea8e607c5_add_videoplatform_enum_for_rooms_and_.py similarity index 88% rename from server/migrations/versions/35e035defa85_add_platform_field_to_rooms_and_meetings.py rename to server/migrations/versions/6e6ea8e607c5_add_videoplatform_enum_for_rooms_and_.py index 7ca03651..cbf2950d 100644 --- a/server/migrations/versions/35e035defa85_add_platform_field_to_rooms_and_meetings.py +++ b/server/migrations/versions/6e6ea8e607c5_add_videoplatform_enum_for_rooms_and_.py @@ -1,8 +1,8 @@ -"""Add platform field to rooms and meetings +"""Add VideoPlatform enum for rooms and meetings -Revision ID: 35e035defa85 +Revision ID: 6e6ea8e607c5 Revises: 61882a919591 -Create Date: 2025-09-02 16:08:55.205173 +Create Date: 2025-09-02 17:33:21.022214 """ @@ -12,7 +12,7 @@ import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. -revision: str = "35e035defa85" +revision: str = "6e6ea8e607c5" down_revision: Union[str, None] = "61882a919591" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None diff --git a/server/reflector/db/meetings.py b/server/reflector/db/meetings.py index b8d6c691..b32800f8 100644 --- a/server/reflector/db/meetings.py +++ b/server/reflector/db/meetings.py @@ -6,7 +6,7 @@ from fastapi import HTTPException from pydantic import BaseModel, Field from reflector.db import get_database, metadata -from reflector.db.rooms import Room +from reflector.db.rooms import Room, VideoPlatform from reflector.utils import generate_uuid4 meetings = sa.Table( @@ -91,7 +91,7 @@ class Meeting(BaseModel): "none", "prompt", "automatic", "automatic-2nd-participant" ] = "automatic-2nd-participant" num_clients: int = 0 - platform: Literal["whereby", "jitsi"] = "whereby" + platform: VideoPlatform = VideoPlatform.WHEREBY class MeetingController: diff --git a/server/reflector/db/rooms.py b/server/reflector/db/rooms.py index 76c2b897..7e78ab47 100644 --- a/server/reflector/db/rooms.py +++ b/server/reflector/db/rooms.py @@ -1,5 +1,6 @@ import secrets from datetime import datetime, timezone +from enum import StrEnum from sqlite3 import IntegrityError from typing import Literal @@ -11,6 +12,12 @@ from sqlalchemy.sql import false, or_ from reflector.db import get_database, metadata from reflector.utils import generate_uuid4 + +class VideoPlatform(StrEnum): + WHEREBY = "whereby" + JITSI = "jitsi" + + rooms = sqlalchemy.Table( "room", metadata, @@ -67,7 +74,7 @@ class Room(BaseModel): is_shared: bool = False webhook_url: str | None = None webhook_secret: str | None = None - platform: Literal["whereby", "jitsi"] = "whereby" + platform: VideoPlatform = VideoPlatform.WHEREBY class RoomController: diff --git a/server/reflector/video_platforms/factory.py b/server/reflector/video_platforms/factory.py index d76bb2ed..8f58aed0 100644 --- a/server/reflector/video_platforms/factory.py +++ b/server/reflector/video_platforms/factory.py @@ -2,6 +2,7 @@ from typing import Optional +from reflector.db.rooms import VideoPlatform from reflector.settings import settings from .base import VideoPlatformClient, VideoPlatformConfig @@ -10,7 +11,7 @@ from .registry import get_platform_client def get_platform_config(platform: str) -> VideoPlatformConfig: """Get configuration for a specific platform.""" - if platform == "whereby": + if platform == VideoPlatform.WHEREBY: return VideoPlatformConfig( api_key=settings.WHEREBY_API_KEY or "", webhook_secret=settings.WHEREBY_WEBHOOK_SECRET or "", @@ -18,7 +19,7 @@ def get_platform_config(platform: str) -> VideoPlatformConfig: aws_access_key_id=settings.AWS_WHEREBY_ACCESS_KEY_ID, aws_access_key_secret=settings.AWS_WHEREBY_ACCESS_KEY_SECRET, ) - elif platform == "jitsi": + elif platform == VideoPlatform.JITSI: return VideoPlatformConfig( api_key="", # Jitsi uses JWT, no API key webhook_secret=settings.JITSI_WEBHOOK_SECRET or "", @@ -37,4 +38,4 @@ def create_platform_client(platform: str) -> VideoPlatformClient: def get_platform_for_room(room_id: Optional[str] = None) -> str: """Determine which platform to use for a room based on feature flags.""" # For now, default to whereby since we don't have feature flags yet - return "whereby" + return VideoPlatform.WHEREBY diff --git a/server/reflector/views/rooms.py b/server/reflector/views/rooms.py index f84aa680..0e2095e8 100644 --- a/server/reflector/views/rooms.py +++ b/server/reflector/views/rooms.py @@ -12,7 +12,7 @@ from pydantic import BaseModel import reflector.auth as auth from reflector.db import get_database from reflector.db.meetings import meetings_controller -from reflector.db.rooms import rooms_controller +from reflector.db.rooms import VideoPlatform, rooms_controller from reflector.settings import settings from reflector.worker.webhook import test_webhook @@ -56,7 +56,7 @@ class Room(BaseModel): recording_type: str recording_trigger: str is_shared: bool - platform: str = "whereby" + platform: VideoPlatform = VideoPlatform.WHEREBY class RoomDetails(Room): @@ -86,7 +86,7 @@ class CreateRoom(BaseModel): is_shared: bool webhook_url: str webhook_secret: str - platform: str = "whereby" + platform: VideoPlatform = VideoPlatform.WHEREBY class UpdateRoom(BaseModel): @@ -101,7 +101,7 @@ class UpdateRoom(BaseModel): is_shared: bool webhook_url: str webhook_secret: str - platform: str = "whereby" + platform: VideoPlatform = VideoPlatform.WHEREBY class DeletionStatus(BaseModel):