Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 13 additions & 18 deletions src/app/dashboard/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Link from "next/link";
import { createClient as createServerClient } from "../../lib/supabase/server";
import { Cinzel } from "next/font/google";
import { ArrowBigLeft, ArrowBigDown, ArrowBigRight } from "lucide-react";
import checkUserCompletedQuizzes from "@/lib/checkUserCompletedQuizzes";

const cinzel = Cinzel({
subsets: ["latin"],
Expand All @@ -30,13 +31,21 @@ async function resetQuestProgress() {

// Delete all quest completions for this user
// The trigger will automatically update quests_completed count to 0
const { error: deleteError } = await supabase
const { error: deleteError1 } = await supabase
.from("quest_completions")
.delete()
.eq("user_id", user.id);

if (deleteError) {
console.error("Error deleting quest completions:", deleteError);
const { error: deleteError2 } = await supabase
.from("user_quiz_progress")
.delete()
.eq("user_id", user.id);

if (deleteError1) {
console.error("Error deleting quest completions:", deleteError1);
}
if (deleteError2) {
console.error("Error deleting quest completions:", deleteError2);
}

// Revalidate the dashboard and profile pages to refresh data
Expand All @@ -55,18 +64,7 @@ export default async function DashboardPage() {

if (!user) redirect("/login");

// Fetch individual quest completions from quest_completions table
const { data: questCompletions, error: completionsError } = await supabase
.from("quest_completions")
.select("quest_id")
.eq("user_id", user.id);

if (completionsError) {
console.error(`Error fetching quest completions: ${completionsError.message}`);
}

// Create a Set of completed quest IDs for quick lookup
const completedQuestIds = new Set(questCompletions?.map((qc) => qc.quest_id) || []);
const completedQuestIds = await checkUserCompletedQuizzes();

// Check individual quest completion status
const isHelloWorldComplete = completedQuestIds.has("hello-world");
Expand All @@ -80,9 +78,6 @@ export default async function DashboardPage() {
const isDictionaryComplete = completedQuestIds.has("dictionary");
const isRecursionComplete = completedQuestIds.has("recursion");

const celestialButtonClasses =
"btn border-2 border-cyan-400 text-cyan-400 bg-transparent hover:bg-cyan-900/50 hover:border-cyan-200 hover:text-cyan-200 shadow-lg shadow-cyan-500/50 transition duration-300 ease-in-out w-full";

const celestialButtonNoFullWidth =
"btn border-2 border-cyan-400 text-cyan-400 bg-transparent hover:bg-cyan-900/50 hover:border-cyan-200 hover:text-cyan-200 shadow-lg shadow-cyan-500/50 transition duration-300 ease-in-out";

Expand Down
10 changes: 4 additions & 6 deletions src/components/tutorial-quiz.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,10 @@ export default function Quiz({ quizData }: QuizProps) {

// Insert into quest_completions table
// The unique constraint prevents duplicates, and the trigger auto-updates quests_completed count
const { error: insertError } = await supabase
.from("quest_completions")
.insert({
user_id: user.id,
quest_id: quizData.id,
});
const { error: insertError } = await supabase.from("quest_completions").insert({
user_id: user.id,
quest_id: quizData.id,
});

if (insertError) {
// If it's a duplicate key error, the quest was already completed - that's okay
Expand Down
6 changes: 3 additions & 3 deletions src/lib/checkUserCompletedQuizzes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ export default async function checkUserCompletedQuizzes() {
}

const { data: quizData, error: selectError } = await supabase
.from("user_quiz_progress")
.select("quiz_id")
.from("quest_completions")
.select("quest_id")
.eq("user_id", user.id);

if (selectError) {
console.error(`Supabase selection error: ${selectError.message}`);
return new Set();
}

return new Set(quizData.map((row) => row.quiz_id));
return new Set(quizData.map((row) => row.quest_id));
}