Extract API, migrations and portable NAS deployment

This commit is contained in:
tomchukk committed 2026-09-07 19:34:49 +03:00
commit 673255fa4f
57 files changed
+3799

No files matched your search

+67
View File
@@ -0,0 +1,67 @@
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)
);
@@ -0,0 +1,21 @@
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS updated_at VARCHAR(24) NULL;
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS cancelled_at VARCHAR(24) NULL;
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS cancellation_reason VARCHAR(300) NULL;
CREATE TABLE IF NOT EXISTS app_users (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
username VARCHAR(80) CHARACTER SET ascii COLLATE ascii_bin NOT NULL UNIQUE,
display_name VARCHAR(80) NOT NULL,
password_hash VARCHAR(256) NOT NULL,
role VARCHAR(20) NOT NULL DEFAULT 'staff',
active BOOLEAN NOT NULL DEFAULT TRUE,
created_at VARCHAR(24) NOT NULL
);
CREATE TABLE IF NOT EXISTS auth_sessions (
token_hash CHAR(64) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
user_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
expires_at DATETIME(3) NOT NULL,
FOREIGN KEY (user_id) REFERENCES app_users(id),
INDEX sessions_user (user_id),
INDEX sessions_expiry (expires_at)
);
ALTER TABLE sync_operations ADD COLUMN IF NOT EXISTS actor_user_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NULL;
+19
View File
@@ -0,0 +1,19 @@
ALTER TABLE app_users MODIFY COLUMN password_hash VARCHAR(256) NULL;
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS oidc_identity_hash CHAR(64) CHARACTER SET ascii COLLATE ascii_bin NULL;
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS oidc_issuer VARCHAR(512) NULL;
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS oidc_subject VARCHAR(255) NULL;
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS username_display VARCHAR(255) NULL;
CREATE UNIQUE INDEX IF NOT EXISTS users_oidc_identity ON app_users(oidc_identity_hash);
ALTER TABLE auth_sessions ADD COLUMN IF NOT EXISTS auth_provider VARCHAR(10) NOT NULL DEFAULT 'local';
ALTER TABLE auth_sessions ADD COLUMN IF NOT EXISTS encrypted_tokens TEXT NULL;
CREATE TABLE IF NOT EXISTS oidc_settings (
id TINYINT PRIMARY KEY,
encrypted_config TEXT NOT NULL,
updated_by CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
updated_at VARCHAR(24) NOT NULL
);
CREATE TABLE IF NOT EXISTS oidc_transactions (
token_hash CHAR(64) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
encrypted_data TEXT NOT NULL,
expires_at DATETIME(3) NOT NULL
);
@@ -0,0 +1 @@
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS display_name_override VARCHAR(80) NULL;
@@ -0,0 +1,11 @@
CREATE TABLE IF NOT EXISTS directory_settings (
id TINYINT PRIMARY KEY,
config_id CHAR(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
enabled BOOLEAN NOT NULL,
issuer VARCHAR(512) NOT NULL,
encrypted_config MEDIUMTEXT NOT NULL,
updated_by CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
updated_at VARCHAR(24) NOT NULL
);
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS directory_display_name VARCHAR(80) NULL;
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS directory_config_id CHAR(64) CHARACTER SET ascii COLLATE ascii_bin NULL;
@@ -0,0 +1,13 @@
ALTER TABLE customers ADD COLUMN IF NOT EXISTS contact_name VARCHAR(100) NOT NULL DEFAULT '';
ALTER TABLE customers ADD COLUMN IF NOT EXISTS phone VARCHAR(30) NOT NULL DEFAULT '';
ALTER TABLE customers ADD COLUMN IF NOT EXISTS comments VARCHAR(1000) NOT NULL DEFAULT '';
ALTER TABLE customers ADD COLUMN IF NOT EXISTS morning_start CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS morning_end CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS afternoon_start CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS afternoon_end CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS late_night_start CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS late_night_end CHAR(5) NULL;
ALTER TABLE customers ADD COLUMN IF NOT EXISTS updated_at VARCHAR(24) NULL;
ALTER TABLE customer_addresses ADD COLUMN IF NOT EXISTS city VARCHAR(100) NOT NULL DEFAULT '';
ALTER TABLE customer_addresses ADD COLUMN IF NOT EXISTS street VARCHAR(120) NOT NULL DEFAULT '';
ALTER TABLE customer_addresses ADD COLUMN IF NOT EXISTS building_number VARCHAR(20) NOT NULL DEFAULT '';
@@ -0,0 +1,2 @@
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS scheduled_date DATE NULL AFTER address_id;
UPDATE deliveries SET scheduled_date = DATE(LEFT(created_at, 10)) WHERE scheduled_date IS NULL;
@@ -0,0 +1,2 @@
ALTER TABLE app_users ADD COLUMN IF NOT EXISTS oidc_groups_json JSON NULL;
UPDATE app_users SET oidc_groups_json = JSON_ARRAY() WHERE oidc_identity_hash IS NOT NULL AND oidc_groups_json IS NULL;
@@ -0,0 +1,4 @@
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS delivery_slot VARCHAR(20) NULL AFTER scheduled_date;
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS specific_time CHAR(5) NULL AFTER delivery_slot;
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS delivery_window_start CHAR(5) NULL AFTER specific_time;
ALTER TABLE deliveries ADD COLUMN IF NOT EXISTS delivery_window_end CHAR(5) NULL AFTER delivery_window_start;
+5
View File
@@ -0,0 +1,5 @@
[
{ "id": "10000000-0000-4000-8000-000000000001", "code": "delivery", "name": "אספקה", "shipmentUnitHundredths": 100 },
{ "id": "10000000-0000-4000-8000-000000000002", "code": "pickup", "name": "איסוף", "shipmentUnitHundredths": 100 },
{ "id": "10000000-0000-4000-8000-000000000003", "code": "double", "name": "כפולה", "shipmentUnitHundredths": 150 }
]