mirror of
https://github.com/System-End/scraps.git
synced 2026-04-19 22:05:09 +00:00
fix(leaderboard): use refinery_spending_history and match canonical balance calc
- Changed refinery spent query from refinery_orders to refinery_spending_history (refinery_orders rows are deleted on item win, inflating displayed balance) - Removed extra status != 'permanently_rejected' filter from earned subqueries to match getUserScrapsBalance which only checks scraps_paid_at IS NOT NULL - Removed unused shopOrdersTable import
This commit is contained in:
parent
75a4de7a49
commit
176fadea63
1 changed files with 6 additions and 6 deletions
|
|
@ -2,7 +2,7 @@ import { Elysia, t } from 'elysia'
|
|||
import { db } from '../db'
|
||||
import { usersTable } from '../schemas/users'
|
||||
import { projectsTable } from '../schemas/projects'
|
||||
import { shopItemsTable, shopOrdersTable, refineryOrdersTable, shopPenaltiesTable } from '../schemas/shop'
|
||||
import { shopItemsTable, refineryOrdersTable, shopPenaltiesTable } from '../schemas/shop'
|
||||
import { sql, desc, eq, and, or, isNull } from 'drizzle-orm'
|
||||
|
||||
const leaderboard = new Elysia({ prefix: '/leaderboard' })
|
||||
|
|
@ -16,10 +16,10 @@ leaderboard.get('/', async ({ query }) => {
|
|||
id: usersTable.id,
|
||||
username: usersTable.username,
|
||||
avatar: usersTable.avatar,
|
||||
scrapsEarned: sql<number>`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND status != 'permanently_rejected' AND scraps_paid_at IS NOT NULL), 0)`.as('scraps_earned'),
|
||||
scrapsEarned: sql<number>`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND scraps_paid_at IS NOT NULL), 0)`.as('scraps_earned'),
|
||||
scrapsBonus: sql<number>`COALESCE((SELECT SUM(amount) FROM user_bonuses WHERE user_id = ${usersTable.id}), 0)`.as('scraps_bonus'),
|
||||
scrapsShopSpent: sql<number>`COALESCE((SELECT SUM(total_price) FROM shop_orders WHERE user_id = ${usersTable.id}), 0)`.as('scraps_shop_spent'),
|
||||
scrapsRefinerySpent: sql<number>`COALESCE((SELECT SUM(cost) FROM refinery_orders WHERE user_id = ${usersTable.id}), 0)`.as('scraps_refinery_spent'),
|
||||
scrapsRefinerySpent: sql<number>`COALESCE((SELECT SUM(cost) FROM refinery_spending_history WHERE user_id = ${usersTable.id}), 0)`.as('scraps_refinery_spent'),
|
||||
hours: sql<number>`COALESCE(SUM(${projectsTable.hours}), 0)`.as('total_hours'),
|
||||
projectCount: sql<number>`COUNT(${projectsTable.id})`.as('project_count')
|
||||
})
|
||||
|
|
@ -50,10 +50,10 @@ leaderboard.get('/', async ({ query }) => {
|
|||
id: usersTable.id,
|
||||
username: usersTable.username,
|
||||
avatar: usersTable.avatar,
|
||||
scrapsEarned: sql<number>`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND status != 'permanently_rejected' AND scraps_paid_at IS NOT NULL), 0)`.as('scraps_earned'),
|
||||
scrapsEarned: sql<number>`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND scraps_paid_at IS NOT NULL), 0)`.as('scraps_earned'),
|
||||
scrapsBonus: sql<number>`COALESCE((SELECT SUM(amount) FROM user_bonuses WHERE user_id = ${usersTable.id}), 0)`.as('scraps_bonus'),
|
||||
scrapsShopSpent: sql<number>`COALESCE((SELECT SUM(total_price) FROM shop_orders WHERE user_id = ${usersTable.id}), 0)`.as('scraps_shop_spent'),
|
||||
scrapsRefinerySpent: sql<number>`COALESCE((SELECT SUM(cost) FROM refinery_orders WHERE user_id = ${usersTable.id}), 0)`.as('scraps_refinery_spent'),
|
||||
scrapsRefinerySpent: sql<number>`COALESCE((SELECT SUM(cost) FROM refinery_spending_history WHERE user_id = ${usersTable.id}), 0)`.as('scraps_refinery_spent'),
|
||||
hours: sql<number>`COALESCE(SUM(${projectsTable.hours}), 0)`.as('total_hours'),
|
||||
projectCount: sql<number>`COUNT(${projectsTable.id})`.as('project_count')
|
||||
})
|
||||
|
|
@ -64,7 +64,7 @@ leaderboard.get('/', async ({ query }) => {
|
|||
sql`${projectsTable.status} != 'permanently_rejected'`
|
||||
))
|
||||
.groupBy(usersTable.id)
|
||||
.orderBy(desc(sql`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND status != 'permanently_rejected' AND scraps_paid_at IS NOT NULL), 0) + COALESCE((SELECT SUM(amount) FROM user_bonuses WHERE user_id = ${usersTable.id}), 0) - COALESCE((SELECT SUM(total_price) FROM shop_orders WHERE user_id = ${usersTable.id}), 0) - COALESCE((SELECT SUM(cost) FROM refinery_orders WHERE user_id = ${usersTable.id}), 0)`))
|
||||
.orderBy(desc(sql`COALESCE((SELECT SUM(scraps_awarded) FROM projects WHERE user_id = ${usersTable.id} AND scraps_paid_at IS NOT NULL), 0) + COALESCE((SELECT SUM(amount) FROM user_bonuses WHERE user_id = ${usersTable.id}), 0) - COALESCE((SELECT SUM(total_price) FROM shop_orders WHERE user_id = ${usersTable.id}), 0) - COALESCE((SELECT SUM(cost) FROM refinery_spending_history WHERE user_id = ${usersTable.id}), 0)`))
|
||||
.limit(10)
|
||||
|
||||
return results.map((user, index) => ({
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue