chore(bot): update caching for achievements

This commit is contained in:
Ahmad 2025-06-24 20:22:51 -04:00
parent b990b8ea06
commit 20f50536b6
No known key found for this signature in database
GPG key ID: 8FD8A93530D182BF

View file

@ -55,7 +55,7 @@ export async function getUserAchievements(
} }
const cachedUserAchievements = await withCache( const cachedUserAchievements = await withCache(
`userAchievements:${userId}:allAchievements`, `userAchievements:${userId}`,
async () => { async () => {
return await db return await db
.select({ .select({
@ -97,10 +97,7 @@ export async function updateAchievementProgress(
return false; return false;
} }
const existing = await withCache( const existing = await db
`userAchievements:${userId}:${achievementId}`,
async () => {
return await db
.select() .select()
.from(schema.userAchievementsTable) .from(schema.userAchievementsTable)
.where( .where(
@ -110,29 +107,15 @@ export async function updateAchievementProgress(
), ),
) )
.then((rows) => rows[0]); .then((rows) => rows[0]);
},
);
await invalidateCache(`userAchievements:${userId}:allAchievements`);
await invalidateCache(`userAchievements:${userId}:${achievementId}`);
if (existing) { if (existing) {
await withCache( await db
`userAchievements:${userId}:${achievementId}`,
async () => {
return await db
.update(schema.userAchievementsTable) .update(schema.userAchievementsTable)
.set({ progress, earnedAt: progress === 100 ? new Date() : null }) .set({ progress, earnedAt: progress === 100 ? new Date() : null })
.where(eq(schema.userAchievementsTable.id, existing.id)) .where(eq(schema.userAchievementsTable.id, existing.id))
.returning(); .returning();
},
);
await getUserAchievements(userId);
} else { } else {
await withCache( await db
`userAchievements:${userId}:${achievementId}`,
async () => {
return await db
.insert(schema.userAchievementsTable) .insert(schema.userAchievementsTable)
.values({ .values({
discordId: userId, discordId: userId,
@ -141,11 +124,11 @@ export async function updateAchievementProgress(
earnedAt: progress === 100 ? new Date() : null, earnedAt: progress === 100 ? new Date() : null,
}) })
.returning(); .returning();
},
);
await getUserAchievements(userId);
} }
await invalidateCache(`userAchievements:${userId}`);
await getUserAchievements(userId);
return true; return true;
} catch (error) { } catch (error) {
handleDbError('Failed to update achievement progress', error as Error); handleDbError('Failed to update achievement progress', error as Error);
@ -175,8 +158,6 @@ export async function createAchievement(achievementData: {
return undefined; return undefined;
} }
await invalidateCache('achievementDefinitions');
const [achievement] = await db const [achievement] = await db
.insert(schema.achievementDefinitionsTable) .insert(schema.achievementDefinitionsTable)
.values({ .values({
@ -191,6 +172,7 @@ export async function createAchievement(achievementData: {
}) })
.returning(); .returning();
await invalidateCache('achievementDefinitions');
await getAllAchievements(); await getAllAchievements();
return achievement; return achievement;
@ -214,8 +196,6 @@ export async function deleteAchievement(
return false; return false;
} }
await invalidateCache('achievementDefinitions');
await db await db
.delete(schema.userAchievementsTable) .delete(schema.userAchievementsTable)
.where(eq(schema.userAchievementsTable.achievementId, achievementId)); .where(eq(schema.userAchievementsTable.achievementId, achievementId));
@ -224,6 +204,7 @@ export async function deleteAchievement(
.delete(schema.achievementDefinitionsTable) .delete(schema.achievementDefinitionsTable)
.where(eq(schema.achievementDefinitionsTable.id, achievementId)); .where(eq(schema.achievementDefinitionsTable.id, achievementId));
await invalidateCache('achievementDefinitions');
await getAllAchievements(); await getAllAchievements();
return true; return true;
@ -250,9 +231,6 @@ export async function removeUserAchievement(
return false; return false;
} }
await invalidateCache(`userAchievements:${discordId}:allAchievements`);
await invalidateCache(`userAchievements:${discordId}:${achievementId}`);
await db await db
.delete(schema.userAchievementsTable) .delete(schema.userAchievementsTable)
.where( .where(
@ -262,6 +240,7 @@ export async function removeUserAchievement(
), ),
); );
await invalidateCache(`userAchievements:${discordId}`);
await getUserAchievements(discordId); await getUserAchievements(discordId);
return true; return true;