2024-11-21 11:25:32 +00:00
|
|
|
-- +goose Up
|
|
|
|
|
2024-11-22 17:53:33 +00:00
|
|
|
CREATE TABLE apis
|
2024-11-22 14:51:29 +00:00
|
|
|
(
|
2024-11-22 17:53:33 +00:00
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
name VARCHAR(255) NOT NULL,
|
|
|
|
description TEXT,
|
|
|
|
-- 后端地址
|
|
|
|
backend_url VARCHAR(255) NOT NULL,
|
|
|
|
auth_token VARCHAR(255) NOT NULL,
|
|
|
|
-- 是否已经验证(验证时间)
|
|
|
|
ownership_verified_at TIMESTAMP DEFAULT Null,
|
|
|
|
-- 所有权验证 token
|
|
|
|
ownership_verification_token VARCHAR(255) NOT NULL,
|
|
|
|
-- user id string
|
|
|
|
user_id VARCHAR(255) NOT NULL,
|
|
|
|
-- 状态
|
|
|
|
status VARCHAR(255) NOT NULL,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
deleted_at TIMESTAMP DEFAULT Null
|
2024-11-22 14:51:29 +00:00
|
|
|
);
|
2024-11-21 11:25:32 +00:00
|
|
|
|
2024-11-22 17:53:33 +00:00
|
|
|
-- index
|
|
|
|
CREATE INDEX idx_api_name ON apis (name);
|
|
|
|
CREATE INDEX idx_api_user_id ON apis (user_id);
|
|
|
|
CREATE INDEX idx_api_status ON apis (status);
|
|
|
|
CREATE INDEX idx_api_deleted_at ON apis (deleted_at);
|
|
|
|
CREATE INDEX idx_api_ownership_verified_at ON apis (ownership_verified_at);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE api_documents
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
api_id BIGINT NOT NULL,
|
|
|
|
openapi_url VARCHAR(255) NOT NULL,
|
|
|
|
content TEXT,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
CONSTRAINT fk_api_id
|
|
|
|
FOREIGN KEY (api_id) REFERENCES apis (id)
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_api_documents_api_id ON api_documents (api_id);
|
|
|
|
CREATE INDEX idx_api_documents_openapi_url ON api_documents (openapi_url);
|
|
|
|
|
|
|
|
CREATE TABLE packages
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
name VARCHAR(255) NOT NULL,
|
|
|
|
description TEXT,
|
|
|
|
api_id BIGINT NOT NULL,
|
|
|
|
price DECIMAL(10, 2),
|
|
|
|
-- hidden
|
|
|
|
is_hidden BOOLEAN DEFAULT false,
|
|
|
|
is_published BOOLEAN DEFAULT false,
|
|
|
|
call_limit BIGINT DEFAULT 10000,
|
|
|
|
-- 有效期(天)
|
|
|
|
duration INTEGER DEFAULT 30,
|
|
|
|
-- 是否为试用套餐
|
|
|
|
is_trial BOOLEAN DEFAULT false,
|
|
|
|
-- 每个用户的购买限制
|
|
|
|
purchase_limit INTEGER DEFAULT 1,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
CONSTRAINT fk_api_id FOREIGN KEY (api_id) REFERENCES apis (id),
|
|
|
|
deleted_at TIMESTAMP DEFAULT Null
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_package_name ON packages (name);
|
|
|
|
CREATE INDEX idx_package_api_id ON packages (api_id);
|
|
|
|
CREATE INDEX idx_package_price ON packages (price);
|
|
|
|
CREATE INDEX idx_package_is_published ON packages (is_published);
|
|
|
|
CREATE INDEX idx_package_is_hidden ON packages (is_hidden);
|
|
|
|
CREATE INDEX idx_package_is_trial ON packages (is_trial);
|
|
|
|
CREATE INDEX idx_package_call_limit ON packages (call_limit);
|
|
|
|
CREATE INDEX idx_package_duration ON packages (duration);
|
|
|
|
CREATE INDEX idx_package_purchase_limit ON packages (purchase_limit);
|
|
|
|
CREATE INDEX idx_package_deleted_at ON packages (deleted_at);
|
|
|
|
|
|
|
|
CREATE TABLE user_packages
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
user_id VARCHAR(255) NOT NULL,
|
|
|
|
package_id BIGINT NOT NULL,
|
|
|
|
calls_left INTEGER DEFAULT 0,
|
|
|
|
is_active BOOLEAN DEFAULT false,
|
|
|
|
expiration_at TIMESTAMP DEFAULT NULL,
|
|
|
|
purchase_at TIMESTAMP NOT NULL,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
CONSTRAINT fk_package_id FOREIGN KEY (package_id) REFERENCES packages (id)
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_user_package_user_id ON user_packages (user_id);
|
|
|
|
CREATE INDEX idx_user_package_package_id ON user_packages (package_id);
|
|
|
|
CREATE INDEX idx_user_package_is_active ON user_packages (is_active);
|
|
|
|
CREATE INDEX idx_user_package_expiration_at ON user_packages (expiration_at);
|
|
|
|
CREATE INDEX idx_user_package_purchase_at ON user_packages (purchase_at);
|
|
|
|
CREATE INDEX idx_user_package_calls_left ON user_packages (calls_left);
|
|
|
|
|
2024-11-21 11:25:32 +00:00
|
|
|
|
2024-11-22 17:53:33 +00:00
|
|
|
CREATE TABLE promo_codes
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
code VARCHAR(255) NOT NULL,
|
|
|
|
discount_type VARCHAR(255) NOT NULL,
|
|
|
|
discount_value DECIMAL(10, 2) NOT NULL,
|
|
|
|
expiration_date TIMESTAMP,
|
|
|
|
is_active BOOLEAN DEFAULT true,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
deleted_at TIMESTAMP DEFAULT Null
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_promo_code_code ON promo_codes (code);
|
|
|
|
CREATE INDEX idx_promo_code_discount_type ON promo_codes (discount_type);
|
|
|
|
CREATE INDEX idx_promo_code_discount_value ON promo_codes (discount_value);
|
|
|
|
CREATE INDEX idx_promo_code_expiration_date ON promo_codes (expiration_date);
|
|
|
|
CREATE INDEX idx_promo_code_is_active ON promo_codes (is_active);
|
|
|
|
CREATE INDEX idx_promo_code_deleted_at ON promo_codes (deleted_at);
|
|
|
|
|
|
|
|
CREATE TABLE orders
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
user_id VARCHAR(255) NOT NULL,
|
|
|
|
promo_code_id BIGINT DEFAULT NULL,
|
|
|
|
price DECIMAL(10, 2) NOT NULL,
|
|
|
|
order_date TIMESTAMP NOT NULL,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
CONSTRAINT fk_promo_code_id FOREIGN KEY (promo_code_id) REFERENCES promo_codes (id) ON DELETE SET NULL
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_order_user_id ON orders (user_id);
|
|
|
|
CREATE INDEX idx_order_promo_code_id ON orders (promo_code_id);
|
|
|
|
CREATE INDEX idx_order_price ON orders (price);
|
|
|
|
CREATE INDEX idx_order_order_date ON orders (order_date);
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE order_items
|
|
|
|
(
|
|
|
|
id BIGSERIAL PRIMARY KEY,
|
|
|
|
order_id BIGINT NOT NULL,
|
|
|
|
package_id BIGINT NOT NULL,
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
updated_at TIMESTAMP DEFAULT now(),
|
|
|
|
CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES orders (id)
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_order_item_order_id ON order_items (order_id);
|
|
|
|
CREATE INDEX idx_order_item_package_id ON order_items (package_id);
|
|
|
|
|
|
|
|
-- +goose Down
|
|
|
|
DROP TABLE IF EXISTS order_items;
|
|
|
|
DROP TABLE IF EXISTS orders;
|
|
|
|
DROP TABLE IF EXISTS promo_codes;
|
|
|
|
DROP TABLE IF EXISTS user_packages;
|
|
|
|
DROP TABLE IF EXISTS packages;
|
|
|
|
DROP TABLE IF EXISTS api_documents;
|
|
|
|
DROP TABLE IF EXISTS apis;
|