0003_home.sql 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. BEGIN;
  2. CREATE TABLE cards (
  3. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  4. card_public_id TEXT NOT NULL UNIQUE,
  5. tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
  6. entry_channel_id UUID REFERENCES entry_channels(id) ON DELETE SET NULL,
  7. card_type TEXT NOT NULL CHECK (card_type IN ('event', 'html', 'notice')),
  8. title TEXT NOT NULL,
  9. subtitle TEXT,
  10. cover_url TEXT,
  11. event_id UUID REFERENCES events(id) ON DELETE SET NULL,
  12. html_url TEXT,
  13. display_slot TEXT NOT NULL DEFAULT 'home_primary',
  14. display_priority INTEGER NOT NULL DEFAULT 0,
  15. status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('draft', 'active', 'disabled', 'archived')),
  16. starts_at TIMESTAMPTZ,
  17. ends_at TIMESTAMPTZ,
  18. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  19. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  20. );
  21. CREATE INDEX cards_tenant_id_idx ON cards(tenant_id);
  22. CREATE INDEX cards_entry_channel_id_idx ON cards(entry_channel_id);
  23. CREATE INDEX cards_event_id_idx ON cards(event_id);
  24. CREATE INDEX cards_display_idx ON cards(display_slot, status, display_priority DESC);
  25. CREATE TRIGGER cards_set_updated_at
  26. BEFORE UPDATE ON cards
  27. FOR EACH ROW EXECUTE FUNCTION set_updated_at();
  28. COMMIT;