@@ -2235,6 +2235,57 @@ pub async fn handle_ws(
22352235 }
22362236 }
22372237 }
2238+ AuthMessage :: leaderboard { flags, category } => {
2239+ let leagueid = leagueid ( & flags) ;
2240+ let ownscore = logerr ( client
2241+ . query ( concat ! (
2242+ "select val " ,
2243+ "from leaderboard l " ,
2244+ "join user_data ud on l.data_id = ud.id and ud.user_id = $3 " ,
2245+ "where league_id = $1 and category = $2" ) , & [ & leagueid, & category, & userid] )
2246+ . await ) . ok ( ) . and_then ( |rows| rows. first ( ) . map ( |row| row. get :: < usize , i32 > ( 0 ) ) ) . unwrap_or_default ( ) ;
2247+ if let Ok ( rows) = logerr ( client
2248+ . query ( concat ! (
2249+ "select u.name, ud.name, val " ,
2250+ "from leaderboard l " ,
2251+ "join user_data ud on l.data_id = ud.id " ,
2252+ "join users u on ud.user_id = u.id " ,
2253+ "where league_id = $1 and category = $2 " ,
2254+ "order by val desc limit 99" ) , & [ & leagueid, & category] )
2255+ . await )
2256+ {
2257+ let mut top = Vec :: with_capacity ( rows. len ( ) ) ;
2258+ for row in rows. iter ( ) {
2259+ top. push ( ( row. get :: < usize , & str > ( 0 ) , row. get :: < usize , & str > ( 1 ) , row. get :: < usize , i32 > ( 2 ) ) ) ;
2260+ }
2261+ sendmsg ( & tx, & WsResponse :: leaderboard { flags, category, ownscore, top : & top } ) ;
2262+ }
2263+ }
2264+ AuthMessage :: legacyboard => {
2265+ let ownscore = logerr ( client
2266+ . query ( concat ! (
2267+ "select val " ,
2268+ "from leaderboard l " ,
2269+ "join user_data ud on l.data_id = ud.id and ud.user_id = $3 " ,
2270+ "where league_id = 1 and category = 'Wealth'" ) , & [ & userid] )
2271+ . await ) . ok ( ) . and_then ( |rows| rows. first ( ) . map ( |row| row. get :: < usize , i32 > ( 0 ) ) ) . unwrap_or_default ( ) ;
2272+ if let Ok ( rows) = logerr ( client
2273+ . query ( concat ! (
2274+ "select u.name, ud.name, val " ,
2275+ "from leaderboard l " ,
2276+ "join user_data ud on l.data_id = ud.id " ,
2277+ "join users u on ud.user_id = u.id " ,
2278+ "where league_id = 1 and category = 'Wealth' " ,
2279+ "order by val desc limit 99" ) , & [ ] )
2280+ . await )
2281+ {
2282+ let mut top = Vec :: with_capacity ( rows. len ( ) ) ;
2283+ for row in rows. iter ( ) {
2284+ top. push ( ( row. get :: < usize , & str > ( 0 ) , row. get :: < usize , & str > ( 1 ) , row. get :: < usize , i32 > ( 2 ) ) ) ;
2285+ }
2286+ sendmsg ( & tx, & WsResponse :: legacyboard { ownscore, top : & top } ) ;
2287+ }
2288+ }
22382289 }
22392290 }
22402291 UserMessage :: guestchat { u, msg } => {
@@ -2529,43 +2580,6 @@ pub async fn handle_ws(
25292580 sendmsg ( & tx, & WsResponse :: arenatop { lv, top : & top } ) ;
25302581 }
25312582 }
2532- UserMessage :: leaderboard { flags, category } => {
2533- let leagueid = leagueid ( & flags) ;
2534- if let Ok ( rows) = client
2535- . query ( concat ! (
2536- "select u.name, ud.name, val " ,
2537- "from leaderboard l " ,
2538- "join user_data ud on l.data_id = ud.id " ,
2539- "join users u on ud.user_id = u.id " ,
2540- "where league_id = $1 and category = $2 " ,
2541- "order by val desc limit 99" ) , & [ & leagueid, & category] )
2542- . await
2543- {
2544- let mut top = Vec :: with_capacity ( rows. len ( ) ) ;
2545- for row in rows. iter ( ) {
2546- top. push ( ( row. get :: < usize , & str > ( 0 ) , row. get :: < usize , & str > ( 1 ) , row. get :: < usize , i32 > ( 2 ) ) ) ;
2547- }
2548- sendmsg ( & tx, & WsResponse :: leaderboard { flags, category, top : & top } ) ;
2549- }
2550- }
2551- UserMessage :: legacyboard => {
2552- if let Ok ( rows) = logerr ( client
2553- . query ( concat ! (
2554- "select u.name, ud.name, val " ,
2555- "from leaderboard l " ,
2556- "join user_data ud on l.data_id = ud.id " ,
2557- "join users u on ud.user_id = u.id " ,
2558- "where league_id = 1 and category = 'Wealth' " ,
2559- "order by val desc limit 99" ) , & [ ] )
2560- . await )
2561- {
2562- let mut top = Vec :: with_capacity ( rows. len ( ) ) ;
2563- for row in rows. iter ( ) {
2564- top. push ( ( row. get :: < usize , & str > ( 0 ) , row. get :: < usize , & str > ( 1 ) , row. get :: < usize , i32 > ( 2 ) ) ) ;
2565- }
2566- sendmsg ( & tx, & WsResponse :: legacyboard { top : & top } ) ;
2567- }
2568- }
25692583 UserMessage :: bzread => {
25702584 let mut bz: FxHashMap < i16 , Vec < _ > > = Default :: default ( ) ;
25712585 if let Ok ( bids) = client. query ( "select u.name, b.code, b.q, b.p from bazaar b join users u on b.user_id = u.id" , & [ ] ) . await {
0 commit comments