API-23: Refactoring for better architecture (#12)
Jenkins Production Deployment

Endpoints are separated into distinct packages and interfaces are extracted into files

Co-authored-by: Patrick Müller <patrick@mueller-patrick.tech>
Reviewed-on: #12
Co-authored-by: Patrick Müller <patrick@plutodev.de>
Co-committed-by: Patrick Müller <patrick@plutodev.de>
This commit was merged in pull request #12.
This commit is contained in:
2021-08-28 17:22:07 +00:00
parent a3d137f1c6
commit 7ee812bbb3
24 changed files with 653 additions and 540 deletions
@@ -0,0 +1,58 @@
import * as dotenv from 'dotenv';
import {SessionData} from './SessionData.interface';
dotenv.config();
const mariadb = require('mariadb');
const prod_pool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.PARTYPLANER_PROD_DATABASE,
connectionLimit: 5
});
const dev_pool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.PARTYPLANER_DEV_DATABASE,
connectionLimit: 5
});
/**
* Returns all active sessions of the given user
* @param useDev If the dev or prod database should be used
* @param userId The userId of the user to return the sessions for
* @return SessionData[] A list containing objects with the session data
*/
export const getSessionData = async (useDev: boolean, userId: string): Promise<SessionData[]> => {
let conn;
try {
if (useDev) {
conn = await dev_pool.getConnection();
} else {
conn = await prod_pool.getConnection();
}
let rows = await conn.query('SELECT session_id, type, last_login, last_ip FROM sessions WHERE user_id = ? AND valid_until > NOW()', userId);
let sessions: SessionData[] = [];
for (let row of rows) {
sessions.push({
sessionId: row.session_id,
type: row.type,
lastLogin: row.last_login,
lastIp: row.last_ip
});
}
return sessions;
} catch (err) {
throw err;
} finally {
if (conn) {
conn.end();
}
}
};