mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-07-04 03:16:00 +00:00
chore(bot): update caching for achievements
This commit is contained in:
parent
b990b8ea06
commit
20f50536b6
1 changed files with 31 additions and 52 deletions
|
@ -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,55 +97,38 @@ export async function updateAchievementProgress(
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const existing = await withCache(
|
const existing = await db
|
||||||
`userAchievements:${userId}:${achievementId}`,
|
.select()
|
||||||
async () => {
|
.from(schema.userAchievementsTable)
|
||||||
return await db
|
.where(
|
||||||
.select()
|
and(
|
||||||
.from(schema.userAchievementsTable)
|
eq(schema.userAchievementsTable.discordId, userId),
|
||||||
.where(
|
eq(schema.userAchievementsTable.achievementId, achievementId),
|
||||||
and(
|
),
|
||||||
eq(schema.userAchievementsTable.discordId, userId),
|
)
|
||||||
eq(schema.userAchievementsTable.achievementId, achievementId),
|
.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}`,
|
.update(schema.userAchievementsTable)
|
||||||
async () => {
|
.set({ progress, earnedAt: progress === 100 ? new Date() : null })
|
||||||
return await db
|
.where(eq(schema.userAchievementsTable.id, existing.id))
|
||||||
.update(schema.userAchievementsTable)
|
.returning();
|
||||||
.set({ progress, earnedAt: progress === 100 ? new Date() : null })
|
|
||||||
.where(eq(schema.userAchievementsTable.id, existing.id))
|
|
||||||
.returning();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
await getUserAchievements(userId);
|
|
||||||
} else {
|
} else {
|
||||||
await withCache(
|
await db
|
||||||
`userAchievements:${userId}:${achievementId}`,
|
.insert(schema.userAchievementsTable)
|
||||||
async () => {
|
.values({
|
||||||
return await db
|
discordId: userId,
|
||||||
.insert(schema.userAchievementsTable)
|
achievementId,
|
||||||
.values({
|
progress,
|
||||||
discordId: userId,
|
earnedAt: progress === 100 ? new Date() : null,
|
||||||
achievementId,
|
})
|
||||||
progress,
|
.returning();
|
||||||
earnedAt: progress === 100 ? new Date() : null,
|
|
||||||
})
|
|
||||||
.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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue