check / check (push) Waiting to run
retention_days loses its column default of 30, and Webhook.RetentionDays its default tag, so a 0 is stored as 0. The 365000-day stand-in RetentionForeverDays and the BeforeSave hook that wrote it are gone. The reaper and the "forever" label read 0 as forever, and the forms accept 0 or 1 to MaxFiniteRetentionDays; a blank field still gives 30 on the new webhook form and keeps the stored value on the edit form. A negative value, which the forms refuse, is still read as forever so it cannot put the reaper's cutoff in the future. Model: opus-5-5
90 lines
2.3 KiB
SQL
90 lines
2.3 KiB
SQL
-- Migration 001: the main database's schema. The models in
|
|
-- internal/database must agree with it.
|
|
|
|
CREATE TABLE settings (
|
|
"key" text,
|
|
value text NOT NULL,
|
|
PRIMARY KEY ("key")
|
|
);
|
|
|
|
CREATE TABLE users (
|
|
id uuid,
|
|
created_at datetime,
|
|
updated_at datetime,
|
|
deleted_at datetime,
|
|
username text NOT NULL,
|
|
password text NOT NULL,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT chk_users_username
|
|
CHECK (length(CAST(username AS BLOB)) <= 1024)
|
|
);
|
|
|
|
CREATE INDEX idx_users_deleted_at ON users (deleted_at);
|
|
CREATE UNIQUE INDEX idx_users_username ON users (username);
|
|
|
|
CREATE TABLE api_keys (
|
|
id uuid,
|
|
created_at datetime,
|
|
updated_at datetime,
|
|
deleted_at datetime,
|
|
user_id uuid NOT NULL,
|
|
"key" text NOT NULL,
|
|
description text,
|
|
last_used_at datetime,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_users_api_keys FOREIGN KEY (user_id) REFERENCES users (id)
|
|
);
|
|
|
|
CREATE INDEX idx_api_keys_deleted_at ON api_keys (deleted_at);
|
|
CREATE UNIQUE INDEX idx_api_keys_key ON api_keys ("key");
|
|
|
|
CREATE TABLE webhooks (
|
|
id uuid,
|
|
created_at datetime,
|
|
updated_at datetime,
|
|
deleted_at datetime,
|
|
user_id uuid NOT NULL,
|
|
name text NOT NULL,
|
|
description text,
|
|
retention_days integer,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_users_webhooks FOREIGN KEY (user_id) REFERENCES users (id)
|
|
);
|
|
|
|
CREATE INDEX idx_webhooks_deleted_at ON webhooks (deleted_at);
|
|
|
|
CREATE TABLE entrypoints (
|
|
id uuid,
|
|
created_at datetime,
|
|
updated_at datetime,
|
|
deleted_at datetime,
|
|
webhook_id uuid NOT NULL,
|
|
path text NOT NULL,
|
|
description text,
|
|
active numeric DEFAULT true,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_webhooks_entrypoints
|
|
FOREIGN KEY (webhook_id) REFERENCES webhooks (id)
|
|
);
|
|
|
|
CREATE INDEX idx_entrypoints_deleted_at ON entrypoints (deleted_at);
|
|
CREATE UNIQUE INDEX idx_entrypoints_path ON entrypoints (path);
|
|
|
|
CREATE TABLE targets (
|
|
id uuid,
|
|
created_at datetime,
|
|
updated_at datetime,
|
|
deleted_at datetime,
|
|
webhook_id uuid NOT NULL,
|
|
name text NOT NULL,
|
|
type text NOT NULL,
|
|
active numeric DEFAULT true,
|
|
config text,
|
|
max_retries integer,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_webhooks_targets
|
|
FOREIGN KEY (webhook_id) REFERENCES webhooks (id)
|
|
);
|
|
|
|
CREATE INDEX idx_targets_deleted_at ON targets (deleted_at);
|