Skip to content

[Airdrop P1] Create airdrop DB tables #878

@realproject7

Description

@realproject7

Parent: #877

Scope

Create 6 new database tables for the airdrop campaign.

Tables

-- PL Point ledger (append-only)
CREATE TABLE pl_points (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  address TEXT NOT NULL,
  action TEXT NOT NULL,            -- 'buy', 'referral', 'write', 'rate'
  points NUMERIC NOT NULL,
  metadata JSONB,                  -- { tx_hash, storyline_id, referred_address, trade_id }
  created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_pl_points_address ON pl_points (address);
CREATE INDEX idx_pl_points_action ON pl_points (action);

-- Referral relationships
CREATE TABLE pl_referrals (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  referrer_address TEXT NOT NULL,
  referred_address TEXT NOT NULL UNIQUE,
  referral_code TEXT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_pl_referrals_referrer ON pl_referrals (referrer_address);

-- Referral codes (one per wallet, immutable once set)
CREATE TABLE pl_referral_codes (
  address TEXT PRIMARY KEY,
  code TEXT NOT NULL UNIQUE,
  is_farcaster_username BOOLEAN DEFAULT FALSE
);

-- Daily check-in streaks
CREATE TABLE pl_streaks (
  address TEXT PRIMARY KEY,
  current_streak INTEGER DEFAULT 0,
  last_checkin TIMESTAMPTZ,
  longest_streak INTEGER DEFAULT 0
);

-- Daily PLOT price snapshots (for TWAP)
CREATE TABLE pl_daily_prices (
  id SERIAL PRIMARY KEY,
  price_usd NUMERIC NOT NULL,
  supply NUMERIC NOT NULL,
  mcap_usd NUMERIC NOT NULL,
  recorded_at DATE NOT NULL UNIQUE DEFAULT CURRENT_DATE
);

-- Weekly campaign stats
CREATE TABLE pl_weekly_snapshots (
  id SERIAL PRIMARY KEY,
  week_number INTEGER NOT NULL UNIQUE,
  week_start DATE NOT NULL,
  new_stories INTEGER DEFAULT 0,
  token_buys INTEGER DEFAULT 0,
  new_referrals INTEGER DEFAULT 0,
  mcap_start NUMERIC,
  mcap_end NUMERIC,
  total_pl_earned NUMERIC DEFAULT 0,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

Acceptance Criteria

  • All 6 tables created in Supabase
  • Indexes created as specified
  • Migration script committed

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/T3Assigned to T3 builder agentairdropPLOT 10x Airdrop Campaign

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions