@@ -0,0 +1,18 @@
|
||||
CREATE TABLE veyra_user (
|
||||
id varchar(36) PRIMARY KEY CHECK (id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
|
||||
display_name varchar(80) NOT NULL CHECK (length(trim(display_name)) > 0),
|
||||
status varchar(16) NOT NULL DEFAULT 'ACTIVE' CHECK (status IN ('ACTIVE', 'DISABLED')),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE veyra_account (
|
||||
id varchar(36) PRIMARY KEY CHECK (id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
|
||||
user_id varchar(36) NOT NULL REFERENCES veyra_user(id),
|
||||
mode varchar(16) NOT NULL CHECK (mode IN ('simulation', 'manual_real')),
|
||||
name varchar(80) NOT NULL CHECK (length(trim(name)) > 0),
|
||||
currency varchar(3) NOT NULL DEFAULT 'CNY' CHECK (currency = 'CNY'),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
UNIQUE (user_id, mode)
|
||||
);
|
||||
CREATE INDEX veyra_account_user_id_idx ON veyra_account(user_id);
|
||||
@@ -0,0 +1,32 @@
|
||||
ALTER TABLE veyra_user ADD COLUMN role varchar(16) NOT NULL DEFAULT 'USER' CHECK (role IN ('USER', 'ADMIN'));
|
||||
|
||||
CREATE TABLE veyra_credential (
|
||||
id varchar(36) PRIMARY KEY CHECK (id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
|
||||
user_id varchar(36) NOT NULL UNIQUE REFERENCES veyra_user(id),
|
||||
login_name varchar(64) NOT NULL UNIQUE CHECK (login_name ~ '^[a-z0-9_]{3,64}$'),
|
||||
password_hash text NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE veyra_session (
|
||||
id varchar(36) PRIMARY KEY CHECK (id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
|
||||
user_id varchar(36) NOT NULL REFERENCES veyra_user(id),
|
||||
token_hash varchar(64) NOT NULL UNIQUE,
|
||||
audience varchar(8) NOT NULL CHECK (audience IN ('app', 'admin')),
|
||||
expires_at timestamptz NOT NULL,
|
||||
revoked_at timestamptz,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
CHECK (expires_at > created_at)
|
||||
);
|
||||
CREATE INDEX veyra_session_user_id_idx ON veyra_session(user_id);
|
||||
|
||||
ALTER TABLE veyra_account ADD COLUMN ledger_status varchar(16) NOT NULL DEFAULT 'INCOMPLETE' CHECK (ledger_status IN ('COMPLETE', 'INCOMPLETE'));
|
||||
|
||||
CREATE TABLE veyra_cash_entry (
|
||||
id varchar(36) PRIMARY KEY CHECK (id ~ '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'),
|
||||
account_id varchar(36) NOT NULL REFERENCES veyra_account(id),
|
||||
entry_type varchar(16) NOT NULL CHECK (entry_type IN ('INITIAL')),
|
||||
amount_minor bigint NOT NULL CHECK (amount_minor >= 0 AND amount_minor <= 100000000000),
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
UNIQUE (account_id, entry_type)
|
||||
);
|
||||
Reference in New Issue
Block a user