mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 12:19:06 +00:00
Fix transcript link to meeting
This commit is contained in:
@@ -11,7 +11,6 @@ from reflector.events import subscribers_shutdown, subscribers_startup
|
||||
from reflector.logger import logger
|
||||
from reflector.metrics import metrics_init
|
||||
from reflector.settings import settings
|
||||
from reflector.views.meetings import router as meetings_router
|
||||
from reflector.views.rooms import router as rooms_router
|
||||
from reflector.views.rtc_offer import router as rtc_offer_router
|
||||
from reflector.views.transcripts import router as transcripts_router
|
||||
@@ -70,7 +69,6 @@ metrics_init(app, instrumentator)
|
||||
|
||||
# register views
|
||||
app.include_router(rtc_offer_router)
|
||||
app.include_router(meetings_router, prefix="/v1")
|
||||
app.include_router(rooms_router, prefix="/v1")
|
||||
app.include_router(transcripts_router, prefix="/v1")
|
||||
app.include_router(transcripts_audio_router, prefix="/v1")
|
||||
|
||||
@@ -7,7 +7,6 @@ database = databases.Database(settings.DATABASE_URL)
|
||||
metadata = sqlalchemy.MetaData()
|
||||
|
||||
# import models
|
||||
import reflector.db.meetings # noqa
|
||||
import reflector.db.rooms # noqa
|
||||
import reflector.db.transcripts # noqa
|
||||
|
||||
|
||||
@@ -137,5 +137,9 @@ class Settings(BaseSettings):
|
||||
|
||||
WHEREBY_API_KEY: str | None = None
|
||||
|
||||
AWS_WHEREBY_S3_BUCKET: str | None = None
|
||||
AWS_WHEREBY_ACCESS_KEY_ID: str | None = None
|
||||
AWS_WHEREBY_ACCESS_KEY_SECRET: str | None = None
|
||||
|
||||
|
||||
settings = Settings()
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Annotated, Optional
|
||||
|
||||
import reflector.auth as auth
|
||||
from fastapi import APIRouter, Depends
|
||||
from pydantic import BaseModel
|
||||
from reflector.db.meetings import meetings_controller
|
||||
from reflector.whereby import create_meeting
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class GetMeeting(BaseModel):
|
||||
id: str
|
||||
room_name: str
|
||||
room_url: str
|
||||
host_room_url: str
|
||||
viewer_room_url: str
|
||||
start_date: datetime
|
||||
end_date: datetime
|
||||
|
||||
|
||||
@router.get("/meetings/{meeting_id}", response_model=GetMeeting)
|
||||
async def meeting_get(
|
||||
meeting_id: str,
|
||||
user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)],
|
||||
):
|
||||
user_id = user["sub"] if user else None
|
||||
return await meetings_controller.get_by_id_for_http(meeting_id, user_id=user_id)
|
||||
|
||||
|
||||
@router.post("/meetings/", response_model=GetMeeting)
|
||||
async def meeting_create(
|
||||
room_id: str,
|
||||
user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)],
|
||||
):
|
||||
user_id = user["sub"] if user else None
|
||||
meeting = await meetings_controller.get_latest(room_id)
|
||||
if meeting is None:
|
||||
start_date = datetime.now(timezone.utc)
|
||||
end_date = start_date + timedelta(hours=1)
|
||||
meeting = await create_meeting("", start_date=start_date, end_date=end_date)
|
||||
|
||||
meeting = await meetings_controller.add(
|
||||
id=meeting["meetingId"],
|
||||
room_name=meeting["roomName"],
|
||||
room_url=meeting["roomUrl"],
|
||||
host_room_url=meeting["hostRoomUrl"],
|
||||
viewer_room_url=meeting["viewerRoomUrl"],
|
||||
start_date=datetime.fromisoformat(meeting["startDate"]),
|
||||
end_date=datetime.fromisoformat(meeting["endDate"]),
|
||||
user_id=user_id,
|
||||
room_id=room_id,
|
||||
)
|
||||
|
||||
return await meetings_controller.get_by_id_for_http(meeting.id, user_id=user_id)
|
||||
@@ -11,7 +11,6 @@ from reflector.db import database
|
||||
from reflector.db.meetings import meetings_controller
|
||||
from reflector.db.rooms import rooms_controller
|
||||
from reflector.settings import settings
|
||||
from reflector.views.meetings import GetMeeting
|
||||
from reflector.whereby import create_meeting
|
||||
|
||||
router = APIRouter()
|
||||
@@ -24,6 +23,16 @@ class Room(BaseModel):
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class Meeting(BaseModel):
|
||||
id: str
|
||||
room_name: str
|
||||
room_url: str
|
||||
host_room_url: str
|
||||
viewer_room_url: str
|
||||
start_date: datetime
|
||||
end_date: datetime
|
||||
|
||||
|
||||
class CreateRoom(BaseModel):
|
||||
name: str
|
||||
|
||||
@@ -76,7 +85,7 @@ async def rooms_delete(
|
||||
return DeletionStatus(status="ok")
|
||||
|
||||
|
||||
@router.post("/rooms/{room_name}/meeting", response_model=GetMeeting)
|
||||
@router.post("/rooms/{room_name}/meeting", response_model=Meeting)
|
||||
async def rooms_create_meeting(
|
||||
room_name: str,
|
||||
user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)],
|
||||
|
||||
@@ -7,7 +7,6 @@ from fastapi_pagination import Page
|
||||
from fastapi_pagination.ext.databases import paginate
|
||||
from jose import jwt
|
||||
from pydantic import BaseModel, Field
|
||||
from reflector.db.meetings import meetings_controller
|
||||
from reflector.db.transcripts import (
|
||||
TranscriptParticipant,
|
||||
TranscriptTopic,
|
||||
@@ -111,37 +110,6 @@ async def transcripts_create(
|
||||
)
|
||||
|
||||
|
||||
@router.post("/transcripts/meeting", response_model=GetTranscript)
|
||||
async def transcripts_create_meeting(
|
||||
info: CreateTranscript,
|
||||
user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)],
|
||||
):
|
||||
user_id = user["sub"] if user else None
|
||||
start_date = datetime.now(timezone.utc)
|
||||
end_date = start_date + timedelta(hours=1)
|
||||
meeting = await create_meeting("", start_date=start_date, end_date=end_date)
|
||||
|
||||
meeting = await meetings_controller.create(
|
||||
id=meeting["meetingId"],
|
||||
room_name=meeting["roomName"],
|
||||
room_url=meeting["roomUrl"],
|
||||
host_room_url=meeting["hostRoomUrl"],
|
||||
viewer_room_url=meeting["viewerRoomUrl"],
|
||||
start_date=datetime.fromisoformat(meeting["startDate"]),
|
||||
end_date=datetime.fromisoformat(meeting["endDate"]),
|
||||
user_id=user_id,
|
||||
)
|
||||
|
||||
return await transcripts_controller.add(
|
||||
"",
|
||||
source_language=info.source_language,
|
||||
target_language=info.target_language,
|
||||
user_id=user_id,
|
||||
meeting_id=meeting.id,
|
||||
share_mode="public",
|
||||
)
|
||||
|
||||
|
||||
# ==============================================================
|
||||
# Single transcript
|
||||
# ==============================================================
|
||||
|
||||
@@ -19,6 +19,17 @@ async def create_meeting(
|
||||
"roomMode": "normal",
|
||||
"startDate": start_date.isoformat(),
|
||||
"endDate": end_date.isoformat(),
|
||||
"recording": {
|
||||
"type": "cloud",
|
||||
"destination": {
|
||||
"provider": "s3",
|
||||
"bucket": settings.AWS_WHEREBY_S3_BUCKET,
|
||||
"accessKeyId": settings.AWS_WHEREBY_ACCESS_KEY_ID,
|
||||
"accessKeySecret": settings.AWS_WHEREBY_ACCESS_KEY_SECRET,
|
||||
"fileFormat": "mp4",
|
||||
},
|
||||
"startTrigger": "automatic-2nd-participant",
|
||||
},
|
||||
}
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
|
||||
@@ -64,16 +64,14 @@ async def process_recording(bucket_name: str, object_key: str):
|
||||
# extract a guid from the object key
|
||||
room_name = f"/{object_key[:36]}"
|
||||
meeting = await meetings_controller.get_by_room_name(room_name)
|
||||
transcript = await transcripts_controller.get_by_meeting_id(meeting.id)
|
||||
if transcript is None:
|
||||
transcript = await transcripts_controller.add(
|
||||
"",
|
||||
source_language="en",
|
||||
target_language="en",
|
||||
user_id=meeting.user_id,
|
||||
meeting_id=meeting.id,
|
||||
share_mode="public",
|
||||
)
|
||||
transcript = await transcripts_controller.add(
|
||||
"",
|
||||
source_language="en",
|
||||
target_language="en",
|
||||
user_id=meeting.user_id,
|
||||
meeting_id=meeting.id,
|
||||
share_mode="public",
|
||||
)
|
||||
|
||||
_, extension = os.path.splitext(object_key)
|
||||
upload_filename = transcript.data_path / f"upload{extension}"
|
||||
|
||||
Reference in New Issue
Block a user