26 lines
1.1 KiB
SQL
26 lines
1.1 KiB
SQL
-- Phase 3: price tracking. The refetch worker pulls product data for items that
|
|
-- carry a URL (generic Shopify .json adapter first), updates the item's metadata
|
|
-- columns, and appends a row to price_history on every successful fetch.
|
|
|
|
-- Per-item tracking control + last fetch outcome.
|
|
ALTER TABLE items
|
|
ADD COLUMN track_enabled BOOLEAN NOT NULL DEFAULT true,
|
|
ADD COLUMN last_error TEXT,
|
|
ADD COLUMN checked_at TIMESTAMPTZ; -- last fetch attempt (success or failure)
|
|
|
|
-- Append-only price observations. One row per successful fetch.
|
|
CREATE TABLE price_history (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
item_id UUID NOT NULL REFERENCES items(id) ON DELETE CASCADE,
|
|
price NUMERIC(12, 2) NOT NULL,
|
|
currency TEXT NOT NULL,
|
|
in_stock BOOLEAN,
|
|
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX idx_price_history_item ON price_history(item_id, fetched_at DESC);
|
|
|
|
-- Worker scan: trackable items that have a URL, cheapest checked first.
|
|
CREATE INDEX idx_items_trackable ON items(checked_at NULLS FIRST)
|
|
WHERE url IS NOT NULL AND track_enabled;
|