Skip to content

Commit 02d080a

Browse files
authored
Redeem secret achievements
1 parent be71b28 commit 02d080a

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

src/app/(authenticated)/qr/scan/QRScanner.tsx

+21-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import MessageCard from "@/components/MessageCard";
44
import QRCodeScanner from "@/components/QRCodeScanner";
55
import { UserTile } from "@/components/user/UserTile";
6+
import { AchievementService } from "@/services/AchievementService";
67
import { CompanyService } from "@/services/CompanyService";
78
import {
89
getAchievementFromQRCode,
@@ -50,8 +51,26 @@ export default function QRScanner({ user, cannonToken }: QRScannerProps) {
5051
}
5152
}
5253
} else if (scannedAchievement) {
53-
// FIXME: Redeem secret achievement
54-
setBottomCard(<h1>Achievement Redeemed</h1>);
54+
const redeemedAchievement = await AchievementService.redeemSecretAchievement(
55+
cannonToken,
56+
scannedAchievement
57+
)
58+
59+
if (redeemedAchievement) {
60+
setBottomCard(<MessageCard
61+
type="success"
62+
content="Secret Achievement found!"
63+
/>,
64+
);
65+
} else {
66+
setBottomCard(<MessageCard
67+
type="warning"
68+
content="Failed to get user's achievement. Scan again!"
69+
/>,
70+
);
71+
}
72+
73+
5574
} else {
5675
setBottomCard(<MessageCard type="danger" content="Invalid QR-Code" />);
5776
}

src/services/AchievementService.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,25 @@ export const AchievementService = (() => {
3030
return null;
3131
};
3232

33-
return { getAchievements, getAchievementBySession };
33+
const redeemSecretAchievement = async (
34+
cannonToken: string,
35+
code: string,
36+
): Promise<Achievement | null> => {
37+
try {
38+
const resp = await fetch(`${achievementsEndpoint}/session/secret`, {
39+
method: "POST",
40+
headers: {
41+
"Content-Type": "application/json",
42+
Authorization: `Bearer ${cannonToken}`,
43+
},
44+
body: JSON.stringify({code}),
45+
});
46+
if (resp.ok) return (await resp.json()) as Achievement;
47+
} catch (e) {
48+
console.error(e);
49+
}
50+
return null;
51+
}
52+
53+
return { getAchievements, getAchievementBySession, redeemSecretAchievement };
3454
})();

0 commit comments

Comments
 (0)