mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
65c7c282f5
Each plugin now has exactly one migration file (00001_initial.sql) containing its complete table schema and seed data, replacing the multi-file approach with split ALTER/INSERT steps. Changes per plugin: - auth: w_auth_sources, w_external_accounts, w_access_tokens + login session seed - user: w_users + system user seed (removed w_access_tokens — belongs to auth) - admin: w_system_configs, w_templates + all 32 config seeds + 2 template seeds (removed w_schedules, w_task_executions — belong to driver plugins) - upload: w_upload_stats + indexes + access_mode + backfill - message_gateway: all w_message_*, w_push_*, w_push_channels, w_push_histories - risk_control/logstore: w_user_access_logs (PG + ClickHouse) - driver_asynq_cron: w_schedules + cleanup seed - driver_asynq_worker: w_task_executions All CREATE TABLE use IF NOT EXISTS, all INSERT use ON CONFLICT DO NOTHING. go:embed patterns remain 'migrations/*.sql' — unchanged.
49 lines
1.7 KiB
SQL
49 lines
1.7 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
CREATE TABLE IF NOT EXISTS w_upload_stats (
|
|
dimension VARCHAR(32) NOT NULL,
|
|
stat_key VARCHAR(64) NOT NULL DEFAULT '',
|
|
file_count BIGINT NOT NULL DEFAULT 0,
|
|
file_size BIGINT NOT NULL DEFAULT 0,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (dimension, stat_key)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_w_uploads_status_created_at ON w_uploads (status, created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_w_uploads_hash_file_size_status ON w_uploads (hash, file_size, status);
|
|
|
|
ALTER TABLE w_uploads ADD COLUMN IF NOT EXISTS access_mode INTEGER NOT NULL DEFAULT 0;
|
|
UPDATE w_uploads SET access_mode = 1 WHERE type = 'avatar';
|
|
|
|
-- Backfill upload stats
|
|
INSERT INTO w_upload_stats (dimension, stat_key, file_count, file_size)
|
|
SELECT 'total', '', COUNT(*), COALESCE(SUM(file_size), 0)
|
|
FROM w_uploads
|
|
WHERE status != 'deleted'
|
|
ON CONFLICT (dimension, stat_key) DO UPDATE SET
|
|
file_count = EXCLUDED.file_count,
|
|
file_size = EXCLUDED.file_size,
|
|
updated_at = CURRENT_TIMESTAMP;
|
|
|
|
INSERT INTO w_upload_stats (dimension, stat_key, file_count, file_size)
|
|
SELECT
|
|
'type',
|
|
COALESCE(NULLIF(type, ''), 'generic'),
|
|
COUNT(*),
|
|
COALESCE(SUM(file_size), 0)
|
|
FROM w_uploads
|
|
WHERE status != 'deleted'
|
|
GROUP BY COALESCE(NULLIF(type, ''), 'generic')
|
|
ON CONFLICT (dimension, stat_key) DO UPDATE SET
|
|
file_count = EXCLUDED.file_count,
|
|
file_size = EXCLUDED.file_size,
|
|
updated_at = CURRENT_TIMESTAMP;
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
DROP TABLE IF EXISTS w_upload_stats;
|
|
DROP INDEX IF EXISTS idx_w_uploads_hash_file_size_status;
|
|
DROP INDEX IF EXISTS idx_w_uploads_status_created_at;
|
|
ALTER TABLE w_uploads DROP COLUMN IF EXISTS access_mode;
|
|
-- +goose StatementEnd |