Files
Qris-Soundbox/migrations/004_soundbox_catalog.sql
2026-06-06 20:58:04 +07:00

67 lines
1.9 KiB
PL/PgSQL

BEGIN;
CREATE TABLE IF NOT EXISTS soundbox_vendors (
id TEXT PRIMARY KEY,
vendor_code TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
country TEXT,
support_contact TEXT,
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive')),
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ NOT NULL
);
CREATE TABLE IF NOT EXISTS soundbox_models (
id TEXT PRIMARY KEY,
vendor_id TEXT NOT NULL REFERENCES soundbox_vendors (id) ON DELETE CASCADE,
model_code TEXT NOT NULL,
name TEXT NOT NULL,
communication_mode TEXT NOT NULL DEFAULT 'mqtt' CHECK (communication_mode IN ('static', 'mqtt', 'api')),
screen_flag BOOLEAN NOT NULL DEFAULT false,
qr_mode TEXT NOT NULL DEFAULT 'static' CHECK (qr_mode IN ('static', 'dynamic_mqtt', 'dynamic_api')),
mqtt_payload_profile TEXT,
capability_template_json JSONB NOT NULL DEFAULT '{}'::jsonb,
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive')),
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ NOT NULL,
UNIQUE (vendor_id, model_code)
);
CREATE INDEX IF NOT EXISTS idx_soundbox_models_vendor ON soundbox_models (vendor_id, status);
INSERT INTO soundbox_vendors (id, vendor_code, name, country, support_contact, status, created_at, updated_at)
VALUES ('vendor_qf', 'QF', 'QF', NULL, NULL, 'active', NOW(), NOW())
ON CONFLICT (vendor_code) DO NOTHING;
INSERT INTO soundbox_models (
id,
vendor_id,
model_code,
name,
communication_mode,
screen_flag,
qr_mode,
mqtt_payload_profile,
capability_template_json,
status,
created_at,
updated_at
)
VALUES (
'model_qf100',
'vendor_qf',
'QF100',
'QF100',
'mqtt',
false,
'static',
'qf100',
'{"device_type":"static_soundbox","screen":false,"qr_mode":"static","mqtt_payload_profile":"qf100","flows":["static_payment_notification"],"features":{"payment_sound":true,"dynamic_qr":false}}'::jsonb,
'active',
NOW(),
NOW()
)
ON CONFLICT (vendor_id, model_code) DO NOTHING;
COMMIT;