From d2bf18b88db28fa3bceb5b2faf496dc37e2a1741 Mon Sep 17 00:00:00 2001 From: NouhailaAater Date: Thu, 27 Feb 2025 00:43:20 -0500 Subject: [PATCH] import appError dans le model --- client/src/App.tsx | 5 +- server/models/room.js | 297 ++++++++++++++++++++++-------------------- 2 files changed, 158 insertions(+), 144 deletions(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index c1d862b..5cd7c06 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -45,10 +45,13 @@ function App() { {/* Page main */} } /> - {/* Pages espace enseignant */} + {/* Public routes */} } /> } /> } /> + + {/* Pages espace enseignant */} + } /> } /> } /> diff --git a/server/models/room.js b/server/models/room.js index d3f6a28..dc2d51f 100644 --- a/server/models/room.js +++ b/server/models/room.js @@ -1,161 +1,172 @@ -const ObjectId = require('mongodb').ObjectId; +const AppError = require("../middleware/AppError"); + +const ObjectId = require("mongodb").ObjectId; class Rooms { - constructor(db) { - this.db = db; + constructor(db) { + this.db = db; + } + + async create(title, userId) { + try { + if (!title || !userId) { + throw new AppError("Missing required parameter(s)", 400); + } + + await this.db.connect(); + const conn = this.db.getConnection(); + const roomsCollection = conn.collection("rooms"); + const normalizedTitle = title.toLowerCase(); + + const existingRoom = await roomsCollection.findOne({ + title: normalizedTitle, + userId: userId, + }); + + if (existingRoom) { + throw new AppError("Une salle avec ce nom existe déjà", 409); + } + + const newRoom = { + userId: userId, + title: title, + created_at: new Date(), + }; + + const result = await roomsCollection.insertOne(newRoom); + + return result.insertedId; + } catch (error) { + console.error("Error in create function:", error); + throw new AppError(error.message || "Internal Server Error", 500); + } + } + + async getUserRooms(userId) { + await this.db.connect(); + const conn = this.db.getConnection(); + + const roomsCollection = conn.collection("rooms"); + + const result = await roomsCollection.find({ userId: userId }).toArray(); + + return result; + } + + async getOwner(roomId) { + await this.db.connect(); + const conn = this.db.getConnection(); + + const roomsCollection = conn.collection("rooms"); + + const room = await roomsCollection.findOne({ + _id: ObjectId.createFromHexString(roomId), + }); + + return room.userId; + } + + async getContent(roomId) { + await this.db.connect(); + const conn = this.db.getConnection(); + const roomsCollection = conn.collection("rooms"); + if (!ObjectId.isValid(roomId)) { + return null; // Évite d'envoyer une requête invalide } - async create(title, userId) { - try { - if (!title || !userId) { - throw new AppError('Missing required parameter(s)', 400); - } - - await this.db.connect(); - const conn = this.db.getConnection(); - const roomsCollection = conn.collection('rooms'); - const normalizedTitle = title.toLowerCase(); - - const existingRoom = await roomsCollection.findOne({ title: normalizedTitle, userId: userId }); - - if (existingRoom) { - throw new AppError('Une salle avec ce nom existe déjà', 409); - } - - const newRoom = { - userId: userId, - title: title, - created_at: new Date() - }; - - const result = await roomsCollection.insertOne(newRoom); - - return result.insertedId; - - } catch (error) { - console.error("Error in create function:", error); - throw new AppError(error.message || "Internal Server Error", 500); - } + const result = await roomsCollection.findOne({ _id: new ObjectId(roomId) }); + + return result; + } + + async delete(roomId) { + await this.db.connect(); + const conn = this.db.getConnection(); + + const roomsCollection = conn.collection("rooms"); + + const roomResult = await roomsCollection.deleteOne({ + _id: ObjectId.createFromHexString(roomId), + }); + + if (roomResult.deletedCount != 1) return false; + + return true; + } + + async rename(roomId, userId, newTitle) { + await this.db.connect(); + const conn = this.db.getConnection(); + + const roomsCollection = conn.collection("rooms"); + + const existingRoom = await roomsCollection.findOne({ + title: newTitle, + userId: userId, + }); + + if (existingRoom) + throw new Error(`Room with name '${newTitle}' already exists.`); + + const result = await roomsCollection.updateOne( + { _id: ObjectId.createFromHexString(roomId), userId: userId }, + { $set: { title: newTitle } } + ); + + if (result.modifiedCount != 1) return false; + + return true; + } + + async roomExists(title) { + // Ajouter userId en paramètre + try { + await this.db.connect(); + const conn = this.db.getConnection(); + const existingRoom = await conn.collection("rooms").findOne({ + title: title.toLowerCase(), + }); + return !!existingRoom; + } catch (_error) { + throw new AppError("Erreur base de données", 500); // Encapsuler les erreurs } - + } - async getUserRooms(userId) { - await this.db.connect() - const conn = this.db.getConnection(); + async getRoomById(roomId) { + await this.db.connect(); + const conn = this.db.getConnection(); - const roomsCollection = conn.collection('rooms'); + const roomsCollection = conn.collection("rooms"); - const result = await roomsCollection.find({ userId: userId }).toArray(); + const room = await roomsCollection.findOne({ + _id: ObjectId.createFromHexString(roomId), + }); - return result; - } + if (!room) throw new AppError(`Room ${roomId} not found`, 404); - async getOwner(roomId) { - await this.db.connect() - const conn = this.db.getConnection(); + return room; + } - const roomsCollection = conn.collection('rooms'); + async getRoomWithContent(roomId) { + const room = await this.getRoomById(roomId); - const room = await roomsCollection.findOne({ _id: ObjectId.createFromHexString(roomId) }); + const content = await this.getContent(roomId); - return room.userId; - } + return { + ...room, + content: content, + }; + } + async getRoomTitleByUserId(userId) { + await this.db.connect(); + const conn = this.db.getConnection(); - async getContent(roomId) { - await this.db.connect(); - const conn = this.db.getConnection(); - 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() - const conn = this.db.getConnection(); - - const roomsCollection = conn.collection('rooms'); - - const roomResult = await roomsCollection.deleteOne({ _id: ObjectId.createFromHexString(roomId) }); - - if (roomResult.deletedCount != 1) return false; - - return true; - } - - async rename(roomId, userId, newTitle) { - await this.db.connect() - const conn = this.db.getConnection(); - - const roomsCollection = conn.collection('rooms'); - - const existingRoom = await roomsCollection.findOne({ title: newTitle, userId: userId }); - - if (existingRoom) throw new Error(`Room with name '${newTitle}' already exists.`); - - const result = await roomsCollection.updateOne({ _id: ObjectId.createFromHexString(roomId), userId: userId }, { $set: { title: newTitle } }) - - if (result.modifiedCount != 1) return false; - - return true - } - - async roomExists(title) { // Ajouter userId en paramètre - try { - await this.db.connect(); - const conn = this.db.getConnection(); - const existingRoom = await conn.collection('rooms').findOne({ - title: title.toLowerCase() - }); - return !!existingRoom; - } catch (error) { - throw new AppError("Erreur base de données", 500); // Encapsuler les erreurs - } - } - - - async getRoomById(roomId) { - await this.db.connect(); - const conn = this.db.getConnection(); - - const roomsCollection = conn.collection('rooms'); - - const room = await roomsCollection.findOne({ _id: ObjectId.createFromHexString(roomId) }); - - if (!room) return new Error(`Room ${roomId} not found`); - - return room; - } - - - async getRoomWithContent(roomId) { - const room = await this.getRoomById(roomId); - - const content = await this.getContent(roomId); - - return { - ...room, - content: content - }; - - } - async getRoomTitleByUserId(userId) { - await this.db.connect(); - const conn = this.db.getConnection(); - - const roomsCollection = conn.collection('rooms'); - - const rooms = await roomsCollection.find({ userId: userId }).toArray(); - - return rooms.map(room => room.title); - } + const roomsCollection = conn.collection("rooms"); + const rooms = await roomsCollection.find({ userId: userId }).toArray(); + return rooms.map((room) => room.title); + } } -module.exports = Rooms; \ No newline at end of file +module.exports = Rooms;