mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-08-30 06:21:57 -04:00
Initial
This commit is contained in:
@@ -0,0 +1,494 @@
|
||||
-- migrate:up
|
||||
-- 000001_init_schema.up.sql
|
||||
CREATE TABLE IF NOT EXISTS "ads"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"title" varchar(255) NOT NULL DEFAULT '',
|
||||
"type" varchar(255) NOT NULL DEFAULT '',
|
||||
"content" text,
|
||||
"target_url" varchar(512) DEFAULT '',
|
||||
"start_time" TIMESTAMP DEFAULT NULL,
|
||||
"end_time" TIMESTAMP DEFAULT NULL,
|
||||
"status" SMALLINT DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "announcement"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"title" varchar(255) NOT NULL DEFAULT '',
|
||||
"content" text,
|
||||
"show" BOOLEAN NOT NULL DEFAULT false,
|
||||
"pinned" BOOLEAN NOT NULL DEFAULT false,
|
||||
"popup" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "application"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(255) NOT NULL DEFAULT '',
|
||||
"icon" text NOT NULL,
|
||||
"description" text,
|
||||
"subscribe_type" varchar(50) NOT NULL DEFAULT '',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "application_config"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"app_id" bigint NOT NULL DEFAULT '0',
|
||||
"encryption_key" text,
|
||||
"encryption_method" varchar(255) DEFAULT NULL,
|
||||
"domains" text,
|
||||
"startup_picture" text,
|
||||
"startup_picture_skip_time" bigint NOT NULL DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "application_version"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"url" varchar(255) NOT NULL DEFAULT '',
|
||||
"version" varchar(255) NOT NULL DEFAULT '',
|
||||
"platform" varchar(50) NOT NULL DEFAULT '',
|
||||
"is_default" BOOLEAN NOT NULL DEFAULT false,
|
||||
"description" text,
|
||||
"application_id" bigint DEFAULT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "application_version_fk_application_application_versions" ON "application_version" ("application_id");
|
||||
CREATE TABLE IF NOT EXISTS "auth_method"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"method" varchar(255) NOT NULL DEFAULT '',
|
||||
"config" text NOT NULL,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_auth_method" UNIQUE ("method")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "coupon"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(255) NOT NULL DEFAULT '',
|
||||
"code" varchar(255) NOT NULL DEFAULT '',
|
||||
"count" bigint NOT NULL DEFAULT '0',
|
||||
"type" SMALLINT NOT NULL DEFAULT '1',
|
||||
"discount" bigint NOT NULL DEFAULT '0',
|
||||
"start_time" bigint NOT NULL DEFAULT '0',
|
||||
"expire_time" bigint NOT NULL DEFAULT '0',
|
||||
"user_limit" bigint NOT NULL DEFAULT '0',
|
||||
"subscribe" varchar(255) NOT NULL DEFAULT '',
|
||||
"used_count" bigint NOT NULL DEFAULT '0',
|
||||
"enable" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_coupon_code" UNIQUE ("code")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "document"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"title" varchar(255) NOT NULL DEFAULT '',
|
||||
"content" text,
|
||||
"tags" varchar(255) NOT NULL DEFAULT '',
|
||||
"show" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "message_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"type" varchar(50) NOT NULL DEFAULT 'email',
|
||||
"platform" varchar(50) NOT NULL DEFAULT 'smtp',
|
||||
"to" text NOT NULL,
|
||||
"subject" varchar(255) NOT NULL DEFAULT '',
|
||||
"content" text,
|
||||
"status" SMALLINT NOT NULL DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "order"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"parent_id" bigint DEFAULT NULL,
|
||||
"user_id" bigint NOT NULL DEFAULT '0',
|
||||
"order_no" varchar(255) NOT NULL DEFAULT '',
|
||||
"type" SMALLINT NOT NULL DEFAULT '1',
|
||||
"quantity" bigint NOT NULL DEFAULT '1',
|
||||
"price" bigint NOT NULL DEFAULT '0',
|
||||
"amount" bigint NOT NULL DEFAULT '0',
|
||||
"gift_amount" bigint NOT NULL DEFAULT '0',
|
||||
"discount" bigint NOT NULL DEFAULT '0',
|
||||
"coupon" varchar(255) DEFAULT NULL,
|
||||
"coupon_discount" bigint NOT NULL DEFAULT '0',
|
||||
"commission" bigint NOT NULL DEFAULT '0',
|
||||
"payment_id" bigint NOT NULL DEFAULT '-1',
|
||||
"method" varchar(255) NOT NULL DEFAULT '',
|
||||
"fee_amount" bigint NOT NULL DEFAULT '0',
|
||||
"trade_no" varchar(255) DEFAULT NULL,
|
||||
"status" SMALLINT NOT NULL DEFAULT '1',
|
||||
"subscribe_id" bigint NOT NULL DEFAULT '0',
|
||||
"subscribe_token" varchar(255) DEFAULT NULL,
|
||||
"is_new" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_order_order_no" UNIQUE ("order_no")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "payment"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"platform" varchar(100) NOT NULL,
|
||||
"description" text,
|
||||
"icon" varchar(255) DEFAULT '',
|
||||
"domain" varchar(255) DEFAULT '',
|
||||
"config" text NOT NULL,
|
||||
"fee_mode" SMALLINT NOT NULL DEFAULT '0',
|
||||
"fee_percent" bigint DEFAULT '0',
|
||||
"fee_amount" bigint DEFAULT '0',
|
||||
"enable" BOOLEAN NOT NULL DEFAULT false,
|
||||
"token" varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_payment_token" UNIQUE ("token")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "server"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"tags" varchar(128) NOT NULL DEFAULT '',
|
||||
"country" varchar(128) NOT NULL DEFAULT '',
|
||||
"city" varchar(128) NOT NULL DEFAULT '',
|
||||
"latitude" varchar(128) NOT NULL DEFAULT '',
|
||||
"longitude" varchar(128) NOT NULL DEFAULT '',
|
||||
"server_addr" varchar(100) NOT NULL DEFAULT '',
|
||||
"relay_mode" varchar(20) NOT NULL DEFAULT 'none',
|
||||
"relay_node" text,
|
||||
"speed_limit" bigint NOT NULL DEFAULT '0',
|
||||
"traffic_ratio" decimal(4, 2) NOT NULL DEFAULT '0.00',
|
||||
"group_id" bigint DEFAULT NULL,
|
||||
"protocol" varchar(20) NOT NULL DEFAULT '',
|
||||
"config" text,
|
||||
"enable" SMALLINT NOT NULL DEFAULT '1',
|
||||
"sort" bigint NOT NULL DEFAULT '0',
|
||||
"last_reported_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "server_idx_group_id" ON "server" ("group_id");
|
||||
CREATE TABLE IF NOT EXISTS "server_group"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"description" varchar(255) DEFAULT '',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
-- if "sms" not exist, create it
|
||||
CREATE TABLE IF NOT EXISTS "sms"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"content" text,
|
||||
"platform" varchar(64) DEFAULT NULL,
|
||||
"area_code" varchar(64) DEFAULT NULL,
|
||||
"telephone" varchar(64) DEFAULT NULL,
|
||||
"status" SMALLINT DEFAULT '1',
|
||||
"created_at" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "subscribe"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(255) NOT NULL DEFAULT '',
|
||||
"description" text,
|
||||
"unit_price" bigint NOT NULL DEFAULT '0',
|
||||
"unit_time" varchar(255) NOT NULL DEFAULT '',
|
||||
"discount" text,
|
||||
"replacement" bigint NOT NULL DEFAULT '0',
|
||||
"inventory" bigint NOT NULL DEFAULT '0',
|
||||
"traffic" bigint NOT NULL DEFAULT '0',
|
||||
"speed_limit" bigint NOT NULL DEFAULT '0',
|
||||
"device_limit" bigint NOT NULL DEFAULT '0',
|
||||
"quota" bigint NOT NULL DEFAULT '0',
|
||||
"group_id" bigint DEFAULT NULL,
|
||||
"server_group" varchar(255) DEFAULT NULL,
|
||||
"server" varchar(255) DEFAULT NULL,
|
||||
"show" BOOLEAN NOT NULL DEFAULT false,
|
||||
"sell" BOOLEAN NOT NULL DEFAULT false,
|
||||
"sort" bigint NOT NULL DEFAULT '0',
|
||||
"deduction_ratio" bigint DEFAULT '0',
|
||||
"allow_deduction" BOOLEAN DEFAULT true,
|
||||
"reset_cycle" bigint DEFAULT '0',
|
||||
"renewal_reset" BOOLEAN DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "subscribe_group"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(255) NOT NULL DEFAULT '',
|
||||
"description" text,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "subscribe_type"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(50) NOT NULL DEFAULT '',
|
||||
"mark" varchar(255) NOT NULL DEFAULT '',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "system"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"category" varchar(100) NOT NULL DEFAULT '',
|
||||
"key" varchar(100) NOT NULL DEFAULT '',
|
||||
"value" text NOT NULL,
|
||||
"type" varchar(50) NOT NULL DEFAULT '',
|
||||
"desc" text NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_system_key" UNIQUE ("key")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "system_index_key" ON "system" ("key");
|
||||
CREATE TABLE IF NOT EXISTS "ticket"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"title" varchar(255) NOT NULL DEFAULT '',
|
||||
"description" text,
|
||||
"user_id" bigint NOT NULL DEFAULT '0',
|
||||
"status" SMALLINT NOT NULL DEFAULT '1',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "ticket_follow"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"ticket_id" bigint NOT NULL DEFAULT '0',
|
||||
"from" varchar(255) NOT NULL DEFAULT '',
|
||||
"type" SMALLINT NOT NULL DEFAULT '1',
|
||||
"content" text,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "traffic_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"server_id" bigint NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"subscribe_id" bigint NOT NULL,
|
||||
"download" bigint DEFAULT '0',
|
||||
"upload" bigint DEFAULT '0',
|
||||
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "traffic_log_idx_subscribe_id" ON "traffic_log" ("subscribe_id");
|
||||
CREATE INDEX IF NOT EXISTS "traffic_log_idx_server_id" ON "traffic_log" ("server_id");
|
||||
CREATE INDEX IF NOT EXISTS "traffic_log_idx_user_id" ON "traffic_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"password" varchar(100) NOT NULL,
|
||||
"avatar" text,
|
||||
"balance" bigint DEFAULT '0',
|
||||
"telegram" bigint DEFAULT NULL,
|
||||
"refer_code" varchar(20) DEFAULT '',
|
||||
"referer_id" bigint DEFAULT NULL,
|
||||
"commission" bigint DEFAULT '0',
|
||||
"gift_amount" bigint DEFAULT '0',
|
||||
"enable" BOOLEAN NOT NULL DEFAULT true,
|
||||
"is_admin" BOOLEAN NOT NULL DEFAULT false,
|
||||
"valid_email" SMALLINT NOT NULL DEFAULT '0',
|
||||
"enable_email_notify" SMALLINT NOT NULL DEFAULT '0',
|
||||
"enable_telegram_notify" SMALLINT NOT NULL DEFAULT '0',
|
||||
"enable_balance_notify" BOOLEAN NOT NULL DEFAULT false,
|
||||
"enable_login_notify" BOOLEAN NOT NULL DEFAULT false,
|
||||
"enable_subscribe_notify" BOOLEAN NOT NULL DEFAULT false,
|
||||
"enable_trade_notify" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"deleted_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"is_del" BIGINT DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_idx_referer" ON "user" ("referer_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_auth_methods"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"auth_type" varchar(255) NOT NULL,
|
||||
"auth_identifier" varchar(255) NOT NULL,
|
||||
"verified" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "idx_auth_identifier" UNIQUE ("auth_identifier")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_auth_methods_idx_user_id" ON "user_auth_methods" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_balance_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"order_id" bigint DEFAULT NULL,
|
||||
"balance" bigint NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_balance_log_idx_user_id" ON "user_balance_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_commission_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"order_no" varchar(191) DEFAULT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_commission_log_idx_user_id" ON "user_commission_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_device"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"subscribe_id" bigint DEFAULT NULL,
|
||||
"ip" varchar(191) DEFAULT NULL,
|
||||
"identifier" varchar(191) DEFAULT NULL,
|
||||
"user_agent" varchar(64) DEFAULT NULL,
|
||||
"online" BOOLEAN NOT NULL DEFAULT false,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_device_idx_user_id" ON "user_device" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_gift_amount_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"user_subscribe_id" bigint DEFAULT NULL,
|
||||
"order_no" varchar(191) DEFAULT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"balance" bigint NOT NULL,
|
||||
"remark" varchar(255) DEFAULT '',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_gift_amount_log_idx_user_id" ON "user_gift_amount_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_login_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"login_ip" varchar(255) NOT NULL,
|
||||
"user_agent" text NOT NULL,
|
||||
"success" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_login_log_idx_user_id" ON "user_login_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_subscribe"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"order_id" bigint NOT NULL,
|
||||
"subscribe_id" bigint NOT NULL,
|
||||
"start_time" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
"expire_time" TIMESTAMP(3) DEFAULT NULL,
|
||||
"traffic" bigint DEFAULT '0',
|
||||
"download" bigint DEFAULT '0',
|
||||
"upload" bigint DEFAULT '0',
|
||||
"token" varchar(255) DEFAULT '',
|
||||
"uuid" varchar(255) DEFAULT '',
|
||||
"status" SMALLINT DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_user_subscribe_token" UNIQUE ("token"),
|
||||
CONSTRAINT "uni_user_subscribe_uuid" UNIQUE ("uuid")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_idx_user_id" ON "user_subscribe" ("user_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_idx_order_id" ON "user_subscribe" ("order_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_idx_subscribe_id" ON "user_subscribe" ("subscribe_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_idx_token" ON "user_subscribe" ("token");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_idx_uuid" ON "user_subscribe" ("uuid");
|
||||
CREATE TABLE IF NOT EXISTS "user_subscribe_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"user_subscribe_id" bigint NOT NULL,
|
||||
"token" varchar(255) NOT NULL,
|
||||
"ip" varchar(255) NOT NULL,
|
||||
"user_agent" text NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_log_idx_user_id" ON "user_subscribe_log" ("user_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_log_idx_user_subscribe_id" ON "user_subscribe_log" ("user_subscribe_id");
|
||||
CREATE TABLE IF NOT EXISTS "server_rule_group"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"icon" text,
|
||||
"tags" text,
|
||||
"description" varchar(255) DEFAULT '',
|
||||
"enable" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "unique_name" UNIQUE ("name")
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
-- 000001_init_schema.down.sql
|
||||
DROP TABLE IF EXISTS "user_subscribe_log";
|
||||
DROP TABLE IF EXISTS "user_subscribe";
|
||||
DROP TABLE IF EXISTS "user_login_log";
|
||||
DROP TABLE IF EXISTS "user_gift_amount_log";
|
||||
DROP TABLE IF EXISTS "user_device";
|
||||
DROP TABLE IF EXISTS "user_commission_log";
|
||||
DROP TABLE IF EXISTS "user_balance_log";
|
||||
DROP TABLE IF EXISTS "user_auth_methods";
|
||||
DROP TABLE IF EXISTS "user";
|
||||
DROP TABLE IF EXISTS "traffic_log";
|
||||
DROP TABLE IF EXISTS "ticket_follow";
|
||||
DROP TABLE IF EXISTS "ticket";
|
||||
DROP TABLE IF EXISTS "system";
|
||||
DROP TABLE IF EXISTS "subscribe_type";
|
||||
DROP TABLE IF EXISTS "subscribe_group";
|
||||
DROP TABLE IF EXISTS "subscribe";
|
||||
DROP TABLE IF EXISTS "sms";
|
||||
DROP TABLE IF EXISTS "server_rule_group";
|
||||
DROP TABLE IF EXISTS "server_group";
|
||||
DROP TABLE IF EXISTS "server";
|
||||
DROP TABLE IF EXISTS "payment";
|
||||
DROP TABLE IF EXISTS "order";
|
||||
DROP TABLE IF EXISTS "message_log";
|
||||
DROP TABLE IF EXISTS "document";
|
||||
DROP TABLE IF EXISTS "coupon";
|
||||
DROP TABLE IF EXISTS "auth_method";
|
||||
DROP TABLE IF EXISTS "application_version";
|
||||
DROP TABLE IF EXISTS "application_config";
|
||||
DROP TABLE IF EXISTS "application";
|
||||
DROP TABLE IF EXISTS "announcement";
|
||||
DROP TABLE IF EXISTS "ads";
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
-- migrate:up
|
||||
-- 000002_init_data.up.sql
|
||||
-- auth_method
|
||||
INSERT INTO "auth_method" ("id", "method", "config", "enabled", "created_at", "updated_at")
|
||||
VALUES
|
||||
(1, 'email', '{"platform":"smtp","platform_config":{"host":"","port":0,"user":"","pass":"","from":"","ssl":false},"enable_verify":false,"enable_notify":false,"enable_domain_suffix":false,"domain_suffix_list":"","verify_email_template":"","expiration_email_template":"","maintenance_email_template":"","traffic_exceed_email_template":""}', true, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(2, 'mobile', '{"platform":"AlibabaCloud","platform_config":{"access":"","secret":"","sign_name":"","endpoint":"","template_code":""},"enable_whitelist":false,"whitelist":[]}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(3, 'apple', '{"team_id":"","key_id":"","client_id":"","client_secret":"","redirect_url":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(4, 'google', '{"client_id":"","client_secret":"","redirect_url":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(5, 'github', '{"client_id":"","client_secret":"","redirect_url":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(6, 'facebook', '{"client_id":"","client_secret":"","redirect_url":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(7, 'telegram', '{"bot_token":"","enable_notify":false,"webhook_domain":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642'),
|
||||
(8, 'device', '{"show_ads":false,"only_real_device":false,"enable_security":false,"security_secret":""}', false, '2025-04-22 14:25:16.642', '2025-04-22 14:25:16.642');
|
||||
-- payment
|
||||
INSERT INTO "payment" ("id", "name", "platform", "description", "icon", "domain", "config", "fee_mode",
|
||||
"fee_percent", "fee_amount", "enable", "token")
|
||||
VALUES
|
||||
(-1, 'Balance', 'balance', '', '', '', '', 0, 0, 0, true, '');
|
||||
-- subscribe_type
|
||||
INSERT INTO "subscribe_type" ("id", "name", "mark", "created_at", "updated_at")
|
||||
VALUES (1, 'Clash', 'Clash', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(2, 'Hiddify', 'Hiddify', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(3, 'Loon', 'Loon', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(4, 'NekoBox', 'NekoBox', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(5, 'NekoRay', 'NekoRay', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(6, 'Netch', 'Netch', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(7, 'Quantumult', 'Quantumult', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(8, 'Shadowrocket', 'Shadowrocket', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(9, 'SingBox', ' SingBox', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(10, 'Surfboard', 'Surfboard', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(11, 'Surge', 'Surge', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(12, 'V2box', 'V2box', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(13, 'V2rayN', 'V2rayN', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648'),
|
||||
(14, 'V2rayNg', 'V2rayNg', '2025-04-22 14:25:16.648', '2025-04-22 14:25:16.648');
|
||||
-- system
|
||||
INSERT INTO "system" ("id", "category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
VALUES (1, 'site', 'SiteLogo', '/favicon.svg', 'string', 'Site Logo', '2025-04-22 14:25:16.637',
|
||||
'2025-04-22 14:25:16.637'),
|
||||
(2, 'site', 'SiteName', 'Perfect Panel', 'string', 'Site Name', '2025-04-22 14:25:16.637',
|
||||
'2025-04-22 14:25:16.637'),
|
||||
(3, 'site', 'SiteDesc',
|
||||
'PPanel is a pure, professional, and perfect open-source proxy panel tool, designed to be your ideal choice for learning and practical use.',
|
||||
'string', 'Site Description', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
(4, 'site', 'Host', '', 'string', 'Site Host', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
(5, 'site', 'Keywords', 'Perfect Panel,PPanel', 'string', 'Site Keywords', '2025-04-22 14:25:16.637',
|
||||
'2025-04-22 14:25:16.637'),
|
||||
(6, 'site', 'CustomHTML', '', 'string', 'Custom HTML', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
(7, 'tos', 'TosContent', 'Welcome to use Perfect Panel', 'string', 'Terms of Service', '2025-04-22 14:25:16.637',
|
||||
'2025-04-22 14:25:16.637'),
|
||||
(8, 'tos', 'PrivacyPolicy', '', 'string', 'PrivacyPolicy', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
(9, 'ad', 'WebAD', 'false', 'bool', 'Display ad on the web', '2025-04-22 14:25:16.637',
|
||||
'2025-04-22 14:25:16.637'),
|
||||
(10, 'subscribe', 'SingleModel', 'false', 'bool', '是否单订阅模式', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(11, 'subscribe', 'SubscribePath', '/api/subscribe', 'string', '订阅路径', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(12, 'subscribe', 'SubscribeDomain', '', 'string', '订阅域名', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(13, 'subscribe', 'PanDomain', 'false', 'bool', '是否使用泛域名', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(14, 'verify', 'TurnstileSiteKey', '', 'string', 'TurnstileSiteKey', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(15, 'verify', 'TurnstileSecret', '', 'string', 'TurnstileSecret', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(16, 'verify', 'EnableLoginVerify', 'false', 'bool', 'is enable login verify', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(17, 'verify', 'EnableRegisterVerify', 'false', 'bool', 'is enable register verify', '2025-04-22 14:25:16.639',
|
||||
'2025-04-22 14:25:16.639'),
|
||||
(18, 'verify', 'EnableResetPasswordVerify', 'false', 'bool', 'is enable reset password verify',
|
||||
'2025-04-22 14:25:16.639', '2025-04-22 14:25:16.639'),
|
||||
(19, 'server', 'NodeSecret', '12345678', 'string', 'node secret', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(20, 'server', 'NodePullInterval', '10', 'int', 'node pull interval', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(21, 'server', 'NodePushInterval', '60', 'int', 'node push interval', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(22, 'server', 'NodeMultiplierConfig', '[]', 'string', 'node multiplier config', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(23, 'invite', 'ForcedInvite', 'false', 'bool', 'Forced invite', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(24, 'invite', 'ReferralPercentage', '20', 'int', 'Referral percentage', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(25, 'invite', 'OnlyFirstPurchase', 'false', 'bool', 'Only first purchase', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(26, 'register', 'StopRegister', 'false', 'bool', 'is stop register', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(27, 'register', 'EnableTrial', 'false', 'bool', 'is enable trial', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(28, 'register', 'TrialSubscribe', '', 'int', 'Trial subscription', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(29, 'register', 'TrialTime', '24', 'int', 'Trial time', '2025-04-22 14:25:16.640', '2025-04-22 14:25:16.640'),
|
||||
(30, 'register', 'TrialTimeUnit', 'Hour', 'string', 'Trial time unit', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(31, 'register', 'EnableIpRegisterLimit', 'false', 'bool', 'is enable IP register limit',
|
||||
'2025-04-22 14:25:16.640', '2025-04-22 14:25:16.640'),
|
||||
(32, 'register', 'IpRegisterLimit', '3', 'int', 'IP Register Limit', '2025-04-22 14:25:16.640',
|
||||
'2025-04-22 14:25:16.640'),
|
||||
(33, 'register', 'IpRegisterLimitDuration', '64', 'int', 'IP Register Limit Duration (minutes)',
|
||||
'2025-04-22 14:25:16.640', '2025-04-22 14:25:16.640'),
|
||||
(34, 'currency', 'Currency', 'USD', 'string', 'Currency', '2025-04-22 14:25:16.641', '2025-04-22 14:25:16.641'),
|
||||
(35, 'currency', 'CurrencySymbol', '$', 'string', 'Currency Symbol', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(36, 'currency', 'CurrencyUnit', 'USD', 'string', 'Currency Unit', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(37, 'currency', 'AccessKey', '', 'string', 'Exchangerate Access Key', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(38, 'verify_code', 'VerifyCodeExpireTime', '300', 'int', 'Verify code expire time', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(39, 'verify_code', 'VerifyCodeLimit', '15', 'int', 'limits of verify code', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(40, 'verify_code', 'VerifyCodeInterval', '60', 'int', 'Interval of verify code', '2025-04-22 14:25:16.641',
|
||||
'2025-04-22 14:25:16.641'),
|
||||
(41, 'system', 'Version', '0.2.0(02002)', 'string', 'System Version', '2025-04-22 14:25:16.642',
|
||||
'2025-04-22 14:25:16.642');
|
||||
SELECT setval(pg_get_serial_sequence('"auth_method"', 'id'), COALESCE((SELECT MAX("id") FROM "auth_method"), 1), true);
|
||||
SELECT setval(pg_get_serial_sequence('"subscribe_type"', 'id'), COALESCE((SELECT MAX("id") FROM "subscribe_type"), 1), true);
|
||||
SELECT setval(pg_get_serial_sequence('"system"', 'id'), COALESCE((SELECT MAX("id") FROM "system"), 1), true);
|
||||
|
||||
-- migrate:down
|
||||
-- 000002_init_data.down.sql
|
||||
DELETE
|
||||
FROM "auth_method"
|
||||
WHERE "id" IN (1, 2, 3, 4, 5, 6, 7, 8);
|
||||
DELETE
|
||||
FROM "payment"
|
||||
WHERE "id" = -1;
|
||||
DELETE
|
||||
FROM "subscribe_type"
|
||||
WHERE "id" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
|
||||
DELETE
|
||||
FROM "system"
|
||||
WHERE "id" IN
|
||||
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
||||
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41);
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
-- migrate:up
|
||||
-- PostgreSQL version of payment/order compatibility migration.
|
||||
ALTER TABLE "order" ADD COLUMN IF NOT EXISTS "payment_id" BIGINT NOT NULL DEFAULT -1;
|
||||
ALTER TABLE "payment" ADD COLUMN IF NOT EXISTS "platform" VARCHAR(100) NOT NULL DEFAULT '';
|
||||
ALTER TABLE "payment" DROP COLUMN IF EXISTS "mark";
|
||||
ALTER TABLE "payment" ADD COLUMN IF NOT EXISTS "description" TEXT;
|
||||
ALTER TABLE "payment" ADD COLUMN IF NOT EXISTS "token" VARCHAR(255) DEFAULT NULL;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "order" DROP COLUMN IF EXISTS "payment_id";
|
||||
ALTER TABLE "payment" DROP COLUMN IF EXISTS "platform";
|
||||
ALTER TABLE "payment" DROP COLUMN IF EXISTS "description";
|
||||
ALTER TABLE "payment" DROP COLUMN IF EXISTS "token";
|
||||
ALTER TABLE "payment" ADD COLUMN IF NOT EXISTS "mark" VARCHAR(255) DEFAULT NULL;
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
-- migrate:up
|
||||
-- migrations/02003_rebuild_rule.up.sql
|
||||
-- Purpose: rebuilding server rule table
|
||||
-- Author: PPanel Team, 2025-04-21
|
||||
|
||||
DROP TABLE IF EXISTS "server_rule_group";
|
||||
CREATE TABLE "server_rule_group"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" VARCHAR(64) NOT NULL DEFAULT '',
|
||||
"icon" VARCHAR(255),
|
||||
"tags" TEXT,
|
||||
"rules" TEXT,
|
||||
"enable" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3),
|
||||
"updated_at" TIMESTAMP(3),
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_server_rule_group_name" UNIQUE ("name")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "server_rule_group_idx_enable" ON "server_rule_group" ("enable");
|
||||
|
||||
-- migrate:down
|
||||
-- migrations/02003_rebuild_rule.up.sql
|
||||
-- Purpose: Back rebuilding server rule table
|
||||
-- Author: PPanel Team, 2025-04-21
|
||||
DROP TABLE IF EXISTS server_rule_group;
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
-- migrate:up
|
||||
CREATE TABLE IF NOT EXISTS "user_device_online_record"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
"user_id" BIGINT NOT NULL,
|
||||
"identifier" VARCHAR(255) NOT NULL,
|
||||
"online_time" TIMESTAMP,
|
||||
"offline_time" TIMESTAMP,
|
||||
"online_seconds" BIGINT,
|
||||
"duration_days" BIGINT,
|
||||
"created_at" TIMESTAMP
|
||||
);
|
||||
|
||||
ALTER TABLE "user_subscribe" ADD COLUMN IF NOT EXISTS "finished_at" TIMESTAMP NULL;
|
||||
ALTER TABLE "application_config" ADD COLUMN IF NOT EXISTS "invitation_link" TEXT NULL DEFAULT NULL;
|
||||
ALTER TABLE "application_config" ADD COLUMN IF NOT EXISTS "kr_website_id" VARCHAR(255) NULL DEFAULT NULL;
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "user_device_online_record";
|
||||
ALTER TABLE "user_subscribe" DROP COLUMN IF EXISTS "finished_at";
|
||||
ALTER TABLE "application_config" DROP COLUMN IF EXISTS "invitation_link";
|
||||
ALTER TABLE "application_config" DROP COLUMN IF EXISTS "kr_website_id";
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
-- migrate:up
|
||||
-- migrations/02008_create_user_reset_subscribe_log.up.sql
|
||||
-- Purpose: Create user_reset_subscribe_log table
|
||||
-- Author: PPanel Team, 2025-04-22
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "user_reset_subscribe_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,
|
||||
"user_id" BIGINT NOT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"order_no" VARCHAR(255) DEFAULT NULL,
|
||||
"user_subscribe_id" BIGINT NOT NULL,
|
||||
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_reset_subscribe_log_idx_user_id" ON "user_reset_subscribe_log" ("user_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_reset_subscribe_log_idx_user_subscribe_id" ON "user_reset_subscribe_log" ("user_subscribe_id");
|
||||
|
||||
-- migrate:down
|
||||
-- migrations/02008_create_user_reset_subscribe_log.down.sql
|
||||
-- Purpose: Drop user_reset_subscribe_log table
|
||||
-- Author: PPanel Team, 2025-04-22
|
||||
|
||||
DROP TABLE IF EXISTS "user_reset_subscribe_log";
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "server_rule_group"
|
||||
ADD COLUMN "default" BOOLEAN NOT NULL DEFAULT false,
|
||||
ADD COLUMN "type" VARCHAR(100) NOT NULL DEFAULT '';
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "server_rule_group"
|
||||
DROP COLUMN "default",
|
||||
DROP COLUMN "type";
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "email_task";
|
||||
CREATE TABLE "email_task" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"subject" varchar(255) NOT NULL,
|
||||
"content" text NOT NULL,
|
||||
"recipient" text NOT NULL,
|
||||
"scope" varchar(50) NOT NULL,
|
||||
"register_start_time" TIMESTAMP(3) DEFAULT NULL,
|
||||
"register_end_time" TIMESTAMP(3) DEFAULT NULL,
|
||||
"additional" text,
|
||||
"scheduled" TIMESTAMP(3) NOT NULL,
|
||||
"interval" SMALLINT NOT NULL,
|
||||
"limit" BIGINT NOT NULL,
|
||||
"status" SMALLINT NOT NULL,
|
||||
"errors" text NOT NULL,
|
||||
"total" BIGINT NOT NULL DEFAULT '0',
|
||||
"current" BIGINT NOT NULL DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "email_task";
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
||||
-- migrate:up
|
||||
INSERT INTO "system" ("id", "category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
VALUES
|
||||
(42, 'subscribe', 'UserAgentLimit', 'false', 'bool', 'User Agent Limit', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
(43, 'subscribe', 'UserAgentList', '', 'string', 'User Agent List', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637') ON CONFLICT DO NOTHING;
|
||||
SELECT setval(pg_get_serial_sequence('"system"', 'id'), COALESCE((SELECT MAX("id") FROM "system"), 1), true);
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "application";
|
||||
DROP TABLE IF EXISTS "application_version";
|
||||
DROP TABLE IF EXISTS "application_config";
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "user_balance_log";
|
||||
DROP TABLE IF EXISTS "user_commission_log";
|
||||
DROP TABLE IF EXISTS "user_gift_amount_log";
|
||||
DROP TABLE IF EXISTS "user_login_log";
|
||||
DROP TABLE IF EXISTS "user_reset_subscribe_log";
|
||||
DROP TABLE IF EXISTS "user_subscribe_log";
|
||||
DROP TABLE IF EXISTS "message_log";
|
||||
DROP TABLE IF EXISTS "system_logs";
|
||||
CREATE TABLE "system_logs" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"type" SMALLINT NOT NULL DEFAULT '0',
|
||||
"date" varchar(20) DEFAULT NULL,
|
||||
"object_id" bigint NOT NULL DEFAULT '0',
|
||||
"content" text NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "system_logs_idx_type" ON "system_logs" ("type");
|
||||
CREATE INDEX IF NOT EXISTS "system_logs_idx_object_id" ON "system_logs" ("object_id");
|
||||
|
||||
-- migrate:down
|
||||
CREATE TABLE IF NOT EXISTS "user_balance_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"order_id" bigint DEFAULT NULL,
|
||||
"balance" bigint NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_balance_log_idx_user_id" ON "user_balance_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_commission_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"order_no" varchar(191) DEFAULT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_commission_log_idx_user_id" ON "user_commission_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_gift_amount_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"user_subscribe_id" bigint DEFAULT NULL,
|
||||
"order_no" varchar(191) DEFAULT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"amount" bigint NOT NULL,
|
||||
"balance" bigint NOT NULL,
|
||||
"remark" varchar(255) DEFAULT '',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_gift_amount_log_idx_user_id" ON "user_gift_amount_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_login_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"login_ip" varchar(255) NOT NULL,
|
||||
"user_agent" text NOT NULL,
|
||||
"success" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_login_log_idx_user_id" ON "user_login_log" ("user_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_reset_subscribe_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,
|
||||
"user_id" BIGINT NOT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"order_no" VARCHAR(255) DEFAULT NULL,
|
||||
"user_subscribe_id" BIGINT NOT NULL,
|
||||
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_reset_subscribe_log_idx_user_id" ON "user_reset_subscribe_log" ("user_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_reset_subscribe_log_idx_user_subscribe_id" ON "user_reset_subscribe_log" ("user_subscribe_id");
|
||||
CREATE TABLE IF NOT EXISTS "user_subscribe_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" bigint NOT NULL,
|
||||
"user_subscribe_id" bigint NOT NULL,
|
||||
"token" varchar(255) NOT NULL,
|
||||
"ip" varchar(255) NOT NULL,
|
||||
"user_agent" text NOT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_log_idx_user_id" ON "user_subscribe_log" ("user_id");
|
||||
CREATE INDEX IF NOT EXISTS "user_subscribe_log_idx_user_subscribe_id" ON "user_subscribe_log" ("user_subscribe_id");
|
||||
CREATE TABLE IF NOT EXISTS "message_log"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"type" varchar(50) NOT NULL DEFAULT 'email',
|
||||
"platform" varchar(50) NOT NULL DEFAULT 'smtp',
|
||||
"to" text NOT NULL,
|
||||
"subject" varchar(255) NOT NULL DEFAULT '',
|
||||
"content" text,
|
||||
"status" SMALLINT NOT NULL DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
DROP TABLE IF EXISTS "system_logs";
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
-- migrate:up
|
||||
CREATE TABLE IF NOT EXISTS "servers" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"country" varchar(128) NOT NULL DEFAULT '',
|
||||
"city" varchar(128) NOT NULL DEFAULT '',
|
||||
"ratio" decimal(4,2) NOT NULL DEFAULT '0.00',
|
||||
"address" varchar(100) NOT NULL DEFAULT '',
|
||||
"sort" bigint NOT NULL DEFAULT '0',
|
||||
"protocols" text,
|
||||
"last_reported_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS "nodes" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"tags" varchar(255) NOT NULL DEFAULT '',
|
||||
"port" INTEGER NOT NULL DEFAULT '0',
|
||||
"address" varchar(255) NOT NULL DEFAULT '',
|
||||
"server_id" bigint NOT NULL DEFAULT '0',
|
||||
"protocol" varchar(100) NOT NULL DEFAULT '',
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "nodes";
|
||||
DROP TABLE IF EXISTS "servers";
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "subscribe"
|
||||
ADD COLUMN "nodes" VARCHAR(255) NOT NULL DEFAULT '' ,
|
||||
ADD COLUMN "node_tags" VARCHAR(255) NOT NULL DEFAULT '' ,
|
||||
DROP COLUMN "server",
|
||||
DROP COLUMN "server_group";
|
||||
DROP TABLE IF EXISTS "server_rule_group";
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "subscribe"
|
||||
DROP COLUMN "nodes",
|
||||
DROP COLUMN "node_tags",
|
||||
ADD COLUMN "server" VARCHAR(255) NOT NULL DEFAULT '' ,
|
||||
ADD COLUMN "server_group" VARCHAR(255) NOT NULL DEFAULT '';
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
VALUES
|
||||
('log', 'AutoClear', 'true', 'bool', 'Auto Clear Log', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637'),
|
||||
('log', 'ClearDays', '7', 'int', 'Clear Days', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637') ON CONFLICT DO NOTHING;
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "user"
|
||||
ADD COLUMN "referral_percentage" SMALLINT NOT NULL DEFAULT 0,
|
||||
ADD COLUMN "only_first_purchase" BOOLEAN NOT NULL DEFAULT true;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "user"
|
||||
DROP COLUMN "referral_percentage",
|
||||
DROP COLUMN "only_first_purchase";
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "nodes"
|
||||
ADD COLUMN "sort" INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "nodes"
|
||||
DROP COLUMN "sort";
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
-- migrate:up
|
||||
CREATE INDEX idx_traffic_log_time_user_sub ON traffic_log (timestamp, user_id, subscribe_id);
|
||||
|
||||
-- migrate:down
|
||||
DROP INDEX IF EXISTS "idx_traffic_log_time_user_sub";
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "subscribe_type";
|
||||
DROP TABLE IF EXISTS "sms";
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "subscribe_type";
|
||||
DROP TABLE IF EXISTS "sms";
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "subscribe"
|
||||
DROP COLUMN "group_id",
|
||||
ADD COLUMN "language" VARCHAR(255) NOT NULL DEFAULT '';
|
||||
DROP TABLE IF EXISTS "subscribe_group";
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "email_task";
|
||||
CREATE TABLE "task" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"type" SMALLINT NOT NULL,
|
||||
"scope" text,
|
||||
"content" text,
|
||||
"status" SMALLINT NOT NULL DEFAULT '0',
|
||||
"errors" text,
|
||||
"total" BIGINT NOT NULL DEFAULT '0',
|
||||
"current" BIGINT NOT NULL DEFAULT '0',
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- migrate:up
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
VALUES ('server', 'TrafficReportThreshold', '0', 'int', 'Traffic report threshold', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637'),
|
||||
('server', 'IPStrategy', '', 'string', 'IP Strategy', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637'),
|
||||
('server', 'DNS', '', 'string', 'DNS', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637'),
|
||||
('server', 'Block', '', 'string', 'Block', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637'),
|
||||
('server', 'Outbound', '', 'string', 'Proxy Outbound', '2025-04-22 14:25:16.637','2025-04-22 14:25:16.637') ON CONFLICT DO NOTHING;
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "ads" ADD COLUMN IF NOT EXISTS "description" VARCHAR(255) DEFAULT '';
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "user" ADD COLUMN IF NOT EXISTS "algo" VARCHAR(20) NOT NULL DEFAULT 'default';
|
||||
ALTER TABLE "user" ADD COLUMN IF NOT EXISTS "salt" VARCHAR(20) NOT NULL DEFAULT 'default';
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "user" DROP COLUMN IF EXISTS "algo";
|
||||
ALTER TABLE "user" DROP COLUMN IF EXISTS "salt";
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
-- migrate:up
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
SELECT 'site', 'CustomData', '{
|
||||
"kr_website_id": ""
|
||||
}', 'string', 'Custom Data', '2025-04-22 14:25:16.637', '2025-10-14 15:47:19.187'
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM "system" WHERE "category" = 'site' AND "key" = 'CustomData'
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
SELECT 'site', 'CustomData', '{
|
||||
"kr_website_id": ""
|
||||
}', 'string', 'Custom Data', '2025-04-22 14:25:16.637', '2025-10-14 15:47:19.187'
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM "system" WHERE "category" = 'site' AND "key" = 'CustomData'
|
||||
);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
-- migrate:up
|
||||
CREATE INDEX IF NOT EXISTS "idx_timestamp" ON "traffic_log" ("timestamp");
|
||||
|
||||
-- migrate:down
|
||||
DROP INDEX IF EXISTS "idx_timestamp";
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "user_subscribe"
|
||||
ADD COLUMN "note" VARCHAR(500) NOT NULL DEFAULT '';
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "user_subscribe"
|
||||
DROP COLUMN "note";
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "user"
|
||||
ADD COLUMN "rules" TEXT NULL;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "user"
|
||||
DROP COLUMN IF EXISTS "rules";
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
-- migrate:up
|
||||
CREATE TABLE IF NOT EXISTS "withdrawals" (
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"user_id" BIGINT NOT NULL,
|
||||
"amount" BIGINT NOT NULL,
|
||||
"content" TEXT,
|
||||
"status" SMALLINT NOT NULL DEFAULT 0,
|
||||
"reason" VARCHAR(500) NOT NULL DEFAULT '',
|
||||
"created_at" TIMESTAMP NOT NULL,
|
||||
"updated_at" TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "withdrawals_idx_user_id" ON "withdrawals" ("user_id");
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
VALUES
|
||||
('invite', 'WithdrawalMethod', '', 'string', 'withdrawal method', '2025-04-22 14:25:16.637', '2025-04-22 14:25:16.637') ON CONFLICT DO NOTHING;
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "withdrawals";
|
||||
DELETE FROM "system"
|
||||
WHERE "category" = 'invite'
|
||||
AND "key" = 'WithdrawalMethod';
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "server";
|
||||
|
||||
-- migrate:down
|
||||
CREATE TABLE IF NOT EXISTS "server"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"name" varchar(100) NOT NULL DEFAULT '',
|
||||
"tags" varchar(128) NOT NULL DEFAULT '',
|
||||
"country" varchar(128) NOT NULL DEFAULT '',
|
||||
"city" varchar(128) NOT NULL DEFAULT '',
|
||||
"latitude" varchar(128) NOT NULL DEFAULT '',
|
||||
"longitude" varchar(128) NOT NULL DEFAULT '',
|
||||
"server_addr" varchar(100) NOT NULL DEFAULT '',
|
||||
"relay_mode" varchar(20) NOT NULL DEFAULT 'none',
|
||||
"relay_node" text,
|
||||
"speed_limit" bigint NOT NULL DEFAULT '0',
|
||||
"traffic_ratio" decimal(4, 2) NOT NULL DEFAULT '0.00',
|
||||
"group_id" bigint DEFAULT NULL,
|
||||
"protocol" varchar(20) NOT NULL DEFAULT '',
|
||||
"config" text,
|
||||
"enable" SMALLINT NOT NULL DEFAULT '1',
|
||||
"sort" bigint NOT NULL DEFAULT '0',
|
||||
"last_reported_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS "server_idx_group_id" ON "server" ("group_id");
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "subscribe"
|
||||
ADD COLUMN "show_original_price" BOOLEAN NOT NULL DEFAULT false;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "subscribe"
|
||||
DROP COLUMN "show_original_price";
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
-- migrate:up
|
||||
DROP TABLE IF EXISTS "server_group";
|
||||
|
||||
-- migrate:down
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
-- migrate:up
|
||||
-- Update the "subscribe" table to set "inventory" to -1 where it is currently 0
|
||||
UPDATE "subscribe"
|
||||
SET "inventory" = -1
|
||||
WHERE "inventory" = 0;
|
||||
|
||||
-- migrate:down
|
||||
-- This migration script reverts the inventory values in the 'subscribe' table
|
||||
UPDATE "subscribe"
|
||||
SET "inventory" = 0
|
||||
WHERE "inventory" = -1;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
-- migrate:up
|
||||
CREATE INDEX idx_type_date ON system_logs (type, date);
|
||||
|
||||
-- migrate:down
|
||||
DROP INDEX IF EXISTS "idx_type_date";
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
-- migrate:up
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_order_order_no_pattern" ON "order" ("order_no" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_order_trade_no_pattern" ON "order" ("trade_no" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_order_coupon_pattern" ON "order" ("coupon" text_pattern_ops);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_user_refer_code_pattern" ON "user" ("refer_code" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_user_auth_identifier_pattern" ON "user_auth_methods" ("auth_identifier" text_pattern_ops);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_coupon_name_pattern" ON "coupon" ("name" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_coupon_code_pattern" ON "coupon" ("code" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_payment_name_pattern" ON "payment" ("name" text_pattern_ops);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_servers_name_pattern" ON "servers" ("name" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_servers_address_pattern" ON "servers" ("address" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_nodes_name_pattern" ON "nodes" ("name" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_nodes_address_pattern" ON "nodes" ("address" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_nodes_tags_pattern" ON "nodes" ("tags" text_pattern_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_nodes_port" ON "nodes" ("port");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_ads_title_trgm" ON "ads" USING GIN ("title" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_ads_content_trgm" ON "ads" USING GIN ("content" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_announcement_title_trgm" ON "announcement" USING GIN ("title" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_announcement_content_trgm" ON "announcement" USING GIN ("content" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_document_title_trgm" ON "document" USING GIN ("title" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_document_content_trgm" ON "document" USING GIN ("content" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_subscribe_name_trgm" ON "subscribe" USING GIN ("name" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_subscribe_description_trgm" ON "subscribe" USING GIN ("description" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_ticket_title_trgm" ON "ticket" USING GIN ("title" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_ticket_description_trgm" ON "ticket" USING GIN ("description" gin_trgm_ops);
|
||||
CREATE INDEX IF NOT EXISTS "idx_system_logs_content_trgm" ON "system_logs" USING GIN ("content" gin_trgm_ops);
|
||||
|
||||
-- migrate:down
|
||||
DROP INDEX IF EXISTS "idx_system_logs_content_trgm";
|
||||
DROP INDEX IF EXISTS "idx_ticket_description_trgm";
|
||||
DROP INDEX IF EXISTS "idx_ticket_title_trgm";
|
||||
DROP INDEX IF EXISTS "idx_subscribe_description_trgm";
|
||||
DROP INDEX IF EXISTS "idx_subscribe_name_trgm";
|
||||
DROP INDEX IF EXISTS "idx_document_content_trgm";
|
||||
DROP INDEX IF EXISTS "idx_document_title_trgm";
|
||||
DROP INDEX IF EXISTS "idx_announcement_content_trgm";
|
||||
DROP INDEX IF EXISTS "idx_announcement_title_trgm";
|
||||
DROP INDEX IF EXISTS "idx_ads_content_trgm";
|
||||
DROP INDEX IF EXISTS "idx_ads_title_trgm";
|
||||
|
||||
DROP INDEX IF EXISTS "idx_nodes_port";
|
||||
DROP INDEX IF EXISTS "idx_nodes_tags_pattern";
|
||||
DROP INDEX IF EXISTS "idx_nodes_address_pattern";
|
||||
DROP INDEX IF EXISTS "idx_nodes_name_pattern";
|
||||
DROP INDEX IF EXISTS "idx_servers_address_pattern";
|
||||
DROP INDEX IF EXISTS "idx_servers_name_pattern";
|
||||
|
||||
DROP INDEX IF EXISTS "idx_payment_name_pattern";
|
||||
DROP INDEX IF EXISTS "idx_coupon_code_pattern";
|
||||
DROP INDEX IF EXISTS "idx_coupon_name_pattern";
|
||||
|
||||
DROP INDEX IF EXISTS "idx_user_auth_identifier_pattern";
|
||||
DROP INDEX IF EXISTS "idx_user_refer_code_pattern";
|
||||
|
||||
DROP INDEX IF EXISTS "idx_order_coupon_pattern";
|
||||
DROP INDEX IF EXISTS "idx_order_trade_no_pattern";
|
||||
DROP INDEX IF EXISTS "idx_order_order_no_pattern";
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
-- migrate:up
|
||||
CREATE TABLE IF NOT EXISTS "server_config_overrides"
|
||||
(
|
||||
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
|
||||
"server_id" bigint NOT NULL,
|
||||
"ip_strategy" varchar(32) DEFAULT NULL,
|
||||
"dns" text DEFAULT NULL,
|
||||
"block" text DEFAULT NULL,
|
||||
"outbound" text DEFAULT NULL,
|
||||
"created_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
"updated_at" TIMESTAMP(3) DEFAULT NULL,
|
||||
PRIMARY KEY ("id"),
|
||||
CONSTRAINT "uni_server_config_overrides_server_id" UNIQUE ("server_id")
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
DROP TABLE IF EXISTS "server_config_overrides";
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "payment"
|
||||
ADD COLUMN IF NOT EXISTS "sort" bigint NOT NULL DEFAULT 0;
|
||||
|
||||
UPDATE "payment"
|
||||
SET "sort" = "id"
|
||||
WHERE "sort" = 0;
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "payment"
|
||||
DROP COLUMN IF EXISTS "sort";
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- migrate:up
|
||||
INSERT INTO "system" ("category", "key", "value", "type", "desc", "created_at", "updated_at")
|
||||
SELECT 'subscribe', 'ShowTutorial', 'true', 'bool', 'Show tutorial section on the user document page', '2025-04-22 14:25:16.639', '2025-04-22 14:25:16.639'
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM "system" WHERE "category" = 'subscribe' AND "key" = 'ShowTutorial'
|
||||
);
|
||||
|
||||
-- migrate:down
|
||||
DELETE FROM "system" WHERE "category" = 'subscribe' AND "key" = 'ShowTutorial';
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- migrate:up
|
||||
ALTER TABLE "servers"
|
||||
ALTER COLUMN "last_reported_at" TYPE timestamptz
|
||||
USING "last_reported_at" AT TIME ZONE 'UTC';
|
||||
|
||||
-- migrate:down
|
||||
ALTER TABLE "servers"
|
||||
ALTER COLUMN "last_reported_at" TYPE timestamp(3)
|
||||
USING "last_reported_at" AT TIME ZONE 'UTC';
|
||||
|
||||
Reference in New Issue
Block a user