mock events db schema

This commit is contained in:
2026-08-20 00:23:41 -06:00
parent 20bbbe33ca
commit e4e2bd992b
5 changed files with 781 additions and 26 deletions
@@ -0,0 +1,465 @@
BEGIN;
-- raw store events
CREATE TABLE mock.raw_shop_events (
platform TEXT NOT NULL,
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
raw_payload JSONB NOT NULL,
parsed BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (platform, store_id, event_id, event_timestamp)
);
-- processed event tables
CREATE TABLE mock.shop_amazon_events (
platform TEXT NOT NULL DEFAULT 'amazon' CHECK (platform = 'amazon'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_big_cartel_events (
platform TEXT NOT NULL DEFAULT 'big_cartel' CHECK (platform = 'big_cartel'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_ebay_events (
platform TEXT NOT NULL DEFAULT 'ebay' CHECK (platform = 'ebay'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_ecwid_events (
platform TEXT NOT NULL DEFAULT 'ecwid' CHECK (platform = 'ecwid'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_etsy_events (
platform TEXT NOT NULL DEFAULT 'etsy' CHECK (platform = 'etsy'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_shopify_events (
platform TEXT NOT NULL DEFAULT 'shopify' CHECK (platform = 'shopify'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_square_online_events (
platform TEXT NOT NULL DEFAULT 'square_online' CHECK (platform = 'square_online'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_squarespace_events (
platform TEXT NOT NULL DEFAULT 'squarespace' CHECK (platform = 'squarespace'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_tiktok_events (
platform TEXT NOT NULL DEFAULT 'tiktok' CHECK (platform = 'tiktok'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_walmart_marketplace_events (
platform TEXT NOT NULL DEFAULT 'walmart_marketplace' CHECK (platform = 'walmart_marketplace'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_wix_events (
platform TEXT NOT NULL DEFAULT 'wix' CHECK (platform = 'wix'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_woo_commerce_events (
platform TEXT NOT NULL DEFAULT 'woo_commerce' CHECK (platform = 'woo_commerce'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
CREATE TABLE mock.shop_zoho_events (
platform TEXT NOT NULL DEFAULT 'zoho' CHECK (platform = 'zoho'),
store_id TEXT NOT NULL,
event_timestamp TIMESTAMPTZ NOT NULL,
event_id TEXT NOT NULL,
PRIMARY KEY (store_id, event_id, event_timestamp),
FOREIGN KEY (platform, store_id, event_id, event_timestamp) REFERENCES mock.raw_shop_events
);
--- event processing
CREATE OR REPLACE FUNCTION mock.process_raw_amazon_event() RETURNS TRIGGER AS $process_raw_amazon_event$
BEGIN
INSERT INTO mock.shop_amazon_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_amazon_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER amazon_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'amazon')
EXECUTE FUNCTION mock.process_raw_amazon_event();
CREATE OR REPLACE FUNCTION mock.process_raw_big_cartel_event() RETURNS TRIGGER AS $process_raw_big_cartel_event$
BEGIN
INSERT INTO mock.shop_big_cartel_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_big_cartel_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER big_cartel_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'big_cartel')
EXECUTE FUNCTION mock.process_raw_big_cartel_event();
CREATE OR REPLACE FUNCTION mock.process_raw_ebay_event() RETURNS TRIGGER AS $process_raw_ebay_event$
BEGIN
INSERT INTO mock.shop_ebay_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_ebay_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER ebay_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'ebay')
EXECUTE FUNCTION mock.process_raw_ebay_event();
CREATE OR REPLACE FUNCTION mock.process_raw_ecwid_event() RETURNS TRIGGER AS $process_raw_ecwid_event$
BEGIN
INSERT INTO mock.shop_ecwid_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_ecwid_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER ecwid_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'ecwid')
EXECUTE FUNCTION mock.process_raw_ecwid_event();
CREATE OR REPLACE FUNCTION mock.process_raw_etsy_event() RETURNS TRIGGER AS $process_raw_etsy_event$
BEGIN
INSERT INTO mock.shop_etsy_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_etsy_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER etsy_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'etsy')
EXECUTE FUNCTION mock.process_raw_etsy_event();
CREATE OR REPLACE FUNCTION mock.process_raw_shopify_event() RETURNS TRIGGER AS $process_raw_shopify_event$
BEGIN
INSERT INTO mock.shop_shopify_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_shopify_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER shopify_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'shopify')
EXECUTE FUNCTION mock.process_raw_shopify_event();
CREATE OR REPLACE FUNCTION mock.process_raw_square_online_event() RETURNS TRIGGER AS $process_raw_square_online_event$
BEGIN
INSERT INTO mock.shop_square_online_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_square_online_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER square_online_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'square_online')
EXECUTE FUNCTION mock.process_raw_square_online_event();
CREATE OR REPLACE FUNCTION mock.process_raw_squarespace_event() RETURNS TRIGGER AS $process_raw_squarespace_event$
BEGIN
INSERT INTO mock.shop_squarespace_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_squarespace_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER squarespace_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'squarespace')
EXECUTE FUNCTION mock.process_raw_squarespace_event();
CREATE OR REPLACE FUNCTION mock.process_raw_tiktok_event() RETURNS TRIGGER AS $process_raw_tiktok_event$
BEGIN
INSERT INTO mock.shop_tiktok_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_tiktok_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER tiktok_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'tiktok')
EXECUTE FUNCTION mock.process_raw_tiktok_event();
CREATE OR REPLACE FUNCTION mock.process_raw_walmart_marketplace_event() RETURNS TRIGGER AS $process_raw_walmart_marketplace_event$
BEGIN
INSERT INTO mock.shop_walmart_marketplace_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_walmart_marketplace_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER walmart_marketplace_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'walmart_marketplace')
EXECUTE FUNCTION mock.process_raw_walmart_marketplace_event();
CREATE OR REPLACE FUNCTION mock.process_raw_wix_event() RETURNS TRIGGER AS $process_raw_wix_event$
BEGIN
INSERT INTO mock.shop_wix_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_wix_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER wix_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'wix')
EXECUTE FUNCTION mock.process_raw_wix_event();
CREATE OR REPLACE FUNCTION mock.process_raw_woo_commerce_event() RETURNS TRIGGER AS $process_raw_woo_commerce_event$
BEGIN
INSERT INTO mock.shop_woo_commerce_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_woo_commerce_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER woo_commerce_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'woo_commerce')
EXECUTE FUNCTION mock.process_raw_woo_commerce_event();
CREATE OR REPLACE FUNCTION mock.process_raw_zoho_event() RETURNS TRIGGER AS $process_raw_zoho_event$
BEGIN
INSERT INTO mock.shop_zoho_events (
platform,
store_id,
event_timestamp,
event_id
)
SELECT
NEW.platform,
NEW.store_id,
NEW.event_timestamp,
NEW.event_id;
RETURN NULL;
END;
$process_raw_zoho_event$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER zoho_store_events
AFTER INSERT ON mock.raw_shop_events
FOR EACH ROW
WHEN (NEW.platform = 'zoho')
EXECUTE FUNCTION mock.process_raw_zoho_event();
COMMIT;