← back to Sdcc Awards

cypressaward/scraper/setup-database.js

147 lines

require('dotenv').config();
const { createClient } = require('@supabase/supabase-js');

const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_ANON_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);

async function createTables() {
  console.log('Creating Supabase tables...');
  
  const tables = [
    {
      name: 'scraped_cases',
      sql: `
        CREATE TABLE IF NOT EXISTS scraped_cases (
          id SERIAL PRIMARY KEY,
          hash VARCHAR(32) UNIQUE NOT NULL,
          title TEXT,
          court TEXT,
          date_filed TIMESTAMP,
          docket_number TEXT,
          summary TEXT,
          url TEXT,
          source TEXT,
          data_type VARCHAR(50),
          created_at TIMESTAMP DEFAULT NOW(),
          updated_at TIMESTAMP DEFAULT NOW()
        )
      `
    },
    {
      name: 'scraped_awards',
      sql: `
        CREATE TABLE IF NOT EXISTS scraped_awards (
          id SERIAL PRIMARY KEY,
          hash VARCHAR(32) UNIQUE NOT NULL,
          title TEXT,
          recipient TEXT,
          organization TEXT,
          date_awarded TIMESTAMP,
          category TEXT,
          description TEXT,
          url TEXT,
          source TEXT,
          data_type VARCHAR(50),
          created_at TIMESTAMP DEFAULT NOW(),
          updated_at TIMESTAMP DEFAULT NOW()
        )
      `
    },
    {
      name: 'scraped_law_firms',
      sql: `
        CREATE TABLE IF NOT EXISTS scraped_law_firms (
          id SERIAL PRIMARY KEY,
          hash VARCHAR(32) UNIQUE NOT NULL,
          name TEXT,
          ranking TEXT,
          location TEXT,
          size TEXT,
          practice_areas TEXT,
          revenue TEXT,
          website TEXT,
          source TEXT,
          data_type VARCHAR(50),
          created_at TIMESTAMP DEFAULT NOW(),
          updated_at TIMESTAMP DEFAULT NOW()
        )
      `
    },
    {
      name: 'scraped_nonprofits',
      sql: `
        CREATE TABLE IF NOT EXISTS scraped_nonprofits (
          id SERIAL PRIMARY KEY,
          hash VARCHAR(32) UNIQUE NOT NULL,
          name TEXT,
          category TEXT,
          location TEXT,
          mission TEXT,
          rating TEXT,
          website TEXT,
          source TEXT,
          data_type VARCHAR(50),
          created_at TIMESTAMP DEFAULT NOW(),
          updated_at TIMESTAMP DEFAULT NOW()
        )
      `
    },
    {
      name: 'scraped_news',
      sql: `
        CREATE TABLE IF NOT EXISTS scraped_news (
          id SERIAL PRIMARY KEY,
          hash VARCHAR(32) UNIQUE NOT NULL,
          title TEXT,
          description TEXT,
          url TEXT,
          published_date TIMESTAMP,
          author TEXT,
          category TEXT,
          source TEXT,
          data_type VARCHAR(50),
          created_at TIMESTAMP DEFAULT NOW(),
          updated_at TIMESTAMP DEFAULT NOW()
        )
      `
    },
    {
      name: 'scraping_logs',
      sql: `
        CREATE TABLE IF NOT EXISTS scraping_logs (
          id SERIAL PRIMARY KEY,
          timestamp TIMESTAMP DEFAULT NOW(),
          results JSONB,
          error TEXT,
          status VARCHAR(50)
        )
      `
    }
  ];

  // Test connection first
  const { data: testData, error: testError } = await supabase
    .from('scraping_logs')
    .select('count')
    .limit(1);
    
  if (testError && testError.code === '42P01') {
    console.log('Tables do not exist yet. Please create them manually in Supabase SQL Editor.');
    console.log('\nGo to: https://supabase.com/dashboard/project/jeihhunsjixzartumtbn/sql/new');
    console.log('And run the SQL from: /root/cypressaward/scraper/create-tables.sql');
    return false;
  }
  
  console.log('Tables are ready or already exist!');
  return true;
}

createTables().then(success => {
  if (success) {
    console.log('Database setup complete!');
  } else {
    console.log('\nPlease create the tables manually in Supabase.');
  }
  process.exit(0);
});