EvalueTonSavoir/server/controllers/room.js

238 lines
5.3 KiB
JavaScript
Raw Normal View History

const AppError = require("../middleware/AppError.js");
const {
MISSING_REQUIRED_PARAMETER,
ROOM_NOT_FOUND,
ROOM_ALREADY_EXISTS,
GETTING_ROOM_ERROR,
DELETE_ROOM_ERROR,
UPDATE_ROOM_ERROR,
} = require("../constants/errorCodes");
2025-02-19 18:56:37 -05:00
class RoomsController {
constructor(roomsModel) {
this.rooms = roomsModel;
this.getRoomTitle = this.getRoomTitle.bind(this);
}
2025-02-19 18:56:37 -05:00
create = async (req, res, next) => {
2025-02-19 18:56:37 -05:00
try {
if (!req.user || !req.user.userId) {
throw new AppError("Utilisateur non authentifié", 401);
}
2025-02-19 18:56:37 -05:00
const { title } = req.body;
if (!title) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
2025-02-19 18:56:37 -05:00
const normalizedTitle = title.toUpperCase();
2025-02-19 18:56:37 -05:00
const roomExists = await this.rooms.roomExists(normalizedTitle);
2025-02-19 18:56:37 -05:00
if (roomExists) {
const error = new AppError(ROOM_ALREADY_EXISTS);
error.message = "Cette salle existe déjà";
error.statusCode = 409;
throw error;
}
const result = await this.rooms.create(normalizedTitle, req.user.userId);
2025-02-19 18:56:37 -05:00
return res.status(201).json({
message: "Room créée avec succès.",
roomId: result.insertedId,
});
2025-02-19 18:56:37 -05:00
} catch (error) {
next(Object.assign(error, { message: error.message }));
2025-02-19 18:56:37 -05:00
}
};
2025-02-19 18:56:37 -05:00
getUserRooms = async (req, res, next) => {
try {
const rooms = await this.rooms.getUserRooms(req.user.userId);
2025-02-19 18:56:37 -05:00
if (!rooms) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({
data: rooms,
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
2025-02-19 18:56:37 -05:00
getRoomContent = async (req, res, next) => {
try {
const { roomId } = req.params;
2025-02-19 18:56:37 -05:00
if (!roomId) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
const content = await this.rooms.getContent(roomId);
2025-02-19 18:56:37 -05:00
if (!content) {
throw new AppError(GETTING_ROOM_ERROR);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({
data: content,
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
2025-02-19 18:56:37 -05:00
delete = async (req, res, next) => {
try {
const { roomId } = req.params;
2025-02-19 18:56:37 -05:00
if (!roomId) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
2025-02-19 18:56:37 -05:00
const owner = await this.rooms.getOwner(roomId);
2025-02-19 18:56:37 -05:00
if (owner != req.user.userId) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
const result = await this.rooms.delete(roomId);
2025-02-19 18:56:37 -05:00
if (!result) {
throw new AppError(DELETE_ROOM_ERROR);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({
message: "Salle supprimé avec succès.",
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
2025-02-19 18:56:37 -05:00
rename = async (req, res, next) => {
try {
const { roomId, newTitle } = req.body;
2025-02-19 18:56:37 -05:00
if (!roomId || !newTitle) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
2025-02-19 18:56:37 -05:00
const owner = await this.rooms.getOwner(roomId);
2025-02-19 18:56:37 -05:00
if (owner != req.user.userId) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
const exists = await this.rooms.roomExists(newTitle, req.user.userId);
2025-02-19 18:56:37 -05:00
if (exists) {
throw new AppError(ROOM_ALREADY_EXISTS);
}
2025-02-19 18:56:37 -05:00
const result = await this.rooms.rename(roomId, req.user.userId, newTitle);
2025-02-19 18:56:37 -05:00
if (!result) {
throw new AppError(UPDATE_ROOM_ERROR);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({
message: "Salle mis <20> jours avec succ<63>s.",
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
2025-02-19 18:56:37 -05:00
getRoomById = async (req, res, next) => {
try {
const { roomId } = req.params;
2025-02-19 18:56:37 -05:00
if (!roomId) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
2025-02-19 18:56:37 -05:00
// Is this room mine
const owner = await this.rooms.getOwner(roomId);
2025-02-19 18:56:37 -05:00
if (owner != req.user.userId) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
const room = await this.rooms.getRoomById(roomId);
2025-02-19 18:56:37 -05:00
if (!room) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({
data: room,
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
getRoomTitle = async (req, res, next) => {
try {
const { roomId } = req.params;
2025-02-19 18:56:37 -05:00
if (!roomId) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
2025-02-19 18:56:37 -05:00
const room = await this.rooms.getRoomById(roomId);
2025-02-19 18:56:37 -05:00
if (room instanceof Error) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
return res.status(200).json({ title: room.title });
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
roomExists = async (req, res, next) => {
try {
const { title } = req.body;
2025-02-19 18:56:37 -05:00
if (!title) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
const exists = await this.rooms.roomExists(title);
2025-02-19 18:56:37 -05:00
return res.status(200).json({
exists: exists,
});
} catch (error) {
return next(error);
2025-02-19 18:56:37 -05:00
}
};
getRoomTitleByUserId = async (req, res, next) => {
try {
const { userId } = req.params;
if (!userId) {
throw new AppError(MISSING_REQUIRED_PARAMETER);
}
const rooms = await this.rooms.getUserRooms(userId);
2025-02-19 18:56:37 -05:00
if (!rooms || rooms.length === 0) {
throw new AppError(ROOM_NOT_FOUND);
}
2025-02-19 18:56:37 -05:00
const roomTitles = rooms.map((room) => room.title);
return res.status(200).json({
titles: roomTitles,
});
} catch (error) {
return next(error);
}
};
2025-02-19 18:56:37 -05:00
}
module.exports = RoomsController;