Skip to content

Commit 8d47e2e

Browse files
committed
fix(models): allow nullable language on LeaderboardModel
Change the language relation on LeaderboardModel to be nullable to handle cases where a leaderboard may not have an associated language. Update the preferred-language-leaderboard service to filter out leaderboards with null languageId and safely access the language slug. This prevents runtime errors and ensures that only valid leaderboards are considered for the preferred language leaderboard calculation.
1 parent 5d525d4 commit 8d47e2e

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

app/models/leaderboard.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type LanguageModel from './language';
55

66
export default class LeaderboardModel extends Model {
77
@belongsTo('contest', { async: false, inverse: 'leaderboard' }) declare contest: ContestModel;
8-
@belongsTo('language', { async: false, inverse: 'leaderboard' }) declare language: LanguageModel;
8+
@belongsTo('language', { async: false, inverse: 'leaderboard' }) declare language: LanguageModel | null;
99

1010
@hasMany('leaderboard-entry', { async: false, inverse: 'leaderboard' }) declare entries: LeaderboardEntryModel[];
1111

app/services/preferred-language-leaderboard.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,11 @@ export default class PreferredLanguageLeaderboardService extends Service {
7777

7878
this.preferredLanguageSlugs = userLeaderboardEntries
7979
.filter((entry) => entry.score > 0)
80+
// @ts-expect-error: languageId not defined on LeaderboardModel
81+
.filter((entry) => entry.leaderboard.languageId !== null)
8082
.sort((a, b) => b.score - a.score)
81-
.map((entry) => entry.leaderboard.language.slug)
82-
.slice(0, 3);
83+
.slice(0, 3)
84+
.map((entry) => entry.leaderboard.language!.slug);
8385

8486
this.localStorage.setItem(PreferredLanguageLeaderboardService.STORAGE_KEY, new StoredData(this.preferredLanguageSlugs, new Date()).toJSON());
8587
}

0 commit comments

Comments
 (0)