Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE input_feeds (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
url TEXT,
|
||||
feed_type TEXT NOT NULL DEFAULT 'xml',
|
||||
status TEXT NOT NULL DEFAULT 'active',
|
||||
sync_interval_minutes INT NOT NULL DEFAULT 60,
|
||||
last_synced_at TIMESTAMPTZ,
|
||||
auth_config JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
options JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX input_feeds_company_id_idx ON input_feeds(company_id);
|
||||
|
||||
ALTER TABLE raw_products
|
||||
ADD CONSTRAINT raw_products_feed_id_fkey
|
||||
FOREIGN KEY (feed_id) REFERENCES input_feeds(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE processed_products
|
||||
ADD CONSTRAINT processed_products_feed_id_fkey
|
||||
FOREIGN KEY (feed_id) REFERENCES input_feeds(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE feed_mappings (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
feed_id UUID NOT NULL REFERENCES input_feeds(id) ON DELETE CASCADE,
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
version INT NOT NULL DEFAULT 1,
|
||||
mappings JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX feed_mappings_feed_id_idx ON feed_mappings(feed_id);
|
||||
|
||||
CREATE TABLE feed_sync_jobs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
feed_id UUID NOT NULL REFERENCES input_feeds(id) ON DELETE CASCADE,
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
started_at TIMESTAMPTZ,
|
||||
completed_at TIMESTAMPTZ,
|
||||
products_synced INT NOT NULL DEFAULT 0,
|
||||
error TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX feed_sync_jobs_feed_id_idx ON feed_sync_jobs(feed_id);
|
||||
CREATE INDEX feed_sync_jobs_company_id_idx ON feed_sync_jobs(company_id);
|
||||
|
||||
ALTER TABLE raw_products
|
||||
ADD CONSTRAINT raw_products_sync_job_id_fkey
|
||||
FOREIGN KEY (sync_job_id) REFERENCES feed_sync_jobs(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE export_feeds (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
source_feed_id UUID REFERENCES input_feeds(id) ON DELETE SET NULL,
|
||||
format TEXT NOT NULL DEFAULT 'xml',
|
||||
public_token TEXT NOT NULL UNIQUE DEFAULT encode(gen_random_bytes(16), 'hex'),
|
||||
template JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
filters JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
last_generated_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX export_feeds_company_id_idx ON export_feeds(company_id);
|
||||
CREATE INDEX export_feeds_public_token_idx ON export_feeds(public_token);
|
||||
|
||||
CREATE TABLE feed_tags (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
color TEXT NOT NULL DEFAULT '#888888',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
UNIQUE (company_id, name)
|
||||
);
|
||||
|
||||
CREATE TABLE feed_tag_mappings (
|
||||
feed_id UUID NOT NULL REFERENCES input_feeds(id) ON DELETE CASCADE,
|
||||
tag_id UUID NOT NULL REFERENCES feed_tags(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (feed_id, tag_id)
|
||||
);
|
||||
|
||||
CREATE TABLE schema_extraction_tasks (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
feed_id UUID NOT NULL REFERENCES input_feeds(id) ON DELETE CASCADE,
|
||||
company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
progress INT NOT NULL DEFAULT 0,
|
||||
error TEXT,
|
||||
completed_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX schema_extraction_tasks_feed_id_idx ON schema_extraction_tasks(feed_id);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS schema_extraction_tasks;
|
||||
DROP TABLE IF EXISTS feed_tag_mappings;
|
||||
DROP TABLE IF EXISTS feed_tags;
|
||||
DROP TABLE IF EXISTS export_feeds;
|
||||
ALTER TABLE raw_products DROP CONSTRAINT IF EXISTS raw_products_sync_job_id_fkey;
|
||||
DROP TABLE IF EXISTS feed_sync_jobs;
|
||||
DROP TABLE IF EXISTS feed_mappings;
|
||||
ALTER TABLE processed_products DROP CONSTRAINT IF EXISTS processed_products_feed_id_fkey;
|
||||
ALTER TABLE raw_products DROP CONSTRAINT IF EXISTS raw_products_feed_id_fkey;
|
||||
DROP TABLE IF EXISTS input_feeds;
|
||||
Reference in New Issue
Block a user