This repository has been archived on 2024-04-19. You can view files and clone it, but cannot push or open issues or pull requests.
brief-04-back/controllers/EventController.js
2024-04-17 16:55:04 +02:00

180 lines
5.6 KiB
JavaScript

const {
getUserFromIdService
} = require("../services/UserService");
const {
JwtVerify
} = require("../services/JwtService");
const {
getAllEventsService,
getEventFromIdService, alterUserSubscribedEventStateService, getUserSubscribedEventService
} = require("../services/EventService");
//TODO - To test
/**
* Retrieves all events.
*
* @param {Object} req - The request object.
* @param {Object} res - The response object.
* @return {Object} The response object containing all events or an error message if events not found.
*/
async function getAllEvents(req, res) {
const events = await getAllEventsService('public');
if (!events) {
return res.status(404).json({ message: "Events not found" });
}
return res.status(200).json(events);
}
//TODO - To test
/**
* Retrieves an event by ID.
*
* @param {object} req - The request object.
* @param {object} res - The response object.
*
* @return {object} Returns a response with the retrieved event.
*
* @throws {Error} Throws an error if the event ID is missing or if the event is not found.
*/
async function getEvent(req, res) {
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
const targetId = req.params.id;
if (!targetId) {
return res.status(400).json({ message: "Event ID is missing" });
}
const result = await getEventFromIdService(targetId)
if (!result) {
return res.status(404).json({ message: "Event not found" });
}
return res.status(200).json(result);
}
//TODO Owner user, admin user ===
async function editEvent(req, res) {
const body = req.body;
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
const targetId = body.targetId || sourceUser.id;
const eventTargetId = req.params.id
if (targetId !== sourceUser.id && !sourceUser.isAdmin) {
res.status(403).json({ message: "Unauthorized request" });
}
if (!eventTargetId) {
res.status(400).json({ message: "Event target ID is missing" });
}
}
//TODO Owner user, admin user ===
async function deleteEvent(req, res) {
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
}
//TODO Event creation by logged user ===
async function createNewEvent(req, res) {
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
}
//TODO - To test
/**
* Retrieves the subscribed event for the specified user.
*
* @param {Object} req - The request object.
* @param {Object} res - The response object.
* @returns {Object} The subscribed event information.
*/
async function getSubscribedEvent(req, res) {
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
const targetId = body.targetId || sourceUser.id;
if (targetId !== sourceUser.id && !sourceUser.isAdmin) {
res.status(403).json({ message: "Unauthorized request" });
}
const subscribedEventResult = await getUserSubscribedEventService(targetId);
if (subscribedEventResult.error === 'noSubscribedEventFound') {
return res
.type('application/json')
.status(404)
.json({
error: 'noSubscribedEventFound',
message: 'No subscribed event found'
});
}
return res
.type('application/json')
.status(200)
.json(subscribedEventResult);
}
//TODO - To test
/**
* Alter the subscription state of an event for a user.
* @param {Object} req
* - The request object.
* @param {Object} req.body
* - The body of the request containing the desired subscription state.
* @param {string} req.headers.authorization
* - The authorization header containing the bearer token.
* @param {string} req.params.id
* - The ID of the target event.
* @param {Object} res
* - The response object.
* @returns {Object} The response object.
*/
async function alterSubscribedEventState(req, res) {
const body = req.body
const authHeader = req.headers.authorization;
const bearerToken = authHeader.split(' ')[1];
const payload = await JwtVerify(bearerToken);
const sourceUser = await getUserFromIdService(payload.sub)
const eventTargetId = req.params.id;
const userTargetId = body.userId || sourceUser.id
const wantedState = body.subscribed === true
if (!eventTargetId) {
return res.status(400).json({ message: "Event target ID is missing" });
}
if (userTargetId !== sourceUser.id && !sourceUser.isAdmin) {
return res.status(403).json({ message: "Unauthorized request" });
}
const alterEventSubStateResult = await alterUserSubscribedEventStateService(
userTargetId,
eventTargetId,
wantedState
)
if (alterEventSubStateResult.error === 'none') {
return res.status(200).json({
message: "Event subscription state altered"
});
}
return res.status(400).json({
error: alterEventSubStateResult.error,
message: "Event subscription state not altered"
});
}
module.exports = {
getAllEvent: getAllEvents,
getEvent,
editEvent,
deleteEvent,
createNewEvent,
getSubscribedEvent,
alterSubscribedEventState
}