From 5436fc3a1fde3db3c72cac40115ddcf08c0507b2 Mon Sep 17 00:00:00 2001 From: NouhailaAater Date: Tue, 25 Feb 2025 16:12:57 -0500 Subject: [PATCH] Correction if aucune salle est selectionner --- .../pages/Teacher/ManageRoom/ManageRoom.tsx | 8 ++-- .../pages/Teacher/ManageRoom/RoomContext.tsx | 39 ++++++++++++++----- client/src/services/ApiService.tsx | 22 ++++++++++- server/controllers/room.js | 7 ---- server/models/room.js | 13 ++++--- 5 files changed, 62 insertions(+), 27 deletions(-) diff --git a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx index 802b6a5..81c3b60 100644 --- a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx +++ b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx @@ -42,10 +42,10 @@ const ManageRoom: React.FC = () => { const [roomName, setRoomName] = useState(selectedRoom?.title || ''); useEffect(() => { - if (selectedRoom) { - setRoomName(selectedRoom.title); + if (selectedRoom && !socket) { + createWebSocketRoom(); } - }, [selectedRoom]); + }, [selectedRoom]); useEffect(() => { const fetchData = async () => { @@ -110,7 +110,7 @@ const ManageRoom: React.FC = () => { console.log('Creating WebSocket room...'); if (!selectedRoom) { - setConnectingError('Aucune salle sélectionnée.'); + setConnectingError('Veuillez sélectionner une salle.'); return; } diff --git a/client/src/pages/Teacher/ManageRoom/RoomContext.tsx b/client/src/pages/Teacher/ManageRoom/RoomContext.tsx index 98913f7..30f1b83 100644 --- a/client/src/pages/Teacher/ManageRoom/RoomContext.tsx +++ b/client/src/pages/Teacher/ManageRoom/RoomContext.tsx @@ -21,16 +21,31 @@ export const RoomProvider = ({ children }: { children: React.ReactNode }) => { const userRooms = await ApiService.getUserRooms(); const roomsList = userRooms as RoomType[]; setRooms(roomsList); - if (roomsList.length > 0) { - const defaultRoom = roomsList[1]; // Set the first created room as the selected one - setSelectedRoom(defaultRoom); - localStorage.setItem('selectedRoomId', defaultRoom._id); - } else { + + const savedRoomId = localStorage.getItem('selectedRoomId'); + if (savedRoomId) { + const savedRoom = roomsList.find(r => r._id === savedRoomId); + if (savedRoom) { + setSelectedRoom(savedRoom); + return; + } + } + + if (roomsList.length === 0) { const randomRoomName = `Room-${Math.floor(Math.random() * 1000000)}`; - await createRoom(randomRoomName); + const newRoomId = await ApiService.createRoom(randomRoomName); + const newRoom = await ApiService.getRoomContent(newRoomId); + setSelectedRoom(newRoom); + localStorage.setItem('selectedRoomId', newRoomId); + + const updatedRooms = await ApiService.getUserRooms(); + setRooms(updatedRooms as RoomType[]); + } else { + setSelectedRoom(roomsList[0]); + localStorage.setItem('selectedRoomId', roomsList[0]._id); } }; - + loadRooms(); }, []); @@ -43,12 +58,16 @@ export const RoomProvider = ({ children }: { children: React.ReactNode }) => { // Créer une salle const createRoom = async (title: string) => { - const newRoomId = await ApiService.createRoom(title); + // Créer la salle et récupérer l'objet complet + const newRoom = await ApiService.createRoom(title); + + // Mettre à jour la liste des salles const updatedRooms = await ApiService.getUserRooms(); setRooms(updatedRooms as RoomType[]); - selectRoom(newRoomId); + + // Sélectionner la nouvelle salle avec son ID + selectRoom(newRoom); // Utiliser l'ID de l'objet retourné }; - return ( {children} diff --git a/client/src/services/ApiService.tsx b/client/src/services/ApiService.tsx index 8a8bbf2..bb5ae32 100644 --- a/client/src/services/ApiService.tsx +++ b/client/src/services/ApiService.tsx @@ -408,7 +408,27 @@ class ApiService { } } - + public async getRoomContent(roomId: string): Promise { + try { + const url = this.constructRequestUrl(`/room/${roomId}`); + const headers = this.constructRequestHeaders(); + + const response = await axios.get<{ data: RoomType }>(url, { headers }); + + if (response.status !== 200) { + throw new Error(`Failed to get room: ${response.status}`); + } + + return response.data.data; + + } catch (error) { + if (axios.isAxiosError(error)) { + const serverError = error.response?.data?.error; + throw new Error(serverError || 'Erreur serveur inconnue'); + } + throw new Error('Erreur réseau'); + } + } public async getRoomTitleByUserId(userId: string): Promise { try { diff --git a/server/controllers/room.js b/server/controllers/room.js index 2c17cf2..9d7c3dc 100644 --- a/server/controllers/room.js +++ b/server/controllers/room.js @@ -64,13 +64,6 @@ class RoomsController { if (!roomId) { throw new AppError(MISSING_REQUIRED_PARAMETER); } - - const owner = await this.rooms.getOwner(roomId); - - if (owner != req.user.userId) { - throw new AppError(ROOM_NOT_FOUND); - } - const content = await this.rooms.getContent(roomId); if (!content) { diff --git a/server/models/room.js b/server/models/room.js index a329608..27be617 100644 --- a/server/models/room.js +++ b/server/models/room.js @@ -58,15 +58,18 @@ class Rooms { } async getContent(roomId) { - await this.db.connect() + await this.db.connect(); const conn = this.db.getConnection(); - - const filesCollection = conn.collection('files'); - - const result = await filesCollection.find({ roomId: roomId }).toArray(); + const roomsCollection = conn.collection('rooms'); + if (!ObjectId.isValid(roomId)) { + return null; // Évite d'envoyer une requête invalide + } + + const result = await roomsCollection.findOne({ _id: new ObjectId(roomId) }); return result; } + async delete(roomId) { await this.db.connect()