Seed core achievements for target user
cgen-7f0f1ffc78a545f9a60c8e000675ded8
This commit is contained in:
parent
b756171b8f
commit
d9d9e97025
1 changed files with 30 additions and 9 deletions
|
|
@ -140,7 +140,9 @@ export default async function handler(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const awardedAchievementIds: string[] = [];
|
||||||
let godModeAwarded = false;
|
let godModeAwarded = false;
|
||||||
|
|
||||||
if (targetUserId) {
|
if (targetUserId) {
|
||||||
const progressStats = {
|
const progressStats = {
|
||||||
level: 100,
|
level: 100,
|
||||||
|
|
@ -159,35 +161,54 @@ export default async function handler(
|
||||||
})
|
})
|
||||||
.eq("id", targetUserId);
|
.eq("id", targetUserId);
|
||||||
|
|
||||||
const { data: existingGodMode } = await admin
|
const { data: existingRows, error: existingError } = await admin
|
||||||
.from("user_achievements")
|
.from("user_achievements")
|
||||||
.select("id")
|
.select("achievement_id")
|
||||||
.eq("user_id", targetUserId)
|
.eq("user_id", targetUserId);
|
||||||
.eq("achievement_id", "god-mode")
|
|
||||||
.maybeSingle();
|
if (existingError) {
|
||||||
|
throw existingError;
|
||||||
|
}
|
||||||
|
|
||||||
|
const existingIds = new Set((existingRows ?? []).map((row: any) => row.achievement_id));
|
||||||
|
|
||||||
|
for (const achievement of CORE_ACHIEVEMENTS) {
|
||||||
|
if (existingIds.has(achievement.id)) {
|
||||||
|
if (achievement.id === "god-mode") {
|
||||||
|
godModeAwarded = true;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!existingGodMode) {
|
|
||||||
const { error: insertError } = await admin
|
const { error: insertError } = await admin
|
||||||
.from("user_achievements")
|
.from("user_achievements")
|
||||||
.insert({
|
.insert({
|
||||||
id: randomUUID(),
|
id: randomUUID(),
|
||||||
user_id: targetUserId,
|
user_id: targetUserId,
|
||||||
achievement_id: "god-mode",
|
achievement_id: achievement.id,
|
||||||
earned_at: nowIso,
|
earned_at: nowIso,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (insertError) {
|
if (insertError && insertError.code !== "23505") {
|
||||||
throw insertError;
|
throw insertError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
awardedAchievementIds.push(achievement.id);
|
||||||
|
if (achievement.id === "god-mode") {
|
||||||
|
godModeAwarded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
godModeAwarded = true;
|
if (!godModeAwarded && existingIds.has("god-mode")) {
|
||||||
|
godModeAwarded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.json({
|
return res.json({
|
||||||
ok: true,
|
ok: true,
|
||||||
achievementsSeeded: achievementResults.length,
|
achievementsSeeded: achievementResults.length,
|
||||||
godModeAwarded,
|
godModeAwarded,
|
||||||
|
awardedAchievementIds,
|
||||||
targetUserId,
|
targetUserId,
|
||||||
});
|
});
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue