EvalueTonSavoir/server/models/room.js

150 lines
3.9 KiB
JavaScript
Raw Normal View History

2025-02-19 18:56:37 -05:00
const ObjectId = require('mongodb').ObjectId;
class Rooms {
2025-02-22 00:20:37 -05:00
constructor(db) {
2025-02-19 18:56:37 -05:00
this.db = db;
}
async create(title, userId) {
if (!title || !userId) {
throw new Error('Missing required parameter(s)');
}
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 });
2025-02-19 18:56:37 -05:00
if (existingRoom) {
throw new Error('Room already exists');
}
const newRoom = {
userId: userId,
title: title,
created_at: new Date()
}
const result = await roomsCollection.insertOne(newRoom);
return result.insertedId;
}
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 filesCollection = conn.collection('files');
const result = await filesCollection.find({ roomId: roomId }).toArray();
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) {
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 });
2025-02-19 18:56:37 -05:00
return existingRoom ? true : false;
}
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);
}
}
module.exports = Rooms;