Files

68 lines
2.7 KiB
SQL

CREATE TABLE IF NOT EXISTS sync_state (
id TINYINT PRIMARY KEY,
sequence BIGINT UNSIGNED NOT NULL DEFAULT 0,
next_delivery_number INT UNSIGNED NOT NULL DEFAULT 1001
);
INSERT IGNORE INTO sync_state(id) VALUES (1);
CREATE TABLE IF NOT EXISTS customers (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
name VARCHAR(120) NOT NULL,
version INT UNSIGNED NOT NULL DEFAULT 1,
created_at VARCHAR(24) NOT NULL,
deleted_at VARCHAR(24) NULL
);
CREATE TABLE IF NOT EXISTS customer_addresses (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
customer_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
label VARCHAR(80) NOT NULL,
address VARCHAR(300) NOT NULL,
version INT UNSIGNED NOT NULL DEFAULT 1,
created_at VARCHAR(24) NOT NULL,
deleted_at VARCHAR(24) NULL,
UNIQUE KEY address_customer (id, customer_id),
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
CREATE TABLE IF NOT EXISTS delivery_types (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
code VARCHAR(20) NOT NULL UNIQUE,
name VARCHAR(80) NOT NULL,
shipment_unit_hundredths INT UNSIGNED NOT NULL,
version INT UNSIGNED NOT NULL DEFAULT 1,
created_at VARCHAR(24) NOT NULL,
deleted_at VARCHAR(24) NULL
);
CREATE TABLE IF NOT EXISTS deliveries (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
delivery_number INT UNSIGNED NOT NULL UNIQUE,
customer_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
address_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
delivery_type_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
delivery_type_version INT UNSIGNED NOT NULL,
shipment_unit_hundredths INT UNSIGNED NOT NULL,
unit_price_agorot INT UNSIGNED NOT NULL,
total_price_agorot BIGINT UNSIGNED NOT NULL,
notes VARCHAR(500) NOT NULL DEFAULT '',
status VARCHAR(20) NOT NULL DEFAULT 'created',
version INT UNSIGNED NOT NULL DEFAULT 1,
created_at VARCHAR(24) NOT NULL,
deleted_at VARCHAR(24) NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id),
FOREIGN KEY (address_id, customer_id) REFERENCES customer_addresses(id, customer_id),
FOREIGN KEY (delivery_type_id) REFERENCES delivery_types(id)
);
CREATE TABLE IF NOT EXISTS sync_operations (
operation_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
device_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
request_hash CHAR(64) NOT NULL,
result_json JSON NOT NULL,
created_at VARCHAR(24) NOT NULL
);
CREATE TABLE IF NOT EXISTS sync_changes (
sequence BIGINT UNSIGNED PRIMARY KEY,
entity_type VARCHAR(20) NOT NULL,
entity_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
change_json JSON NOT NULL,
INDEX entity_lookup (entity_type, entity_id, sequence)
);