mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-21 04:39:06 +00:00
refactor: use 'import sqlalchemy as sa' pattern in db/base.py
- Replace individual SQLAlchemy imports with 'import sqlalchemy as sa' - Prefix all SQLAlchemy types with 'sa.' for better code clarity - Move all imports to the top of the file (remove mid-file Computed import) - Improve code readability by making SQLAlchemy usage explicit
This commit is contained in:
@@ -1,19 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from sqlalchemy import (
|
import sqlalchemy as sa
|
||||||
JSON,
|
|
||||||
Boolean,
|
|
||||||
Column,
|
|
||||||
DateTime,
|
|
||||||
Float,
|
|
||||||
ForeignKey,
|
|
||||||
Index,
|
|
||||||
Integer,
|
|
||||||
String,
|
|
||||||
Text,
|
|
||||||
text,
|
|
||||||
)
|
|
||||||
from sqlalchemy.dialects.postgresql import JSONB, TSVECTOR
|
from sqlalchemy.dialects.postgresql import JSONB, TSVECTOR
|
||||||
from sqlalchemy.ext.asyncio import AsyncAttrs
|
from sqlalchemy.ext.asyncio import AsyncAttrs
|
||||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||||
@@ -26,57 +14,55 @@ class Base(AsyncAttrs, DeclarativeBase):
|
|||||||
class TranscriptModel(Base):
|
class TranscriptModel(Base):
|
||||||
__tablename__ = "transcript"
|
__tablename__ = "transcript"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
name: Mapped[Optional[str]] = mapped_column(String)
|
name: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
status: Mapped[Optional[str]] = mapped_column(String)
|
status: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
locked: Mapped[Optional[bool]] = mapped_column(Boolean)
|
locked: Mapped[Optional[bool]] = mapped_column(sa.Boolean)
|
||||||
duration: Mapped[Optional[float]] = mapped_column(Float)
|
duration: Mapped[Optional[float]] = mapped_column(sa.Float)
|
||||||
created_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
created_at: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
|
||||||
title: Mapped[Optional[str]] = mapped_column(String)
|
title: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
short_summary: Mapped[Optional[str]] = mapped_column(String)
|
short_summary: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
long_summary: Mapped[Optional[str]] = mapped_column(String)
|
long_summary: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
topics: Mapped[Optional[list]] = mapped_column(JSON)
|
topics: Mapped[Optional[list]] = mapped_column(sa.JSON)
|
||||||
events: Mapped[Optional[list]] = mapped_column(JSON)
|
events: Mapped[Optional[list]] = mapped_column(sa.JSON)
|
||||||
participants: Mapped[Optional[list]] = mapped_column(JSON)
|
participants: Mapped[Optional[list]] = mapped_column(sa.JSON)
|
||||||
source_language: Mapped[Optional[str]] = mapped_column(String)
|
source_language: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
target_language: Mapped[Optional[str]] = mapped_column(String)
|
target_language: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
reviewed: Mapped[bool] = mapped_column(
|
reviewed: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
audio_location: Mapped[str] = mapped_column(
|
audio_location: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="local"
|
sa.String, nullable=False, server_default="local"
|
||||||
)
|
)
|
||||||
user_id: Mapped[Optional[str]] = mapped_column(String)
|
user_id: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
share_mode: Mapped[str] = mapped_column(
|
share_mode: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="private"
|
sa.String, nullable=False, server_default="private"
|
||||||
)
|
)
|
||||||
meeting_id: Mapped[Optional[str]] = mapped_column(String)
|
meeting_id: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
recording_id: Mapped[Optional[str]] = mapped_column(String)
|
recording_id: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
zulip_message_id: Mapped[Optional[int]] = mapped_column(Integer)
|
zulip_message_id: Mapped[Optional[int]] = mapped_column(sa.Integer)
|
||||||
source_kind: Mapped[str] = mapped_column(
|
source_kind: Mapped[str] = mapped_column(
|
||||||
String, nullable=False
|
sa.String, nullable=False
|
||||||
) # Enum will be handled separately
|
) # Enum will be handled separately
|
||||||
audio_deleted: Mapped[Optional[bool]] = mapped_column(Boolean)
|
audio_deleted: Mapped[Optional[bool]] = mapped_column(sa.Boolean)
|
||||||
room_id: Mapped[Optional[str]] = mapped_column(String)
|
room_id: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
webvtt: Mapped[Optional[str]] = mapped_column(Text)
|
webvtt: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
Index("idx_transcript_recording_id", "recording_id"),
|
sa.Index("idx_transcript_recording_id", "recording_id"),
|
||||||
Index("idx_transcript_user_id", "user_id"),
|
sa.Index("idx_transcript_user_id", "user_id"),
|
||||||
Index("idx_transcript_created_at", "created_at"),
|
sa.Index("idx_transcript_created_at", "created_at"),
|
||||||
Index("idx_transcript_user_id_recording_id", "user_id", "recording_id"),
|
sa.Index("idx_transcript_user_id_recording_id", "user_id", "recording_id"),
|
||||||
Index("idx_transcript_room_id", "room_id"),
|
sa.Index("idx_transcript_room_id", "room_id"),
|
||||||
Index("idx_transcript_source_kind", "source_kind"),
|
sa.Index("idx_transcript_source_kind", "source_kind"),
|
||||||
Index("idx_transcript_room_id_created_at", "room_id", "created_at"),
|
sa.Index("idx_transcript_room_id_created_at", "room_id", "created_at"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
from sqlalchemy import Computed
|
TranscriptModel.search_vector_en = sa.Column(
|
||||||
|
|
||||||
TranscriptModel.search_vector_en = Column(
|
|
||||||
"search_vector_en",
|
"search_vector_en",
|
||||||
TSVECTOR,
|
TSVECTOR,
|
||||||
Computed(
|
sa.Computed(
|
||||||
"setweight(to_tsvector('english', coalesce(title, '')), 'A') || "
|
"setweight(to_tsvector('english', coalesce(title, '')), 'A') || "
|
||||||
"setweight(to_tsvector('english', coalesce(long_summary, '')), 'B') || "
|
"setweight(to_tsvector('english', coalesce(long_summary, '')), 'B') || "
|
||||||
"setweight(to_tsvector('english', coalesce(webvtt, '')), 'C')",
|
"setweight(to_tsvector('english', coalesce(webvtt, '')), 'C')",
|
||||||
@@ -88,83 +74,85 @@ TranscriptModel.search_vector_en = Column(
|
|||||||
class RoomModel(Base):
|
class RoomModel(Base):
|
||||||
__tablename__ = "room"
|
__tablename__ = "room"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
name: Mapped[str] = mapped_column(String, nullable=False, unique=True)
|
name: Mapped[str] = mapped_column(sa.String, nullable=False, unique=True)
|
||||||
user_id: Mapped[str] = mapped_column(String, nullable=False)
|
user_id: Mapped[str] = mapped_column(sa.String, nullable=False)
|
||||||
created_at: Mapped[datetime] = mapped_column(
|
created_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
zulip_auto_post: Mapped[bool] = mapped_column(
|
zulip_auto_post: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
zulip_stream: Mapped[Optional[str]] = mapped_column(String)
|
zulip_stream: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
zulip_topic: Mapped[Optional[str]] = mapped_column(String)
|
zulip_topic: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
is_locked: Mapped[bool] = mapped_column(
|
is_locked: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
room_mode: Mapped[str] = mapped_column(
|
room_mode: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="normal"
|
sa.String, nullable=False, server_default="normal"
|
||||||
)
|
)
|
||||||
recording_type: Mapped[str] = mapped_column(
|
recording_type: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="cloud"
|
sa.String, nullable=False, server_default="cloud"
|
||||||
)
|
)
|
||||||
recording_trigger: Mapped[str] = mapped_column(
|
recording_trigger: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="automatic-2nd-participant"
|
sa.String, nullable=False, server_default="automatic-2nd-participant"
|
||||||
)
|
)
|
||||||
is_shared: Mapped[bool] = mapped_column(
|
is_shared: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
webhook_url: Mapped[Optional[str]] = mapped_column(String)
|
webhook_url: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
webhook_secret: Mapped[Optional[str]] = mapped_column(String)
|
webhook_secret: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
ics_url: Mapped[Optional[str]] = mapped_column(Text)
|
ics_url: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
ics_fetch_interval: Mapped[Optional[int]] = mapped_column(
|
ics_fetch_interval: Mapped[Optional[int]] = mapped_column(
|
||||||
Integer, server_default=text("300")
|
sa.Integer, server_default=sa.text("300")
|
||||||
)
|
)
|
||||||
ics_enabled: Mapped[bool] = mapped_column(
|
ics_enabled: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
ics_last_sync: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
ics_last_sync: Mapped[Optional[datetime]] = mapped_column(
|
||||||
ics_last_etag: Mapped[Optional[str]] = mapped_column(Text)
|
sa.DateTime(timezone=True)
|
||||||
|
)
|
||||||
|
ics_last_etag: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
Index("idx_room_is_shared", "is_shared"),
|
sa.Index("idx_room_is_shared", "is_shared"),
|
||||||
Index("idx_room_ics_enabled", "ics_enabled"),
|
sa.Index("idx_room_ics_enabled", "ics_enabled"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class MeetingModel(Base):
|
class MeetingModel(Base):
|
||||||
__tablename__ = "meeting"
|
__tablename__ = "meeting"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
room_name: Mapped[Optional[str]] = mapped_column(String)
|
room_name: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
room_url: Mapped[Optional[str]] = mapped_column(String)
|
room_url: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
host_room_url: Mapped[Optional[str]] = mapped_column(String)
|
host_room_url: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
start_date: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
start_date: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
|
||||||
end_date: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
end_date: Mapped[Optional[datetime]] = mapped_column(sa.DateTime(timezone=True))
|
||||||
room_id: Mapped[Optional[str]] = mapped_column(
|
room_id: Mapped[Optional[str]] = mapped_column(
|
||||||
String, ForeignKey("room.id", ondelete="CASCADE")
|
sa.String, sa.ForeignKey("room.id", ondelete="CASCADE")
|
||||||
)
|
)
|
||||||
is_locked: Mapped[bool] = mapped_column(
|
is_locked: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
room_mode: Mapped[str] = mapped_column(
|
room_mode: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="normal"
|
sa.String, nullable=False, server_default="normal"
|
||||||
)
|
)
|
||||||
recording_type: Mapped[str] = mapped_column(
|
recording_type: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="cloud"
|
sa.String, nullable=False, server_default="cloud"
|
||||||
)
|
)
|
||||||
recording_trigger: Mapped[str] = mapped_column(
|
recording_trigger: Mapped[str] = mapped_column(
|
||||||
String, nullable=False, server_default="automatic-2nd-participant"
|
sa.String, nullable=False, server_default="automatic-2nd-participant"
|
||||||
)
|
)
|
||||||
num_clients: Mapped[int] = mapped_column(
|
num_clients: Mapped[int] = mapped_column(
|
||||||
Integer, nullable=False, server_default=text("0")
|
sa.Integer, nullable=False, server_default=sa.text("0")
|
||||||
)
|
)
|
||||||
is_active: Mapped[bool] = mapped_column(
|
is_active: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("true")
|
sa.Boolean, nullable=False, server_default=sa.text("true")
|
||||||
)
|
)
|
||||||
calendar_event_id: Mapped[Optional[str]] = mapped_column(
|
calendar_event_id: Mapped[Optional[str]] = mapped_column(
|
||||||
String,
|
sa.String,
|
||||||
ForeignKey(
|
sa.ForeignKey(
|
||||||
"calendar_event.id",
|
"calendar_event.id",
|
||||||
ondelete="SET NULL",
|
ondelete="SET NULL",
|
||||||
name="fk_meeting_calendar_event_id",
|
name="fk_meeting_calendar_event_id",
|
||||||
@@ -173,73 +161,77 @@ class MeetingModel(Base):
|
|||||||
calendar_metadata: Mapped[Optional[dict]] = mapped_column(JSONB)
|
calendar_metadata: Mapped[Optional[dict]] = mapped_column(JSONB)
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
Index("idx_meeting_room_id", "room_id"),
|
sa.Index("idx_meeting_room_id", "room_id"),
|
||||||
Index("idx_meeting_calendar_event", "calendar_event_id"),
|
sa.Index("idx_meeting_calendar_event", "calendar_event_id"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class MeetingConsentModel(Base):
|
class MeetingConsentModel(Base):
|
||||||
__tablename__ = "meeting_consent"
|
__tablename__ = "meeting_consent"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
meeting_id: Mapped[str] = mapped_column(
|
meeting_id: Mapped[str] = mapped_column(
|
||||||
String, ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
|
sa.String, sa.ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
|
||||||
)
|
)
|
||||||
user_id: Mapped[Optional[str]] = mapped_column(String)
|
user_id: Mapped[Optional[str]] = mapped_column(sa.String)
|
||||||
consent_given: Mapped[bool] = mapped_column(Boolean, nullable=False)
|
consent_given: Mapped[bool] = mapped_column(sa.Boolean, nullable=False)
|
||||||
consent_timestamp: Mapped[datetime] = mapped_column(
|
consent_timestamp: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class RecordingModel(Base):
|
class RecordingModel(Base):
|
||||||
__tablename__ = "recording"
|
__tablename__ = "recording"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
meeting_id: Mapped[str] = mapped_column(
|
meeting_id: Mapped[str] = mapped_column(
|
||||||
String, ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
|
sa.String, sa.ForeignKey("meeting.id", ondelete="CASCADE"), nullable=False
|
||||||
)
|
)
|
||||||
url: Mapped[str] = mapped_column(String, nullable=False)
|
url: Mapped[str] = mapped_column(sa.String, nullable=False)
|
||||||
object_key: Mapped[str] = mapped_column(String, nullable=False)
|
object_key: Mapped[str] = mapped_column(sa.String, nullable=False)
|
||||||
duration: Mapped[Optional[float]] = mapped_column(Float)
|
duration: Mapped[Optional[float]] = mapped_column(sa.Float)
|
||||||
created_at: Mapped[datetime] = mapped_column(
|
created_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
|
|
||||||
__table_args__ = (Index("idx_recording_meeting_id", "meeting_id"),)
|
__table_args__ = (sa.Index("idx_recording_meeting_id", "meeting_id"),)
|
||||||
|
|
||||||
|
|
||||||
class CalendarEventModel(Base):
|
class CalendarEventModel(Base):
|
||||||
__tablename__ = "calendar_event"
|
__tablename__ = "calendar_event"
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String, primary_key=True)
|
id: Mapped[str] = mapped_column(sa.String, primary_key=True)
|
||||||
room_id: Mapped[str] = mapped_column(
|
room_id: Mapped[str] = mapped_column(
|
||||||
String, ForeignKey("room.id", ondelete="CASCADE"), nullable=False
|
sa.String, sa.ForeignKey("room.id", ondelete="CASCADE"), nullable=False
|
||||||
)
|
)
|
||||||
ics_uid: Mapped[str] = mapped_column(Text, nullable=False)
|
ics_uid: Mapped[str] = mapped_column(sa.Text, nullable=False)
|
||||||
title: Mapped[Optional[str]] = mapped_column(Text)
|
title: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
description: Mapped[Optional[str]] = mapped_column(Text)
|
description: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
start_time: Mapped[datetime] = mapped_column(
|
start_time: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
|
)
|
||||||
|
end_time: Mapped[datetime] = mapped_column(
|
||||||
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
end_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
|
|
||||||
attendees: Mapped[Optional[dict]] = mapped_column(JSONB)
|
attendees: Mapped[Optional[dict]] = mapped_column(JSONB)
|
||||||
location: Mapped[Optional[str]] = mapped_column(Text)
|
location: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
ics_raw_data: Mapped[Optional[str]] = mapped_column(Text)
|
ics_raw_data: Mapped[Optional[str]] = mapped_column(sa.Text)
|
||||||
last_synced: Mapped[datetime] = mapped_column(
|
last_synced: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
is_deleted: Mapped[bool] = mapped_column(
|
is_deleted: Mapped[bool] = mapped_column(
|
||||||
Boolean, nullable=False, server_default=text("false")
|
sa.Boolean, nullable=False, server_default=sa.text("false")
|
||||||
)
|
)
|
||||||
created_at: Mapped[datetime] = mapped_column(
|
created_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
updated_at: Mapped[datetime] = mapped_column(
|
updated_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), nullable=False
|
sa.DateTime(timezone=True), nullable=False
|
||||||
)
|
)
|
||||||
|
|
||||||
__table_args__ = (Index("idx_calendar_event_room_start", "room_id", "start_time"),)
|
__table_args__ = (
|
||||||
|
sa.Index("idx_calendar_event_room_start", "room_id", "start_time"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
metadata = Base.metadata
|
metadata = Base.metadata
|
||||||
|
|||||||
Reference in New Issue
Block a user