vkashti-bots / supabase / quizHelper.js
quizHelper.js
Raw
import { createClient } from '@supabase/supabase-js'
import dotenv from 'dotenv'

dotenv.config()

// Initialize Supabase client
if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) {
  throw new Error('Missing Supabase environment variables')
}

// Initialize Supabase client
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_ANON_KEY
)

/**
 * Save an answer to the Supabase database.
 * @param {string} teamName - Name of the team.
 * @param {number} questionNumber - Question number.
 * @param {string} answer - The answer.
 * @returns {Promise<{ success: boolean, error?: string }>}
 */
export async function saveAnswer(teamName, questionNumber, answer) {
  try {
    // Check for duplicate submissions
    const { data: existingEntry, error: fetchError } = await supabase
      .from('quiz_answers')
      .select('*')
      .eq('team_name', teamName)
      .eq('question_number', questionNumber)
      .single()

    if (fetchError && fetchError.code !== 'PGRST116') {
      return {
        success: false,
        error: 'Error checking for duplicate submission.',
      }
    }

    if (existingEntry) {
      return { success: false, error: 'Duplicate submission detected.' }
    }

    // Insert new entry
    const { error: insertError } = await supabase.from('quiz_answers').insert({
      team_name: teamName,
      question_number: questionNumber,
      answer,
      created_at: new Date().toISOString(),
    })

    if (insertError) {
      console.error('Error saving the answer:', insertError)
      return { success: false, error: 'Error saving the answer.' }
    }

    return { success: true }
  } catch (error) {
    console.error('Error in saveAnswer:', error)
    return { success: false, error: 'Unexpected error occurred.' }
  }
}

/**
 * Delete all answers from the quiz_answers table.
 * @returns {Promise<{ success: boolean, error?: string }>}.
 */
export async function deleteAllAnswers() {
  try {
    // Delete all entries by matching rows with id >= 0
    const { error: deleteError } = await supabase
      .from('quiz_answers')
      .delete()
      .gte('id', -1)

    if (deleteError) {
      console.error('Error deleting answers:', deleteError)
      return { success: false, error: 'Error deleting answers.' }
    }

    return { success: true }
  } catch (error) {
    console.error('Error in deleteAllAnswers:', error)
    return { success: false, error: 'Unexpected error occurred.' }
  }
}