Skip to content

Commit

Permalink
Hidden players only see their own results
Browse files Browse the repository at this point in the history
  • Loading branch information
grumd committed Dec 30, 2023
1 parent 4945c06 commit b4398fc
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 12 deletions.
32 changes: 22 additions & 10 deletions packages/api/src/services/charts/chartsSearch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,15 +108,15 @@ export const searchCharts = async (params: ChartsSearchParams) => {

const songNameParts = songName?.split(' ').filter((part) => part.length > 0);

const preferences = currentPlayerId
? (
await db
.selectFrom('players')
.select('preferences')
.where('id', '=', currentPlayerId)
.executeTakeFirstOrThrow()
).preferences
const currentPlayer = currentPlayerId
? await db
.selectFrom('players')
.select(['preferences', 'hidden'])
.where('id', '=', currentPlayerId)
.executeTakeFirstOrThrow()
: null;
const preferences = currentPlayer?.preferences;
const isCurrentPlayerHidden = currentPlayer?.hidden === 1;

const hiddenRegions =
preferences?.hiddenRegions &&
Expand Down Expand Up @@ -167,13 +167,19 @@ export const searchCharts = async (params: ChartsSearchParams) => {
: fn.max('ci.interpolated_difficulty').as('difficulty'),
fn.max('r.pp').as('best_pp'),
])
.where('players.hidden', '=', 0)
.where(scoreField, 'is not', null);

/**
* Below are filters that filter CHARTS, not results
*/

if (!isCurrentPlayerHidden) {
subQuery = subQuery.where('players.hidden', '=', 0);
}
if (isCurrentPlayerHidden && currentPlayerId) {
subQuery = subQuery.where('r.player_id', '=', currentPlayerId);
}

if (sharedChartId) {
subQuery = subQuery.where('r.shared_chart', '=', sharedChartId);
}
Expand Down Expand Up @@ -342,14 +348,20 @@ export const searchCharts = async (params: ChartsSearchParams) => {
scoreField
)} desc)`.as('score_rank'),
])
.where('players.hidden', '=', 0)
.where(scoreField, 'is not', null)
.where('r.mix', 'in', mixes);

/**
* Below are filters that filter RESULTS after the list of charts is already decided
*/

if (!isCurrentPlayerHidden) {
subQuery = subQuery.where('players.hidden', '=', 0);
}
if (isCurrentPlayerHidden && currentPlayerId) {
subQuery = subQuery.where('r.player_id', '=', currentPlayerId);
}

if (hiddenPlayerIds && hiddenPlayerIds.length > 0) {
subQuery = subQuery.where('r.player_id', 'not in', hiddenPlayerIds);
}
Expand Down
3 changes: 1 addition & 2 deletions packages/api/src/trpc/context.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { inferAsyncReturnType } from '@trpc/server';
import { CreateExpressContextOptions } from '@trpc/server/adapters/express';

import { db } from 'db';

import createDebug from 'debug';

const debug = createDebug('trpc:context');

export async function createContext({ req }: CreateExpressContextOptions) {
Expand Down

0 comments on commit b4398fc

Please sign in to comment.