180 lines
5.6 KiB
JavaScript
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
|
|
} |