Files
geo/server/migrations_ops/20260525103000_create_desktop_client_releases.up.sql
root 5f6e9f11da
Desktop Client Build / Resolve Build Metadata (push) Successful in 19s
Frontend CI / Frontend (push) Successful in 3m20s
Backend CI / Backend (push) Successful in 16m48s
Desktop Client Build / Build Desktop Client (push) Successful in 24m46s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 37s
feat(desktop): add client release updater
2026-05-25 19:23:49 +08:00

65 lines
3.0 KiB
SQL

CREATE TABLE IF NOT EXISTS ops.desktop_client_releases (
id BIGSERIAL PRIMARY KEY,
platform VARCHAR(32) NOT NULL,
arch VARCHAR(32) NOT NULL DEFAULT 'universal',
channel VARCHAR(32) NOT NULL DEFAULT 'stable',
version VARCHAR(64) NOT NULL,
min_supported_version VARCHAR(64),
download_source VARCHAR(16) NOT NULL DEFAULT 'oss',
oss_object_key TEXT,
custom_download_url TEXT,
file_name TEXT,
file_size_bytes BIGINT,
sha256 VARCHAR(64),
updater_download_source VARCHAR(16),
updater_oss_object_key TEXT,
updater_custom_download_url TEXT,
updater_file_name TEXT,
updater_file_size_bytes BIGINT,
updater_sha256 VARCHAR(64),
release_notes TEXT,
force_update BOOLEAN NOT NULL DEFAULT FALSE,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
published_at TIMESTAMPTZ,
created_by BIGINT,
updated_by BIGINT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT ck_desktop_client_release_file_size
CHECK (file_size_bytes IS NULL OR file_size_bytes >= 0),
CONSTRAINT ck_desktop_client_release_sha256
CHECK (sha256 IS NULL OR sha256 ~ '^[0-9a-f]{64}$'),
CONSTRAINT ck_desktop_client_release_updater_file_size
CHECK (updater_file_size_bytes IS NULL OR updater_file_size_bytes >= 0),
CONSTRAINT ck_desktop_client_release_updater_sha256
CHECK (updater_sha256 IS NULL OR updater_sha256 ~ '^[0-9a-f]{64}$'),
CONSTRAINT ck_desktop_client_release_source
CHECK (download_source IN ('oss', 'custom')),
CONSTRAINT ck_desktop_client_release_updater_source
CHECK (updater_download_source IS NULL OR updater_download_source IN ('oss', 'custom')),
CONSTRAINT ck_desktop_client_release_download_target
CHECK (
(download_source = 'oss' AND NULLIF(BTRIM(COALESCE(oss_object_key, '')), '') IS NOT NULL)
OR
(download_source = 'custom' AND NULLIF(BTRIM(COALESCE(custom_download_url, '')), '') IS NOT NULL)
),
CONSTRAINT ck_desktop_client_release_updater_target
CHECK (
updater_download_source IS NULL
OR
(updater_download_source = 'oss' AND NULLIF(BTRIM(COALESCE(updater_oss_object_key, '')), '') IS NOT NULL)
OR
(updater_download_source = 'custom' AND NULLIF(BTRIM(COALESCE(updater_custom_download_url, '')), '') IS NOT NULL)
)
);
CREATE UNIQUE INDEX IF NOT EXISTS uk_desktop_client_releases_target
ON ops.desktop_client_releases(platform, arch, channel);
CREATE INDEX IF NOT EXISTS idx_desktop_client_releases_lookup
ON ops.desktop_client_releases(channel, platform, arch)
WHERE enabled = TRUE;
CREATE INDEX IF NOT EXISTS idx_desktop_client_releases_updated_at
ON ops.desktop_client_releases(updated_at DESC);