Skip to content

Commit

Permalink
63
Browse files Browse the repository at this point in the history
  • Loading branch information
0xjaqbek committed Jul 18, 2024
1 parent 93aeb6a commit c061647
Showing 1 changed file with 24 additions and 14 deletions.
38 changes: 24 additions & 14 deletions src/gistService.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import axios, { AxiosError } from 'axios';
import { initializeApp } from 'firebase/app';
import { getDatabase, ref, get, set } from 'firebase/database';
import { getDatabase, ref, get, set, runTransaction } from 'firebase/database';

// Replace with your Firebase config
const firebaseConfig = {
Expand Down Expand Up @@ -50,7 +50,7 @@ export const updateLeaderboard = async (leaderboard: LeaderboardEntry[]): Promis
await set(leaderboardRef, updates);
};

// Function to create or update leaderboard entry
// Function to create or update leaderboard entry with transaction
export const createOrUpdateLeaderboardEntry = async (
address: string,
time: number,
Expand All @@ -66,18 +66,28 @@ export const createOrUpdateLeaderboardEntry = async (
userName: effectiveUserName
};

const currentLeaderboard = await getLeaderboard();
const existingEntryIndex = currentLeaderboard.findIndex(entry => entry.playerId === playerId || entry.address === address);
await runTransaction(leaderboardRef, (currentData) => {
if (currentData) {
const currentLeaderboard: LeaderboardEntry[] = Object.values(currentData);

if (existingEntryIndex >= 0) {
// Update existing entry if new time is better
if (time < currentLeaderboard[existingEntryIndex].time) {
currentLeaderboard[existingEntryIndex] = newEntry;
}
} else {
// Add new entry if not found
currentLeaderboard.push(newEntry);
}
const existingEntryIndex = currentLeaderboard.findIndex(entry => entry.playerId === playerId || entry.address === address);

if (existingEntryIndex >= 0) {
if (time < currentLeaderboard[existingEntryIndex].time) {
currentLeaderboard[existingEntryIndex] = newEntry;
}
} else {
currentLeaderboard.push(newEntry);
}

await updateLeaderboard(currentLeaderboard);
const updates: Record<string, LeaderboardEntry> = {};
currentLeaderboard.forEach((entry, index) => {
updates[`entry_${index}`] = entry;
});
return updates;
} else {
const updates: Record<string, LeaderboardEntry> = { entry_0: newEntry };
return updates;
}
});
};

0 comments on commit c061647

Please sign in to comment.