Skip to content

Commit 6e244ca

Browse files
authored
Merge pull request #298 from WatWowMap/db-connection-options
Db Config Fix (Part 3!)
2 parents a1533e3 + d429372 commit 6e244ca

File tree

3 files changed

+47
-35
lines changed

3 files changed

+47
-35
lines changed

src/configs/default.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
"database": "rdmdb",
9898
"charset": "utf8mb4",
9999
"sessionTable": "sessions",
100-
"useFor": ["pokemon", "pokestop", "gym", "spawnpoint", "device", "weather", "s2cell"]
100+
"useFor": []
101101
},
102102
"manualdb": {
103103
"host": "127.0.0.1",
@@ -106,7 +106,8 @@
106106
"password": "pass123!",
107107
"database": "manualdb",
108108
"charset": "utf8mb4",
109-
"useFor": ["portal", "nest"]
109+
"sessionTable": "sessions",
110+
"useFor": []
110111
}
111112
},
112113
"discord": {

src/data/map.js

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,20 @@ const MySQLConnector = require('../services/mysql.js');
1111

1212
const db = new MySQLConnector(config.db.scanner);
1313
const dbManual = new MySQLConnector(config.db.manualdb);
14-
const dbOptions = config.db.scanner.useFor;
1514

1615
const masterfile = require('../../static/data/masterfile.json');
1716

17+
const dbSelection = (category) => {
18+
let dbSelection;
19+
if (config.db.scanner.useFor.length === 0 && config.db.manualdb.useFor.length === 0) {
20+
dbSelection = category === 'nest' || category === 'portal'
21+
? dbManual : db;
22+
} else {
23+
dbSelection = config.db.scanner.useFor.includes(category)
24+
? db : dbManual;
25+
}
26+
return dbSelection;
27+
};
1828

1929
const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updated, pokemonFilterExclude = null, pokemonFilterIV = null) => {
2030
const pokemonLookup = {};
@@ -113,7 +123,7 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
113123
FROM pokemon
114124
WHERE expire_timestamp >= UNIX_TIMESTAMP() AND lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? AND updated > ? ${onlyVerifiedTimersSQL}`;
115125
const args = [minLat, maxLat, minLon, maxLon, updated];
116-
const results = await (dbOptions.includes('pokemon') ? db : dbManual).query(sql, args).catch(err => {
126+
const results = await dbSelection('pokemon').query(sql, args).catch(err => {
117127
console.error('Failed to execute query:', sql, 'with arguments:', args, '\r\nError:', err);
118128
});
119129
let pokemon = [];
@@ -386,7 +396,7 @@ const getGyms = async (minLat, maxLat, minLon, maxLon, updated = 0, showRaids =
386396
sql += ' AND raid_end_timestamp IS NOT NULL AND raid_end_timestamp >= UNIX_TIMESTAMP()';
387397
}
388398

389-
const results = await (dbOptions.includes('gym') ? db : dbManual).query(sql, args)
399+
const results = await dbSelection('gym').query(sql, args)
390400
.catch(err => {
391401
if (err) {
392402
console.error('Failed to get gyms:', err);
@@ -661,7 +671,7 @@ const getPokestops = async (minLat, maxLat, minLon, maxLon, updated = 0, showPok
661671
WHERE lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? AND updated > ? AND deleted = false AND
662672
(false ${excludeTypeSQL} ${excludePokemonSQL} ${excludeEvolutionSQL} ${excludeItemSQL} ${excludePokestopSQL} ${excludeInvasionSQL})
663673
`;
664-
const results = await (dbOptions.includes('pokestop') ? db : dbManual).query(sql, args);
674+
const results = await dbSelection('pokestop').query(sql, args);
665675
let pokestops = [];
666676
if (results && results.length > 0) {
667677
for (let i = 0; i < results.length; i++) {
@@ -774,7 +784,7 @@ const getSpawnpoints = async (minLat, maxLat, minLon, maxLon, updated, spawnpoin
774784
`;
775785

776786
let args = [minLat, maxLat, minLon, maxLon, updated];
777-
const results = await (dbOptions.includes('spawnpoint') ? db : dbManual).query(sql, args);
787+
const results = await dbSelection('spawnpoint').query(sql, args);
778788
let spawnpoints = [];
779789
if (results && results.length > 0) {
780790
for (let i = 0; i < results.length; i++) {
@@ -824,7 +834,7 @@ const getDevices = async (deviceFilterExclude = null) => {
824834
INNER JOIN instance
825835
ON device.instance_name = instance.name ${excludeDeviceSQL}
826836
`;
827-
const results = await (dbOptions.includes('device') ? db : dbManual).query(sql);
837+
const results = await dbSelection('device').query(sql);
828838
let devices = [];
829839
if (results && results.length > 0) {
830840
for (let i = 0; i < results.length; i++) {
@@ -856,7 +866,7 @@ const getS2Cells = async (minLat, maxLat, minLon, maxLon, updated) => {
856866
WHERE center_lat >= ? AND center_lat <= ? AND center_lon >= ? AND center_lon <= ? AND updated > ?
857867
`;
858868
let args = [minLatReal, maxLatReal, minLonReal, maxLonReal, updated];
859-
const results = await (dbOptions.includes('s2cell') ? db : dbManual).query(sql, args);
869+
const results = await dbSelection('s2cell').query(sql, args);
860870
let cells = [];
861871
if (results && results.length > 0) {
862872
for (let i = 0; i < results.length; i++) {
@@ -1024,7 +1034,7 @@ const getWeather = async (minLat, maxLat, minLon, maxLon, updated, weatherFilter
10241034
args.push(id);
10251035
}
10261036

1027-
const results = await (dbOptions.includes('weather') ? db : dbManual).query(sql, args);
1037+
const results = await dbSelection('weather').query(sql, args);
10281038
let weather = [];
10291039
if (results && results.length > 0) {
10301040
for (let i = 0; i < results.length; i++) {
@@ -1106,7 +1116,7 @@ const getNests = async (minLat, maxLat, minLon, maxLon, nestFilterExclude = null
11061116
args.push(excludedPokemon[i]);
11071117
}
11081118

1109-
const results = await (dbOptions.includes('nest') ? db : dbManual).query(sql, args);
1119+
const results = await dbSelection('nest').query(sql, args);
11101120
if (results && results.length > 0) {
11111121
return results;
11121122
}
@@ -1141,7 +1151,7 @@ const getPortals = async (minLat, maxLat, minLon, maxLon, portalFilterExclude =
11411151
WHERE lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? ${sqlExcludeCreate}
11421152
`;
11431153
const args = [minLatReal, maxLatReal, minLonReal, maxLonReal];
1144-
const results = await (dbOptions.includes('portal') ? db : dbManual).query(sql, args);
1154+
const results = await dbSelection('portal').query(sql, args);
11451155
if (results && results.length > 0) {
11461156
return results;
11471157
}
@@ -1152,7 +1162,7 @@ const getPortals = async (minLat, maxLat, minLon, maxLon, portalFilterExclude =
11521162
const getSearchData = async (lat, lon, id, value, iconStyle) => {
11531163
let sql = '';
11541164
let args = [lat, lon, lat];
1155-
let useDb = true;
1165+
let useDb;
11561166
let conditions = [];
11571167
let sanitizedValue = sanitizer.sanitize(value);
11581168
sanitizedValue = sanitizedValue.toLowerCase();
@@ -1226,7 +1236,7 @@ const getSearchData = async (lat, lon, id, value, iconStyle) => {
12261236
FROM pokestop
12271237
WHERE ${conditions.join(' OR ') || 'FALSE'}
12281238
`;
1229-
useDb = dbOptions.includes('pokestop');
1239+
useDb = 'pokestop';
12301240
break;
12311241
case 'search-nest':
12321242
let ids = getPokemonIdsByName(sanitizedValue);
@@ -1249,7 +1259,7 @@ const getSearchData = async (lat, lon, id, value, iconStyle) => {
12491259
FROM nests
12501260
WHERE LOWER(name) LIKE '%${sanitizedValue}%' ${pokemonSQL}
12511261
`;
1252-
useDb = dbOptions.includes('nest');
1262+
useDb = 'nest';
12531263
break;
12541264
case 'search-portal':
12551265
sql = `
@@ -1258,7 +1268,7 @@ const getSearchData = async (lat, lon, id, value, iconStyle) => {
12581268
FROM ingress_portals
12591269
WHERE LOWER(name) LIKE '%${sanitizedValue}%'
12601270
`;
1261-
useDb = dbOptions.includes('portal');
1271+
useDb = 'portal';
12621272
break;
12631273
case 'search-gym':
12641274
sql = `
@@ -1267,7 +1277,7 @@ const getSearchData = async (lat, lon, id, value, iconStyle) => {
12671277
FROM gym
12681278
WHERE LOWER(name) LIKE '%${sanitizedValue}%'
12691279
`;
1270-
useDb = dbOptions.includes('gym');
1280+
useDb = 'gym';
12711281
break;
12721282
case 'search-pokestop':
12731283
sql = `
@@ -1276,13 +1286,11 @@ const getSearchData = async (lat, lon, id, value, iconStyle) => {
12761286
FROM pokestop
12771287
WHERE LOWER(name) LIKE '%${sanitizedValue}%'
12781288
`;
1279-
useDb = dbOptions.includes('pokestop');
1289+
useDb = 'pokestop';
12801290
break;
12811291
}
12821292
sql += ` ORDER BY distance LIMIT ${config.searchMaxResults || 20}`;
1283-
let results = useDb
1284-
? await db.query(sql, args)
1285-
: await dbManual.query(sql, args);
1293+
let results = await dbSelection(useDb).query(sql, args);
12861294
if (results && results.length > 0) {
12871295
switch (id) {
12881296
case 'search-reward':
@@ -1416,7 +1424,7 @@ const getAvailableRaidBosses = async () => {
14161424
AND raid_pokemon_id > 0
14171425
GROUP BY raid_pokemon_id, raid_pokemon_form
14181426
`;
1419-
let result = await (dbOptions.includes('gym') ? db : dbManual).query(sql);
1427+
let result = await dbSelection('gym').query(sql);
14201428
if (result) {
14211429
return result.map(x => {
14221430
return { id: x.raid_pokemon_id, form_id: x.raid_pokemon_form };
@@ -1427,19 +1435,19 @@ const getAvailableRaidBosses = async () => {
14271435

14281436
const getAvailableQuests = async () => {
14291437
let sql = 'SELECT quest_item_id AS id FROM pokestop WHERE quest_reward_type=2 GROUP BY quest_item_id';
1430-
const itemResults = await (dbOptions.includes('pokestop') ? db : dbManual).query(sql);
1438+
const itemResults = await dbSelection('pokestop').query(sql);
14311439
sql = `SELECT DISTINCT
14321440
quest_pokemon_id AS id,
14331441
json_extract(json_extract(quest_rewards, '$[*].info.form_id'), '$[0]') AS form
14341442
FROM pokestop WHERE quest_reward_type=7`;
1435-
const pokemonResults = await (dbOptions.includes('pokestop') ? db : dbManual).query(sql);
1443+
const pokemonResults = await dbSelection('pokestop').query(sql);
14361444
sql = `
14371445
SELECT
14381446
DISTINCT json_extract(json_extract(quest_rewards, "$[*].info.pokemon_id"), "$[0]") AS id
14391447
FROM pokestop
14401448
WHERE quest_reward_type = 12
14411449
`;
1442-
const evoResults = await (dbOptions.includes('pokestop') ? db : dbManual).query(sql);
1450+
const evoResults = await dbSelection('pokestop').query(sql);
14431451
return {
14441452
pokemon: pokemonResults,
14451453
items: itemResults.map(x => x.id),
@@ -1453,7 +1461,7 @@ const getAvailableNestPokemon = async () => {
14531461
FROM nests
14541462
GROUP BY pokemon_id
14551463
`;
1456-
let result = await (dbOptions.includes('nest') ? db : dbManual).query(sql);
1464+
let result = await dbSelection('nest').query(sql);
14571465
if (result) {
14581466
return result.map(x => x.pokemon_id);
14591467
}

src/services/session-store.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@ const MySQLStore = require('express-mysql-session')(session);
55

66
const config = require('../services/config.js');
77
const MySQLConnector = require('../services/mysql.js');
8-
const db = new MySQLConnector(config.db.scanner);
8+
9+
const { scanner, manualdb } = config.db;
10+
const dbSelection = manualdb.useFor.includes('session') ? manualdb : scanner;
11+
const db = new MySQLConnector(dbSelection);
912

1013
// MySQL session store
1114
const sessionStore = new MySQLStore({
1215
// Database server IP address/hostname
13-
host: config.db.scanner.host,
16+
host: dbSelection.host,
1417
// Database server listening port
15-
port: config.db.scanner.port,
18+
port: dbSelection.port,
1619
// Database username
17-
user: config.db.scanner.username,
20+
user: dbSelection.username,
1821
// Password for the above database user
19-
password: config.db.scanner.password,
22+
password: dbSelection.password,
2023
// Database name to save sessions table to
21-
database: config.db.scanner.database,
24+
database: dbSelection.database,
2225
// Whether or not to automatically check for and clear expired sessions:
2326
clearExpired: true,
2427
// How frequently expired sessions will be cleared; milliseconds:
@@ -27,14 +30,14 @@ const sessionStore = new MySQLStore({
2730
createDatabaseTable: true,
2831
// Set Sessions table name
2932
schema: {
30-
tableName: config.db.scanner.sessionTable
33+
tableName: dbSelection.sessionTable
3134
}
3235
});
3336

3437
const isValidSession = async (userId) => {
3538
let sql = `
3639
SELECT session_id
37-
FROM ${config.db.scanner.sessionTable}
40+
FROM ${dbSelection.sessionTable}
3841
WHERE
3942
json_extract(data, '$.user_id') = ?
4043
AND expires >= UNIX_TIMESTAMP()
@@ -46,7 +49,7 @@ const isValidSession = async (userId) => {
4649

4750
const clearOtherSessions = async (userId, currentSessionId) => {
4851
let sql = `
49-
DELETE FROM ${config.db.scanner.sessionTable}
52+
DELETE FROM ${dbSelection.sessionTable}
5053
WHERE
5154
json_extract(data, '$.user_id') = ?
5255
AND session_id != ?

0 commit comments

Comments
 (0)