vkashti / app / api / quiz / route.ts
route.ts
Raw
import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/utils/supabase/server';

interface QuizData {
  teamName: string;
  answer: string;
  questionNumber: number;
  quizId: number | null;
}

export async function POST(req: NextRequest) {
  try {
    const webhookUrl = process.env.DISCORD_QUIZ_WEBHOOK_URL;
    const supabase = createClient();

    // Handle the case where webhookUrl is not set
    if (!webhookUrl) {
      console.error('Discord webhook URL is not set in environment variables.');
      return NextResponse.json(
        { message: 'Server error: Discord webhook URL is not configured.' },
        { status: 500 }
      );
    }

    const data: QuizData = await req.json();

    // Validate required fields
    const { teamName, answer, questionNumber, quizId } = data;

    if (!teamName || !answer || questionNumber === undefined) {
      return NextResponse.json(
        { message: 'Bad request: Missing required quiz data.' },
        { status: 400 }
      );
    }

    // Save the answer to Supabase if quizId is provided
    if (quizId) {
      try {
        const { error } = await supabase.from('quiz_answers').insert({
          team_name: teamName,
          question_number: questionNumber,
          answer: answer,
          quiz_id: Number(quizId),
          correct: false,
          points: 0
        });

        if (error) {
          console.error('Error saving answer to Supabase:', error);
        }
      } catch (supabaseError) {
        console.error('Supabase insertion error:', supabaseError);
      }
    }

    // Construct the plain text message content with quiz ID
    const quizIdText = quizId ? `Quiz ${quizId}` : 'Unknown Quiz';
    const messageContent = `${quizIdText} | ${teamName} | Q ${questionNumber} | ${answer}`;

    // Send the message to Discord via the webhook
    const discordResponse = await fetch(webhookUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        content: messageContent, // Use content field for plain text messages
        username: 'Quiz Bot', // Optional: Set the username of the bot
        avatar_url: 'https://www.vkashti.bar/logo.png' // Optional: Set the avatar of the bot
      })
    });

    if (!discordResponse.ok) {
      console.error(
        'Failed to send message to Discord webhook:',
        discordResponse.statusText
      );
      return NextResponse.json(
        { message: 'Error sending message to Discord.' },
        { status: 500 }
      );
    }

    return NextResponse.json({ message: 'Success' }, { status: 200 });
  } catch (error) {
    console.error('Error:', error);
    return NextResponse.json({ message: 'Server error.' }, { status: 500 });
  }
}