Room config

This commit is contained in:
2024-09-03 11:15:32 +02:00
parent 42796d7d3f
commit 5c89a07996
9 changed files with 375 additions and 46 deletions

View File

@@ -1,9 +1,12 @@
from datetime import datetime, timezone
from typing import Literal
import sqlalchemy
from fastapi import HTTPException
from pydantic import BaseModel
from reflector.db import database, metadata
from reflector.db.rooms import Room
from sqlalchemy.sql import false
meetings = sqlalchemy.Table(
"meeting",
@@ -17,6 +20,21 @@ meetings = sqlalchemy.Table(
sqlalchemy.Column("end_date", sqlalchemy.DateTime),
sqlalchemy.Column("user_id", sqlalchemy.String),
sqlalchemy.Column("room_id", sqlalchemy.String),
sqlalchemy.Column(
"is_locked", sqlalchemy.Boolean, nullable=False, server_default=false()
),
sqlalchemy.Column(
"room_mode", sqlalchemy.String, nullable=False, server_default="normal"
),
sqlalchemy.Column(
"recording_type", sqlalchemy.String, nullable=False, server_default="cloud"
),
sqlalchemy.Column(
"recording_trigger",
sqlalchemy.String,
nullable=False,
server_default="automatic-2nd-participant",
),
)
@@ -30,6 +48,12 @@ class Meeting(BaseModel):
end_date: datetime
user_id: str | None = None
room_id: str | None = None
is_locked: bool = False
room_mode: Literal["normal", "group"] = "normal"
recording_type: Literal["none", "local", "cloud"] = "cloud"
recording_trigger: Literal[
"none", "prompt", "automatic", "automatic-2nd-participant"
] = "automatic-2nd-participant"
class MeetingController:
@@ -43,7 +67,7 @@ class MeetingController:
start_date: datetime,
end_date: datetime,
user_id: str,
room_id: str = None,
room: Room,
):
"""
Create a new meeting
@@ -57,7 +81,11 @@ class MeetingController:
start_date=start_date,
end_date=end_date,
user_id=user_id,
room_id=room_id,
room_id=room.id,
is_locked=room.is_locked,
room_mode=room.room_mode,
recording_type=room.recording_type,
recording_trigger=room.recording_trigger,
)
query = meetings.insert().values(**meeting.model_dump())
await database.execute(query)
@@ -77,15 +105,23 @@ class MeetingController:
return Meeting(**result)
async def get_latest(self, room_id: str) -> Meeting:
async def get_latest(self, room: Room) -> Meeting:
"""
Get latest meeting for a room.
"""
end_date = getattr(meetings.c, "end_date")
query = (
meetings.select()
.where(meetings.c.room_id == room_id)
.where(meetings.c.end_date > datetime.now(timezone.utc))
.where(
sqlalchemy.and_(
meetings.c.room_id == room.id,
meetings.c.is_locked == room.is_locked,
meetings.c.room_mode == room.room_mode,
meetings.c.recording_type == room.recording_type,
meetings.c.recording_trigger == room.recording_trigger,
meetings.c.end_date > datetime.now(timezone.utc),
)
)
.order_by(end_date.desc())
)
result = await database.fetch_one(query)

View File

@@ -1,4 +1,5 @@
from datetime import datetime
from typing import Literal
import sqlalchemy
from fastapi import HTTPException
@@ -19,6 +20,21 @@ rooms = sqlalchemy.Table(
),
sqlalchemy.Column("zulip_stream", sqlalchemy.String),
sqlalchemy.Column("zulip_topic", sqlalchemy.String),
sqlalchemy.Column(
"is_locked", sqlalchemy.Boolean, nullable=False, server_default=false()
),
sqlalchemy.Column(
"room_mode", sqlalchemy.String, nullable=False, server_default="normal"
),
sqlalchemy.Column(
"recording_type", sqlalchemy.String, nullable=False, server_default="cloud"
),
sqlalchemy.Column(
"recording_trigger",
sqlalchemy.String,
nullable=False,
server_default="automatic-2nd-participant",
),
)
@@ -30,6 +46,12 @@ class Room(BaseModel):
zulip_auto_post: bool = False
zulip_stream: str = ""
zulip_topic: str = ""
is_locked: bool = False
room_mode: Literal["normal", "group"] = "normal"
recording_type: Literal["none", "local", "cloud"] = "cloud"
recording_trigger: Literal[
"none", "prompt", "automatic", "automatic-2nd-participant"
] = "automatic-2nd-participant"
class RoomController: