111 lines
3.3 KiB
SQL
111 lines
3.3 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
-- table users
|
|
CREATE TABLE
|
|
users (
|
|
id SERIAL8 PRIMARY KEY,
|
|
open_id VARCHAR(128) NOT NULL UNIQUE,
|
|
union_id VARCHAR(128) ,
|
|
oauth jsonb default '{}'::jsonb,
|
|
expire_in timestamp NOT NULL,
|
|
created_at timestamp NOT NULL default now(),
|
|
updated_at timestamp NOT NULL default now()
|
|
);
|
|
|
|
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 default now(),
|
|
updated_at timestamp NOT NULL default now()
|
|
);
|
|
|
|
-- 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 default now()
|
|
);
|
|
|
|
CREATE INDEX idx_users_tenants_user_id ON users_tenants (user_id);
|
|
CREATE INDEX idx_users_tenants_tenant_id ON users_tenants (tenant_id);
|
|
-- uniq user_id, tenant_id
|
|
CREATE UNIQUE INDEX idx_users_tenants_user_id_tenant_id ON users_tenants (user_id, 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 default '{}'::jsonb,
|
|
type VARCHAR(128) NOT NULL, -- charge, consume, refund
|
|
created_at timestamp NOT NULL default now()
|
|
);
|
|
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,
|
|
hash VARCHAR(128) NOT NULL UNIQUE,
|
|
tenant_id INT8 NOT NULL,
|
|
title VARCHAR(198) NOT NULL,
|
|
description VARCHAR(198) NOT NULL default '',
|
|
price INT8 NOT NULL default 0,
|
|
discount INT8 NOT NULL default 100,
|
|
publish BOOL NOT NULL default false,
|
|
resources jsonb default '{}'::jsonb,
|
|
created_at timestamp NOT NULL default now(),
|
|
updated_at timestamp NOT NULL default now()
|
|
);
|
|
|
|
CREATE INDEX idx_medias_tenant_id ON medias (tenant_id);
|
|
|
|
CREATE INDEX idx_medias_title ON medias (title);
|
|
|
|
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 default now()
|
|
);
|
|
|
|
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
|
|
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 user_medias;
|
|
-- +goose StatementEnd
|