From 67708b166dfdc7d19da23391a550e59d246e49e4 Mon Sep 17 00:00:00 2001 From: ScrawnyRonnie Date: Sat, 16 Mar 2024 19:10:16 -0400 Subject: [PATCH] leaderboard and weapon stats --- api/db.js | 21 +++ api/user.js | 12 ++ app/App.svelte | 4 + app/components/Nav.svelte | 3 + app/player.js | 5 + app/views/Avatar.svelte | 280 +++++++++++++++++++++++++++++++++++ app/views/Leaderboard.svelte | 203 +++++++++++++++++++++++++ 7 files changed, 528 insertions(+) create mode 100644 app/player.js create mode 100644 app/views/Avatar.svelte create mode 100644 app/views/Leaderboard.svelte diff --git a/api/db.js b/api/db.js index d5ee2cb..3aae2cf 100644 --- a/api/db.js +++ b/api/db.js @@ -70,6 +70,16 @@ export const AVATAR = Object.freeze({ CEP: Symbol("cep"), }); +export const WEAPONSTAT = Object.freeze({ + THIS: Symbol("weapon"), + ID: Symbol("avatar_id"), + WEAPON: Symbol("weapon_id"), + SHOTS_FIRED: Symbol("shots_fired"), + SHOTS_LANDED: Symbol("shots_landed"), + KILLS: Symbol("kills"), + ASSISTS: Symbol("assists") +}); + export const LOGIN = Object.freeze({ THIS: Symbol("login"), ID: Symbol("id"), @@ -322,6 +332,17 @@ export async function get_character_batch_for_stats(batch, sort, order) { } } +export async function get_weaponstats_by_avatar(id) { + try { + const weapons = await pool.query('SELECT * FROM weaponstat WHERE avatar_id=$1 ORDER BY kills DESC', [id]) + return weapons.rows; + } catch (e) { + if (e.code) + e.code = pg_error_inv[e.code] + throw e; + } +} + export async function get_characters_by_account(account_id) { try { const characters = await pool.query('SELECT * FROM avatar WHERE account_id=$1 AND deleted=false', [account_id]) diff --git a/api/user.js b/api/user.js index 6ade53e..d81f4e6 100644 --- a/api/user.js +++ b/api/user.js @@ -62,4 +62,16 @@ api.get('/user/:user/logins', NEED_SESSION, async (req, res, next) => { } }); +api.get('/avatar/:avatar/weaponstats', async (req, res, next) => { + const avatar = req.params.avatar; + + try { + const weapons = await db.get_weaponstats_by_avatar(avatar); + res.status(200).json({ weapons: weapons }); + } catch (e) { + console.log(e); + res.status(500).json({ message: 'error' }); + } +}); + export default api; diff --git a/app/App.svelte b/app/App.svelte index f90afcd..696d445 100644 --- a/app/App.svelte +++ b/app/App.svelte @@ -26,6 +26,8 @@ import BadRoute from './views/BadRoute.svelte'; import UserList from './views/UserList.svelte'; import AdminPanel from './views/AdminPanel.svelte'; import CharacterList from './views/CharacterList.svelte'; +import Leaderboard from './views/Leaderboard.svelte'; +import Avatar from './views/Avatar.svelte' // Defined by webpack let APP_VERSION = __VERSION__; @@ -99,6 +101,8 @@ function setRoute(r, initialState) { page("/", setRoute(Home, true)); page("/login", setRoute(Login, true)); page("/register", setRoute(Register)); +page("/leaderboard", setRoute(Leaderboard)); +page("/avatar/:id", setRoute(Avatar)); page("/admin", setRoute(AdminPanel)); page("/profile", setRoute(Profile, true)); page("/user/:id", setRoute(Profile, true)); diff --git a/app/components/Nav.svelte b/app/components/Nav.svelte index 721bdc5..e08b0ef 100644 --- a/app/components/Nav.svelte +++ b/app/components/Nav.svelte @@ -18,6 +18,9 @@ + {#if $isAdmin}