argent/sql/registry.sql

64 lines
1.8 KiB
SQL

CREATE DATABASE IF NOT EXISTS argent_registry
CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
USE argent_registry;
CREATE TABLE shards (
shard_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
db_name VARCHAR(50) NOT NULL,
host_address VARCHAR(255) NOT NULL,
port INT NOT NULL DEFAULT 53096
);
CREATE TABLE user_shard_map (
user_id BINARY(16) PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(50) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
shard_id INT NOT NULL,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (shard_id) REFERENCES shards(shard_id)
);
CREATE TABLE cost_group_statuses (
status_id TINYINT PRIMARY KEY,
name VARCHAR(20) UNIQUE NOT NULL
);
CREATE TABLE cost_groups (
group_id BINARY(16) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_by BINARY(16),
status_id TINYINT NOT NULL DEFAULT '1',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES user_shard_map(user_id),
FOREIGN KEY (status_id) REFERENCES cost_group_statuses(status_id)
);
CREATE TABLE group_roles (
role_id TINYINT PRIMARY KEY,
name VARCHAR(20) UNIQUE NOT NULL
);
CREATE TABLE group_members (
group_id BINARY(16),
user_id BINARY(16),
role_id TINYINT DEFAULT '3',
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (group_id, user_id),
FOREIGN KEY (group_id) REFERENCES cost_groups(group_id),
FOREIGN KEY (role_id) REFERENCES group_roles(role_id),
FOREIGN KEY (user_id) REFERENCES user_shard_map(user_id)
);
INSERT INTO cost_group_statuses (status_id, name) VALUES
(1, 'active'),
(2, 'settled'),
(3, 'archived');
INSERT INTO group_roles (role_id, name) VALUES
(1, 'owner'),
(2, 'editor'),
(3, 'participant');