export const checkGuess = mutation({
args: { levelId: v.id("levels"), selectedImageId: v.id("images") },
handler: async(ctx, args) => {
const level = await ctx.db.get(args.levelId);
if(!level) {
throw new Error("No levels exist");
}
let AIGeneratedImageId;
let AIGeneratedImagePrompt;
for (const imageId of level.images) {
const image = await ctx.db.get(imageId);
if (image && image.isAIGenerated) {
AIGeneratedImageId = image;
AIGeneratedImagePrompt = image.AIGeneratedPrompt;
break;
}
}
if(!AIGeneratedImageId) {
throw new Error("No AI-generated image found.");
}
let score = 0;
let correct = false;
if(args.selectedImageId === AIGeneratedImageId._id) {
score = 50;
correct = true;
} else {
score = 0;
correct = false;
}
const totalPlays = level.totalPlays + 1n;
const correctAnswers = correct ? (level.correctAnswers + 1n) : level.correctAnswers;
const globalAccuracy = totalPlays > 0n ? ((correctAnswers * 100n) / totalPlays) : 0n;
await ctx.db.patch(level._id, {
totalPlays,
correctAnswers
});
return {
correct,
correctImageId: AIGeneratedImageId._id,
groupName: level.groupName,
classification: level.classification,
hints: level.hints,
aiImagePrompt: AIGeneratedImagePrompt,
score,
globalAccuracy: globalAccuracy
};
}
});
export const checkGuess = mutation({
args: { levelId: v.id("levels"), selectedImageId: v.id("images") },
handler: async(ctx, args) => {
const level = await ctx.db.get(args.levelId);
if(!level) {
throw new Error("No levels exist");
}
let AIGeneratedImageId;
let AIGeneratedImagePrompt;
for (const imageId of level.images) {
const image = await ctx.db.get(imageId);
if (image && image.isAIGenerated) {
AIGeneratedImageId = image;
AIGeneratedImagePrompt = image.AIGeneratedPrompt;
break;
}
}
if(!AIGeneratedImageId) {
throw new Error("No AI-generated image found.");
}
let score = 0;
let correct = false;
if(args.selectedImageId === AIGeneratedImageId._id) {
score = 50;
correct = true;
} else {
score = 0;
correct = false;
}
const totalPlays = level.totalPlays + 1n;
const correctAnswers = correct ? (level.correctAnswers + 1n) : level.correctAnswers;
const globalAccuracy = totalPlays > 0n ? ((correctAnswers * 100n) / totalPlays) : 0n;
await ctx.db.patch(level._id, {
totalPlays,
correctAnswers
});
return {
correct,
correctImageId: AIGeneratedImageId._id,
groupName: level.groupName,
classification: level.classification,
hints: level.hints,
aiImagePrompt: AIGeneratedImagePrompt,
score,
globalAccuracy: globalAccuracy
};
}
});