CREATE TABLE network_stripe_customers (
  network_id         TEXT PRIMARY KEY,
  stripe_customer_id TEXT NOT NULL UNIQUE,
  created_at         TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE network_subscriptions (
  id                     TEXT        PRIMARY KEY,
  network_id             TEXT        NOT NULL REFERENCES network_stripe_customers(network_id) ON DELETE CASCADE,
  stripe_customer_id     TEXT        NOT NULL,
  status                 TEXT        NOT NULL,
  price_id               TEXT        NOT NULL,
  cadence                TEXT        NOT NULL,
  quantity               INT         NOT NULL,
  cancel_at_period_end   BOOLEAN     NOT NULL DEFAULT FALSE,
  current_period_start   TIMESTAMPTZ NOT NULL,
  current_period_end     TIMESTAMPTZ NOT NULL,
  created_at             TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at             TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  CONSTRAINT network_subscriptions_cadence_check CHECK (cadence IN ('monthly', 'annual'))
);

CREATE UNIQUE INDEX idx_network_subscriptions_network_id
  ON network_subscriptions (network_id);
