mirror of
				https://github.com/Mueller-Patrick/Betterzon.git
				synced 2025-10-31 16:55:49 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			3874957d5a
			...
			0be394fc1d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 0be394fc1d | ||
|  | cd0c11dbc7 | ||
|  | f333bbfc05 | 
|  | @ -14,6 +14,7 @@ import {vendorsRouter} from './models/vendors/vendors.router'; | |||
| import {errorHandler} from './middleware/error.middleware'; | ||||
| import {notFoundHandler} from './middleware/notFound.middleware'; | ||||
| import {usersRouter} from './models/users/users.router'; | ||||
| import {pricealarmsRouter} from './models/pricealarms/pricealarms.router'; | ||||
| 
 | ||||
| dotenv.config(); | ||||
| 
 | ||||
|  | @ -44,6 +45,7 @@ app.use('/manufacturers', manufacturersRouter); | |||
| app.use('/prices', pricesRouter); | ||||
| app.use('/users', usersRouter); | ||||
| app.use('/vendors', vendorsRouter); | ||||
| app.use('/pricealarms', pricealarmsRouter); | ||||
| 
 | ||||
| app.use(errorHandler); | ||||
| app.use(notFoundHandler); | ||||
|  |  | |||
							
								
								
									
										6
									
								
								Backend/src/models/pricealarms/pricealarm.interface.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								Backend/src/models/pricealarms/pricealarm.interface.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| export interface PriceAlarm { | ||||
|     alarm_id: number; | ||||
|     user_id: number; | ||||
|     product_id: number; | ||||
|     defined_price: number; | ||||
| } | ||||
							
								
								
									
										5
									
								
								Backend/src/models/pricealarms/pricealarms.interface.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Backend/src/models/pricealarms/pricealarms.interface.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| import {PriceAlarm} from './pricealarm.interface'; | ||||
| 
 | ||||
| export interface PriceAlarms { | ||||
|     [key: number]: PriceAlarm; | ||||
| } | ||||
							
								
								
									
										129
									
								
								Backend/src/models/pricealarms/pricealarms.router.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								Backend/src/models/pricealarms/pricealarms.router.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,129 @@ | |||
| /** | ||||
|  * Required External Modules and Interfaces | ||||
|  */ | ||||
| 
 | ||||
| import express, {Request, Response} from 'express'; | ||||
| import * as PriceAlarmsService from './pricealarms.service'; | ||||
| import {PriceAlarm} from './pricealarm.interface'; | ||||
| import {PriceAlarms} from './pricealarms.interface'; | ||||
| import * as UserService from '../users/users.service'; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Router Definition | ||||
|  */ | ||||
| export const pricealarmsRouter = express.Router(); | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Controller Definitions | ||||
|  */ | ||||
| 
 | ||||
| //GET pricealarms/
 | ||||
| pricealarmsRouter.get('/', async (req: Request, res: Response) => { | ||||
|     try { | ||||
|         // Authenticate user
 | ||||
|         const session_id = req.body.session_id; | ||||
|         const session_key = req.body.session_key; | ||||
|         const user_ip = req.connection.remoteAddress ?? ''; | ||||
| 
 | ||||
|         if (!session_id || !session_key) { | ||||
|             // Missing
 | ||||
|             res.status(400).send(JSON.stringify({message: 'Missing parameters'})); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         const user = await UserService.checkSession(session_id, session_key, user_ip); | ||||
| 
 | ||||
|         const priceAlarms = await PriceAlarmsService.getPriceAlarms(user.user_id); | ||||
| 
 | ||||
|         res.status(200).send(priceAlarms); | ||||
|     } catch (e) { | ||||
|         console.log('Error handling a request: ' + e.message); | ||||
|         res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| // POST pricealarms/create
 | ||||
| pricealarmsRouter.post('/create', async (req: Request, res: Response) => { | ||||
|     try { | ||||
|         // Authenticate user
 | ||||
|         const session_id = req.body.session_id; | ||||
|         const session_key = req.body.session_key; | ||||
|         const user_ip = req.connection.remoteAddress ?? ''; | ||||
| 
 | ||||
|         if (!session_id || !session_key) { | ||||
|             // Missing
 | ||||
|             res.status(400).send(JSON.stringify({message: 'Missing parameters'})); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         const user = await UserService.checkSession(session_id, session_key, user_ip); | ||||
| 
 | ||||
|         // Get info for price alarm creation
 | ||||
|         const product_id = req.body.product_id; | ||||
|         const defined_price = req.body.defined_price; | ||||
| 
 | ||||
|         if (!product_id || !defined_price) { | ||||
|             // Missing
 | ||||
|             res.status(400).send(JSON.stringify({message: 'Missing parameters'})); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // Create price alarm
 | ||||
|         const success = await PriceAlarmsService.createPriceAlarm(user.user_id, product_id, defined_price); | ||||
| 
 | ||||
|         if (success) { | ||||
|             res.status(201).send(JSON.stringify({success: true})); | ||||
|             return; | ||||
|         } else { | ||||
|             res.status(500).send(JSON.stringify({success: false})); | ||||
|             return; | ||||
|         } | ||||
|     } catch (e) { | ||||
|         console.log('Error handling a request: ' + e.message); | ||||
|         res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| // PUT pricealarms/update
 | ||||
| pricealarmsRouter.put('/update', async (req: Request, res: Response) => { | ||||
|     try { | ||||
|         // Authenticate user
 | ||||
|         const session_id = req.body.session_id; | ||||
|         const session_key = req.body.session_key; | ||||
|         const user_ip = req.connection.remoteAddress ?? ''; | ||||
| 
 | ||||
|         if (!session_id || !session_key) { | ||||
|             // Missing
 | ||||
|             res.status(400).send(JSON.stringify({message: 'Missing parameters'})); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         const user = await UserService.checkSession(session_id, session_key, user_ip); | ||||
| 
 | ||||
|         // Get info for price alarm creation
 | ||||
|         const alarm_id = req.body.alarm_id; | ||||
|         const defined_price = req.body.defined_price; | ||||
| 
 | ||||
|         if (!alarm_id || !defined_price) { | ||||
|             // Missing
 | ||||
|             res.status(400).send(JSON.stringify({message: 'Missing parameters'})); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // Create price alarm
 | ||||
|         const success = await PriceAlarmsService.updatePriceAlarm(alarm_id, user.user_id, defined_price); | ||||
| 
 | ||||
|         if (success) { | ||||
|             res.status(201).send(JSON.stringify({success: true})); | ||||
|             return; | ||||
|         } else { | ||||
|             res.status(500).send(JSON.stringify({success: false})); | ||||
|             return; | ||||
|         } | ||||
|     } catch (e) { | ||||
|         console.log('Error handling a request: ' + e.message); | ||||
|         res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); | ||||
|     } | ||||
| }); | ||||
							
								
								
									
										106
									
								
								Backend/src/models/pricealarms/pricealarms.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								Backend/src/models/pricealarms/pricealarms.service.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,106 @@ | |||
| import * as dotenv from 'dotenv'; | ||||
| 
 | ||||
| dotenv.config(); | ||||
| 
 | ||||
| const mariadb = require('mariadb'); | ||||
| const pool = mariadb.createPool({ | ||||
|     host: process.env.DB_HOST, | ||||
|     user: process.env.DB_USER, | ||||
|     password: process.env.DB_PASSWORD, | ||||
|     database: process.env.DB_DATABASE, | ||||
|     connectionLimit: 5 | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Data Model Interfaces | ||||
|  */ | ||||
| 
 | ||||
| import {PriceAlarm} from './pricealarm.interface'; | ||||
| import {PriceAlarms} from './pricealarms.interface'; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * Service Methods | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Creates a price alarm for the given user for the product with the defined price | ||||
|  * @param user_id The id of the user to create the price alarm for | ||||
|  * @param product_id The id of the product to create the price alarm for | ||||
|  * @param defined_price The defined price for the price alarm | ||||
|  */ | ||||
| export const createPriceAlarm = async (user_id: number, product_id: number, defined_price: number): Promise<Boolean> => { | ||||
|     let conn; | ||||
|     try { | ||||
|         conn = await pool.getConnection(); | ||||
|         const res = await conn.query('INSERT INTO price_alarms (user_id, product_id, defined_price) VALUES (?, ?, ?)', [user_id, product_id, defined_price]); | ||||
| 
 | ||||
|         if (res.affectedRows === 1) { | ||||
|             return true; | ||||
|         } else { | ||||
|             return false; | ||||
|         } | ||||
|     } catch (err) { | ||||
|         throw err; | ||||
|     } finally { | ||||
|         if (conn) { | ||||
|             conn.end(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return false; | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Fetches and returns all price alarms for the given user | ||||
|  * @param user_id | ||||
|  */ | ||||
| export const getPriceAlarms = async (user_id: number): Promise<PriceAlarms> => { | ||||
|     let conn; | ||||
|     let priceAlarms = []; | ||||
|     try { | ||||
|         conn = await pool.getConnection(); | ||||
|         const rows = await conn.query('SELECT alarm_id, user_id, product_id, defined_price FROM price_alarms WHERE user_id = ?', user_id); | ||||
|         for (let row in rows) { | ||||
|             if (row !== 'meta') { | ||||
|                 priceAlarms.push(rows[row]); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return priceAlarms; | ||||
|     } catch (err) { | ||||
|         throw err; | ||||
|     } finally { | ||||
|         if (conn) { | ||||
|             conn.end(); | ||||
|         } | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Updates the given price alarm with the given fields | ||||
|  * @param alarm_id The id of the price alarm to update | ||||
|  * @param user_id The id of the user that wants to update the price alarm | ||||
|  * @param defined_price The defined price for the price alarm | ||||
|  */ | ||||
| export const updatePriceAlarm = async (alarm_id: number, user_id: number, defined_price: number): Promise<Boolean> => { | ||||
|     let conn; | ||||
|     try { | ||||
|         conn = await pool.getConnection(); | ||||
|         const res = await conn.query('UPDATE price_alarms SET defined_price = ? WHERE alarm_id = ? AND user_id = ?', [defined_price, alarm_id, user_id]); | ||||
| 
 | ||||
|         if (res.affectedRows === 1) { | ||||
|             return true; | ||||
|         } else { | ||||
|             return false; | ||||
|         } | ||||
|     } catch (err) { | ||||
|         throw err; | ||||
|     } finally { | ||||
|         if (conn) { | ||||
|             conn.end(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return false; | ||||
| }; | ||||
|  | @ -4,7 +4,7 @@ | |||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
| 
 | ||||
|     <groupId>de.taskhub</groupId> | ||||
|     <groupId>xyz.betterzon</groupId> | ||||
|     <artifactId>CucumberTests</artifactId> | ||||
|     <version>1.0-SNAPSHOT</version> | ||||
|     <properties> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user