Files
peworkshop/app/api/admin/fix-qr-codes/route.js
T
bobbert 0afa6817a8 cannot fix issue with elapsed timer on admin dashboard. fixing issues with QR code editing.
Grey = cant click
Red = current
Green = complete
blue = skipped?
2025-03-15 20:01:51 +00:00

81 lines
2.2 KiB
JavaScript

import { getToken } from "next-auth/jwt";
import { query, run } from "@/lib/db";
export const dynamic = "force-dynamic"; // Disable caching
// Ensure the user is an admin
async function verifyAdmin(request) {
const token = await getToken({
req: request,
secret:
process.env.NEXTAUTH_SECRET ||
"your-fallback-secret-should-be-at-least-32-chars",
});
if (!token) {
return { authorized: false, error: "Unauthorized", status: 401 };
}
if (token.role !== "admin") {
return { authorized: false, error: "Admin access required", status: 403 };
}
return { authorized: true, token };
}
// POST - Fix all QR codes in the database to follow the QR[id] format
export async function POST(request) {
try {
// Verify admin access
const { authorized, error, status } = await verifyAdmin(request);
if (!authorized) {
return Response.json({ error }, { status });
}
// Get all clues ordered by ID to maintain sequence
const clues = await query("SELECT id FROM clues ORDER BY id ASC");
// Count of fixed clues
let fixedCount = 0;
// Start a transaction
await run("BEGIN TRANSACTION");
try {
// Assign sequential QR codes (QR1, QR2, QR3, etc.) based on array index
// This ensures no gaps in the QR sequence regardless of DB IDs
for (let i = 0; i < clues.length; i++) {
const sequentialQrCode = `QR${i + 1}`;
// Update the clue with the sequential QR code
await run("UPDATE clues SET qr_code = ? WHERE id = ?", [
sequentialQrCode,
clues[i].id,
]);
fixedCount++;
}
// Commit changes
await run("COMMIT");
return Response.json({
success: true,
message: `QR codes fixed successfully. Set ${fixedCount} clues to sequential QR codes without gaps.`,
totalClues: clues.length,
fixedClues: fixedCount,
});
} catch (error) {
// Roll back on error
await run("ROLLBACK");
throw error;
}
} catch (error) {
console.error("Fix QR codes error:", error);
return Response.json(
{ error: "Failed to fix QR codes: " + error.message },
{ status: 500 }
);
}
}