Add endpoint that allows to move an event to a different calendar
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Jenkins Production Deployment
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Jenkins Production Deployment
				
			This commit is contained in:
		
							parent
							
								
									cb85e81d67
								
							
						
					
					
						commit
						a38fb20e5a
					
				| 
						 | 
				
			
			@ -246,6 +246,63 @@ eventsRouter.put('/:eventId', async (req: Request, res: Response) => {
 | 
			
		|||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
eventsRouter.put('/move/:eventId', async (req: Request, res: Response) => {
 | 
			
		||||
	try {
 | 
			
		||||
		// Get params
 | 
			
		||||
		let sessionId: string = req.query.sessionId as string ?? '';
 | 
			
		||||
		let sessionKey: string = req.query.sessionKey as string ?? '';
 | 
			
		||||
		let ip: string = req.socket.remoteAddress ?? '';
 | 
			
		||||
 | 
			
		||||
		let user = await UserService.checkSession(sessionId, sessionKey, ip);
 | 
			
		||||
 | 
			
		||||
		if (!user.isActive) {
 | 
			
		||||
			res.status(403).send({'message': 'You do not have access to the specified calendar.'});
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (
 | 
			
		||||
			req.params.eventId === undefined ||
 | 
			
		||||
			req.body.calendarId === undefined
 | 
			
		||||
		) {
 | 
			
		||||
			res.status(400).send({'message': 'Required parameters missing'});
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		let event: Event = {
 | 
			
		||||
			eventId: parseInt(req.params.eventId, 10),
 | 
			
		||||
			calendarId: req.body.calendarId,
 | 
			
		||||
			uuid: '',
 | 
			
		||||
			name: req.body.name,
 | 
			
		||||
			description: req.body.description ?? '',
 | 
			
		||||
			startDateTime: new Date(req.body.startDateTime),
 | 
			
		||||
			endDateTime: new Date(req.body.endDateTime),
 | 
			
		||||
			createdDate: new Date(),
 | 
			
		||||
			location: req.body.location ?? '',
 | 
			
		||||
			createdBy: req.body.createdBy ?? '',
 | 
			
		||||
			createdById: user.userId ?? -1,
 | 
			
		||||
			url: req.body.url ?? '',
 | 
			
		||||
			wholeDay: req.body.wholeDay ?? false,
 | 
			
		||||
			status: req.body.status ?? 'PUBLIC'
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		let success = await EventService.moveEvent(event);
 | 
			
		||||
 | 
			
		||||
		if (success) {
 | 
			
		||||
			res.status(200).send({'message': 'Event was successfully moved'});
 | 
			
		||||
		} else {
 | 
			
		||||
			res.status(500).send({'message': 'An error occurred during the moving process. Please try again.'});
 | 
			
		||||
		}
 | 
			
		||||
	} catch (e: any) {
 | 
			
		||||
		let errorGuid = Guid.create().toString();
 | 
			
		||||
		logger.error('Error handling a request: ' + e.message, {reference: errorGuid});
 | 
			
		||||
		res.status(500).send({
 | 
			
		||||
			'status': 'PROCESSING_ERROR',
 | 
			
		||||
			'message': 'Internal Server Error. Try again later.',
 | 
			
		||||
			'reference': errorGuid
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
eventsRouter.delete('/:eventId', async (req: Request, res: Response) => {
 | 
			
		||||
	try {
 | 
			
		||||
		// Get params
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,3 +188,26 @@ export const deleteEvent = async (event: Event): Promise<boolean> => {
 | 
			
		|||
		await conn.end();
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Moves an event to the specified calendar
 | 
			
		||||
 * @param event The event to move. Has to have the target calendar set already.
 | 
			
		||||
 */
 | 
			
		||||
export const moveEvent = async (event: Event): Promise<boolean> => {
 | 
			
		||||
	let conn = await NachklangCalendarDB.getConnection();
 | 
			
		||||
	try {
 | 
			
		||||
		const eventQuery  = 'UPDATE events SET calendar_id = ? WHERE event_id = ?';
 | 
			
		||||
		const eventRes = await conn.execute(eventQuery, [event.calendarId, event.eventId]);
 | 
			
		||||
 | 
			
		||||
		await conn.commit();
 | 
			
		||||
 | 
			
		||||
		return eventRes.affectedRows === 1;
 | 
			
		||||
	} catch (err) {
 | 
			
		||||
		await conn.rollback();
 | 
			
		||||
		throw err;
 | 
			
		||||
	} finally {
 | 
			
		||||
		// Return connection
 | 
			
		||||
		await conn.commit();
 | 
			
		||||
		await conn.end();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user