Merge pull request #51 from Legonzaur/main

Fix empty names
This commit is contained in:
Legonzaur
2023-06-22 16:30:09 +02:00
committed by GitHub
3 changed files with 101 additions and 2 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ router.get('/players',
const result = db.selectFrom('kill_view') const result = db.selectFrom('kill_view')
let data let data
const resultFiltered = processQueryArgs(result, req.query as unknown as string | string[]) const resultFiltered = processQueryArgs(result, req.query as unknown as string | string[])
console.log(result !== resultFiltered) // Cache stuff when no route is present so request doesn't takes 4secs to complete
if (result !== resultFiltered) { if (result !== resultFiltered) {
const selection = resultFiltered.select([sum<number>('kills').as('kills'), sum<number>('deaths').as('deaths'), sum<number>('deaths_with_weapon').as('deaths_while_equipped'), 'attacker_id', sql<string>`last(attacker_name)`.as('username'), sum<number>('total_distance').as('total_distance'), max('max_distance').as('max_distance')]).groupBy('attacker_id') const selection = resultFiltered.select([sum<number>('kills').as('kills'), sum<number>('deaths').as('deaths'), sum<number>('deaths_with_weapon').as('deaths_while_equipped'), 'attacker_id', sql<string>`last(attacker_name)`.as('username'), sum<number>('total_distance').as('total_distance'), max('max_distance').as('max_distance')]).groupBy('attacker_id')
data = (await selection.execute()).reduce<Record<string, KillRecord>>((acc, curr) => { data = (await selection.execute()).reduce<Record<string, KillRecord>>((acc, curr) => {
@@ -0,0 +1,100 @@
import { type Kysely } from 'kysely'
import { Client } from 'pg'
const pgClient = new Client({
host: process.env.POSTGRES_HOST,
database: process.env.POSTGRES_DATABASE,
user: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD
})
export async function up (db: Kysely<any>): Promise<void> {
await pgClient.connect()
await pgClient.query(`CREATE OR REPLACE FUNCTION update_kill_view_fnct()
RETURNS TRIGGER
AS $$
BEGIN
IF EXISTS(
SELECT * FROM kill_view
WHERE
new.attacker_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.cause_of_death = cause_of_death AND
new.servername = servername AND
new.host = host
) THEN
UPDATE kill_view SET kills = kills + 1,
max_distance = (SELECT Max(v) FROM (VALUES (new.distance), (max_distance)) AS value(v)),
total_distance = total_distance + new.distance,
attacker_name = new.attacker_name
WHERE
new.attacker_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.cause_of_death = cause_of_death AND
new.servername = servername AND
new.host = host;
ELSE
INSERT INTO kill_view(kills,deaths, deaths_with_weapon, attacker_id, map, game_mode, cause_of_death, servername, host, max_distance, total_distance, attacker_name)
VALUES(1,0,0, new.attacker_id, new.map, new.game_mode, new.cause_of_death, new.servername, new.host,new.distance, new.distance, new.attacker_name);
END IF;
IF EXISTS(
SELECT * FROM kill_view
WHERE
new.victim_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.cause_of_death = cause_of_death AND
new.servername = servername AND
new.host = host
) THEN
UPDATE kill_view SET deaths = deaths + 1
WHERE
new.victim_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.cause_of_death = cause_of_death AND
new.servername = servername AND
new.host = host;
ELSE
INSERT INTO kill_view(deaths, kills, deaths_with_weapon, attacker_id, map, game_mode, cause_of_death, servername, host, max_distance, total_distance, attacker_name)
VALUES(1,0,0, new.victim_id, new.map, new.game_mode, new.cause_of_death, new.servername, new.host,0,0, new.victim_name);
END IF;
IF EXISTS(
SELECT * FROM kill_view
WHERE
new.victim_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.attacker_current_weapon = cause_of_death AND
new.servername = servername AND
new.host = host
) THEN
UPDATE kill_view SET deaths_with_weapon = deaths_with_weapon + 1
WHERE
new.victim_id = attacker_id AND
new.map = map AND
new.game_mode = game_mode AND
new.attacker_current_weapon = cause_of_death AND
new.servername = servername AND
new.host = host;
ELSE
INSERT INTO kill_view(deaths, kills, deaths_with_weapon, attacker_id, map, game_mode, cause_of_death, servername, host, max_distance, total_distance, attacker_name)
VALUES(0,0,1, new.victim_id, new.map, new.game_mode, new.attacker_current_weapon, new.servername, new.host,0,0, new.victim_name);
END IF;
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;`)
await pgClient.end()
}
export async function down (db: Kysely<any>): Promise<void> {
}
-1
View File
@@ -15,7 +15,6 @@ export default async function listenKills () {
pgClient.on('notification', (data) => { pgClient.on('notification', (data) => {
if (!data.payload) return if (!data.payload) return
const payload = JSON.parse(data.payload) const payload = JSON.parse(data.payload)
console.log(`recieved kill for ${payload.attacker_name as string}`)
let killEntry = allData[payload.attacker_id] let killEntry = allData[payload.attacker_id]
let deathEntry = allData[payload.victim_id] let deathEntry = allData[payload.victim_id]