BEGIN;


CREATE TABLE mock.sync_group_editing (
	account_id		INTEGER		PRIMARY KEY	REFERENCES mock.accounts ON DELETE CASCADE,
	sync_group_id	INTEGER		NOT NULL	REFERENCES mock.sync_groups ON DELETE CASCADE,

	UNIQUE (account_id, sync_group_id),
	UNIQUE (sync_group_id)
);

CREATE TABLE mock.sync_group_editing_listing_order_indexes (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL	CHECK (order_index >= 0),

	PRIMARY KEY (account_id, order_index)
);

CREATE TABLE mock.shop_amazon_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_amazon ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_big_cartel_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_big_cartel ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_ebay_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_ebay ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_ecwid_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_ecwid ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_etsy_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_etsy ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_shopify_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_shopify ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_square_online_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_square_online ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_squarespace_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_squarespace ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_tiktok_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_tiktok ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_walmart_marketplace_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_walmart_marketplace ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_wix_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_wix ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_woo_commerce_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_woo_commerce ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);

CREATE TABLE mock.shop_zoho_sync_group_editing_listings (
	account_id		INTEGER		NOT NULL	REFERENCES mock.sync_group_editing ON DELETE CASCADE,
	order_index		INTEGER		NOT NULL,
	shop_id			TEXT		NOT NULL,
	listing_id		TEXT,

	PRIMARY KEY (account_id, order_index),
	UNIQUE (account_id, shop_id),
	FOREIGN KEY (account_id, shop_id) REFERENCES mock.shop_zoho ON DELETE CASCADE,
	FOREIGN KEY (account_id, order_index) REFERENCES mock.sync_group_editing_listing_order_indexes ON DELETE CASCADE
);



GRANT ALL ON SCHEMA mock TO PUBLIC;









COMMIT;
