API-19: Adding event endpoint (#10)
Co-authored-by: Patrick Müller <patrick@mueller-patrick.tech> Reviewed-on: #10 Co-authored-by: Patrick Müller <patrick@plutodev.de> Co-committed-by: Patrick Müller <patrick@plutodev.de>
This commit is contained in:
parent
f716d24d51
commit
ac10b1b43c
|
@ -106,3 +106,35 @@ dataRouter.get('/friendship/:isDevCall', async (req: Request, res: Response) =>
|
||||||
res.status(500).send({'message': 'Internal Server Error. Try again later.'});
|
res.status(500).send({'message': 'Internal Server Error. Try again later.'});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
dataRouter.get('/event/:isDevCall', async (req: Request, res: Response) => {
|
||||||
|
try {
|
||||||
|
let userId = (req.query.userId ?? '').toString();
|
||||||
|
let sessionId = (req.query.sessionId ?? '').toString();
|
||||||
|
let sessionKey = (req.query.sessionKey ?? '').toString();
|
||||||
|
let useDev: boolean = (req.params.isDevCall ?? '') === 'dev'; // TBD
|
||||||
|
|
||||||
|
if (userId === '' || sessionId === '' || sessionKey === '') {
|
||||||
|
res.status(400).send({
|
||||||
|
'status': 'WRONG_PARAMS',
|
||||||
|
'message': 'Missing or wrong parameters'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!await UserService.checkSession(useDev, userId, sessionId, sessionKey)) {
|
||||||
|
res.status(403).send({
|
||||||
|
'status': 'INVALID_SESSION',
|
||||||
|
'message': 'The user or session could not be found or the session is invalid'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let data = await DataService.getEventData(useDev, userId);
|
||||||
|
|
||||||
|
res.status(200).send(data);
|
||||||
|
} catch (e) {
|
||||||
|
logger.error('Error handling a request: ' + e.message);
|
||||||
|
res.status(500).send({'message': 'Internal Server Error. Try again later.'});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -52,6 +52,42 @@ export interface Friendship {
|
||||||
friendUsername: string;
|
friendUsername: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in the getEventData method
|
||||||
|
*/
|
||||||
|
export interface Invite {
|
||||||
|
inviteId: string;
|
||||||
|
inviteKey: string;
|
||||||
|
validUntil: Date;
|
||||||
|
alreadyUsed: boolean;
|
||||||
|
invitedPersonName: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in the getEventData method
|
||||||
|
*/
|
||||||
|
export interface Registration {
|
||||||
|
registrationId: string;
|
||||||
|
name: string;
|
||||||
|
registeredDate: Date;
|
||||||
|
takesPart: boolean;
|
||||||
|
comment: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in the getEventData method as a return value
|
||||||
|
*/
|
||||||
|
export interface Event {
|
||||||
|
eventId: string;
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
takesPlaceDate: Date;
|
||||||
|
registrationUntilDate: Date;
|
||||||
|
maxParticipants: number;
|
||||||
|
invites: Invite[];
|
||||||
|
registrations: Registration[];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all data about the given user
|
* Returns all data about the given user
|
||||||
* @param useDev If the dev or prod database should be used
|
* @param useDev If the dev or prod database should be used
|
||||||
|
@ -135,7 +171,7 @@ export const getSessionData = async (useDev: boolean, userId: string): Promise<S
|
||||||
* Returns all friends of the given user
|
* Returns all friends of the given user
|
||||||
* @param useDev If the dev or prod database should be used
|
* @param useDev If the dev or prod database should be used
|
||||||
* @param userId The userId of the user to fetch the friends for
|
* @param userId The userId of the user to fetch the friends for
|
||||||
* @return Friendship A list of friends
|
* @return Friendship[] A list of friends
|
||||||
*/
|
*/
|
||||||
export const getFriendshipData = async (useDev: boolean, userId: string): Promise<Friendship[]> => {
|
export const getFriendshipData = async (useDev: boolean, userId: string): Promise<Friendship[]> => {
|
||||||
let conn;
|
let conn;
|
||||||
|
@ -169,3 +205,81 @@ export const getFriendshipData = async (useDev: boolean, userId: string): Promis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all events of the given user
|
||||||
|
* @param useDev If the dev or prod database should be used
|
||||||
|
* @param userId The userId of the user to fetch the friends for
|
||||||
|
* @return Event[] A list of events
|
||||||
|
*/
|
||||||
|
export const getEventData = async (useDev: boolean, userId: string): Promise<Event[]> => {
|
||||||
|
let conn;
|
||||||
|
try {
|
||||||
|
if (useDev) {
|
||||||
|
conn = await dev_pool.getConnection();
|
||||||
|
} else {
|
||||||
|
conn = await prod_pool.getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
let eventRows = await conn.query('SELECT event_id, name, description, takes_place_date, registration_until_date, max_participants FROM events WHERE creator_id = ?', userId);
|
||||||
|
|
||||||
|
let eventsMap = new Map<string, Event>();
|
||||||
|
let eventIds: string[] = [];
|
||||||
|
|
||||||
|
for (let row of eventRows) {
|
||||||
|
eventIds.push(row.event_id);
|
||||||
|
let event = {
|
||||||
|
eventId: row.event_id,
|
||||||
|
name: row.name,
|
||||||
|
description: row.description,
|
||||||
|
takesPlaceDate: row.takes_place_date,
|
||||||
|
registrationUntilDate: row.registration_until_date,
|
||||||
|
maxParticipants: row.max_participants,
|
||||||
|
invites: [],
|
||||||
|
registrations: []
|
||||||
|
};
|
||||||
|
eventsMap.set(row.event_id, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
let registrationRows = await conn.query('SELECT registration_id, name, registered_date, takes_part, comment, event_id FROM event_registration WHERE event_id IN (?)', eventIds);
|
||||||
|
|
||||||
|
for (let row of registrationRows) {
|
||||||
|
let event = eventsMap.get(row.event_id);
|
||||||
|
if (!event) continue;
|
||||||
|
event.registrations.push({
|
||||||
|
registrationId: row.registration_id,
|
||||||
|
name: row.name,
|
||||||
|
registeredDate: row.registered_date,
|
||||||
|
takesPart: row.takes_part,
|
||||||
|
comment: row.comment
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let inviteRows = await conn.query('SELECT invite_id, invite_key, valid_until, already_used, invited_person_name, event_id FROM invitations WHERE event_id IN (?)', eventIds);
|
||||||
|
|
||||||
|
for (let row of inviteRows) {
|
||||||
|
let event = eventsMap.get(row.event_id);
|
||||||
|
if (!event) continue;
|
||||||
|
event.invites.push({
|
||||||
|
inviteId: row.invite_id,
|
||||||
|
inviteKey: row.invite_key,
|
||||||
|
validUntil: row.valid_until,
|
||||||
|
alreadyUsed: row.already_used,
|
||||||
|
invitedPersonName: row.invited_person_name
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let eventsList: Event[] = [];
|
||||||
|
for (let event of eventsMap.values()) {
|
||||||
|
eventsList.push(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return eventsList;
|
||||||
|
} catch (err) {
|
||||||
|
throw err;
|
||||||
|
} finally {
|
||||||
|
if (conn) {
|
||||||
|
conn.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user