fix: meeting useEffect frontend-only dedupe (#647)

* meeting useEffect frontend-only dedupe

* format

* also get room by name backend fix

---------

Co-authored-by: Igor Loskutov <igor.loskutoff@gmail.com>
This commit is contained in:
Igor Monadical
2025-09-15 11:59:06 -04:00
committed by GitHub
parent 0510d10040
commit fb01a89bd3
3 changed files with 15 additions and 2 deletions

View File

@@ -147,7 +147,12 @@ class MeetingController:
Get a meeting by room name.
For backward compatibility, returns the most recent meeting.
"""
query = meetings.select().where(meetings.c.room_name == room_name).order_by(end_date.desc())
end_date = getattr(meetings.c, "end_date")
query = (
meetings.select()
.where(meetings.c.room_name == room_name)
.order_by(end_date.desc())
)
result = await get_database().fetch_one(query)
if not result:
return None

View File

@@ -165,6 +165,7 @@ async def rooms_get_by_name(
):
user_id = user["sub"] if user else None
room = await rooms_controller.get_by_name(room_name)
logger.debug("room: %s", room)
if not room:
raise HTTPException(status_code=404, detail="Room not found")

View File

@@ -1,4 +1,4 @@
import { useEffect, useState } from "react";
import { useEffect, useState, useRef } from "react";
import { useError } from "../(errors)/errorContext";
import type { components } from "../reflector-api";
import { shouldShowError } from "../lib/errorUtils";
@@ -37,11 +37,16 @@ const useRoomMeeting = (
const createMeetingMutation = useRoomsCreateMeeting();
const reloadHandler = () => setReload((prev) => prev + 1);
// this is to undupe dev mode room creation
const creatingRef = useRef(false);
useEffect(() => {
if (!roomName) return;
if (creatingRef.current) return;
// For any case where we need a meeting (with or without meetingId),
const createMeeting = async () => {
creatingRef.current = true;
try {
const result = await createMeetingMutation.mutateAsync({
params: {
@@ -64,6 +69,8 @@ const useRoomMeeting = (
} else {
setError(error);
}
} finally {
creatingRef.current = false;
}
};