src/modules/ranking/index.ts (1)
126-131: achievementsの重複排除ロジックについて
お主よ、findIndexによる重複排除は機能するが、計算量はO(n²)となる。ランキングデータが大きくなった場合、MapやObjectを使用した方が効率的じゃ。
ただし、現在のデータ量であれば問題はなかろう。
- await upsertAchievements(supabase, ranking.map<Achievement>(record => ({
- title: record.achievement.title,
- markup: record.achievement.markup ?? null,
- icon_first: record.achievement.icon.first ?? null,
- icon_last: record.achievement.icon.last ?? null,
- })).filter((element, index, self) => self.findIndex(e => e.title === element.title) === index))
+ const achievementMap = new Map<string, Achievement>();
+ ranking.forEach(record => {
+ if (!achievementMap.has(record.achievement.title)) {
+ achievementMap.set(record.achievement.title, {
+ title: record.achievement.title,
+ markup: record.achievement.markup ?? null,
+ icon_first: record.achievement.icon.first ?? null,
+ icon_last: record.achievement.icon.last ?? null,
+ });
+ }
+ });
+ await upsertAchievements(supabase, Array.from(achievementMap.values()));