| import httpx |
| from cbh.api.calls.models import CallModel |
| from cbh.api.events.models import EventModel, EventShorten |
| from cbh.core.config import settings |
|
|
|
|
| async def create_meeting_room(event: EventModel | EventShorten) -> str: |
| |
| payload = { |
| "properties": { |
| "exp": int(event.endDate.timestamp()) + 3600, |
| "enable_screenshare": True, |
| "enable_chat": True, |
| "nbf": int(event.startDate.timestamp()) - 3600 * 24, |
| }, |
| "privacy": "private", |
| } |
|
|
| async with httpx.AsyncClient() as client: |
| response = await client.post( |
| "https://api.daily.co/v1/rooms", |
| json=payload, |
| headers=settings.get_headers(settings.DAILY_API_KEY), |
| ) |
| response.raise_for_status() |
| return response.json()["url"] |
|
|
|
|
| async def create_daily_token(call: CallModel, account_id: str) -> str: |
| is_coach = call.coach.id == account_id |
| |
| room_name = call.roomUrl.split("/")[-1] if call.roomUrl else None |
| if not room_name: |
| raise ValueError("Room URL is required to create a meeting token") |
|
|
| payload = { |
| "properties": { |
| "room_name": room_name, |
| "is_owner": is_coach, |
| "user_name": call.coach.name if is_coach else call.customer.name, |
| "user_id": account_id, |
| "exp": int(call.event.endDate.timestamp()) + 3600, |
| "nbf": int(call.event.startDate.timestamp()) - 3600 * 24, |
| "eject_at_token_exp": True, |
| } |
| } |
|
|
| async with httpx.AsyncClient() as client: |
| response = await client.post( |
| "https://api.daily.co/v1/meeting-tokens", |
| json=payload, |
| headers=settings.get_headers(settings.DAILY_API_KEY), |
| ) |
| response.raise_for_status() |
| return response.json()["token"] |
|
|