diff --git a/backend/database/migrations/20241128075611_init.sql b/backend/database/migrations/20241128075611_init.sql index b9c449e..583a260 100644 --- a/backend/database/migrations/20241128075611_init.sql +++ b/backend/database/migrations/20241128075611_init.sql @@ -1,9 +1,122 @@ -- +goose Up -- +goose StatementBegin -SELECT 'up SQL query'; +-- table users +CREATE TABLE + users ( + id SERIAL8 PRIMARY KEY, + open_id VARCHAR(128) NOT NULL, + union_id VARCHAR(128), + oauth jsonb , + expire_in timestamp NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_users_open_id ON users (open_id); + +CREATE INDEX idx_users_union_id ON users (union_id); + +-- table tenants +CREATE TABLE + tenants ( + id SERIAL8 PRIMARY KEY, + name VARCHAR(128) NOT NULL, + slug VARCHAR(128) NOT NULL, + description VARCHAR(128), + expire_at timestamp NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +-- table users_tenants +CREATE TABLE + users_tenants ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + created_at timestamp NOT NULL + ); + +CREATE INDEX idx_users_tenants_user_id ON users_tenants (user_id); +CREATE INDEX idx_users_tenants_tenant_id ON users_tenants (tenant_id); + +CREATE TABLE tenant_user_balances ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + balance INT8 NOT NULL +); + +CREATE INDEX idx_tenant_user_balance_user_id ON tenant_user_balances (user_id); +CREATE INDEX idx_tenant_user_balance_tenant_id ON tenant_user_balances (tenant_id); + +-- table user_balance_history +CREATE TABLE user_balance_histories ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + balance INT8 NOT NULL, + target jsonb , + type VARCHAR(128) NOT NULL, -- charge, consume, refund + created_at timestamp NOT NULL +); +CREATE INDEX idx_user_balance_histories_user_id ON user_balance_histories (user_id); +CREATE INDEX idx_user_balance_histories_tenant_id ON user_balance_histories (tenant_id); + +-- medias +CREATE TABLE + medias ( + id SERIAL8 PRIMARY KEY, + tenant_id INT8 NOT NULL, + title VARCHAR(198) NOT NULL, + description VARCHAR(198) NOT NULL, + price INT8 NOT NULL, + discount INT8 NOT NULL, + publish BOOL NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_medias_tenant_id ON medias (tenant_id); + +CREATE INDEX idx_medias_title ON medias (title); + +CREATE TABLE + media_resources ( + id SERIAL8 PRIMARY KEY, + media_id INT8 NOT NULL, + type VARCHAR(128) NOT NULL, + source jsonb , + size INT8 NOT NULL, + publish BOOL NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_media_resources_media_id ON media_resources (media_id); + +CREATE TABLE user_medias ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + media_id INT8 NOT NULL, + price INT8 NOT NULL, + created_at timestamp NOT NULL +); + +CREATE INDEX idx_user_medias_user_id ON user_medias (user_id); +CREATE INDEX idx_user_medias_tenant_id ON user_medias (tenant_id); + -- +goose StatementEnd -- +goose Down -- +goose StatementBegin -SELECT 'down SQL query'; +DROP TABLE users; +DROP TABLE tenants; +DROP TABLE users_tenants; +DROP TABLE tenant_user_balances; +DROP TABLE user_balance_histories; +DROP TABLE medias; +DROP TABLE media_resources; +DROP TABLE user_medias; -- +goose StatementEnd