Major refactor
This commit is contained in:
@@ -4,26 +4,6 @@ CREATE TABLE IF NOT EXISTS guilds (
|
||||
owner_id BIGINT,
|
||||
volume INTEGER NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS messages (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
guild_id BIGINT NOT NULL,
|
||||
channel_id BIGINT NOT NULL,
|
||||
author_id BIGINT NOT NULL,
|
||||
created BIGINT NOT NULL,
|
||||
model TEXT NOT NULL,
|
||||
request TEXT NOT NULL,
|
||||
response TEXT NOT NULL,
|
||||
request_tags TEXT[] NOT NULL,
|
||||
response_tags TEXT[] NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS api_keys (
|
||||
key TEXT PRIMARY KEY NOT NULL,
|
||||
user_id BIGINT NOT NULL,
|
||||
user_name TEXT NOT NULL,
|
||||
access_mask INT,
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
last_used_at TIMESTAMPTZ
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS dice_track (
|
||||
id UUID PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(),
|
||||
guild_id BIGINT NOT NULL,
|
||||
@@ -85,3 +65,66 @@ CREATE TABLE IF NOT EXISTS conditions (
|
||||
CREATE TABLE IF NOT EXISTS bestiary (
|
||||
id INTEGER GENERATED ALWAYS AS IDENTITY
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- Auth / Users
|
||||
-- ============================================================
|
||||
|
||||
-- Stores Discord user info, upserted on every successful OAuth login
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id BIGINT PRIMARY KEY NOT NULL,
|
||||
username TEXT NOT NULL,
|
||||
avatar TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- Grid maps: unbounded canvas, CSPRNG TEXT ids, auth-aware
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS grid_maps (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
owner_id BIGINT NOT NULL REFERENCES users(id),
|
||||
colors TEXT[] NOT NULL DEFAULT ARRAY[
|
||||
'#6b7280',
|
||||
'#92400e',
|
||||
'#15803d',
|
||||
'#1d4ed8',
|
||||
'#7c3aed',
|
||||
'#dc2626',
|
||||
'#ca8a04',
|
||||
'#0f172a',
|
||||
'#f9fafb'
|
||||
],
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Per-map role assignments; owner is auto-inserted on map creation
|
||||
CREATE TABLE IF NOT EXISTS map_permissions (
|
||||
map_id TEXT NOT NULL REFERENCES grid_maps(id) ON DELETE CASCADE,
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
role TEXT NOT NULL CHECK (role IN ('owner', 'editor', 'viewer')),
|
||||
PRIMARY KEY (map_id, user_id)
|
||||
);
|
||||
|
||||
-- Composite primary key replaces the old UUID id column
|
||||
CREATE TABLE IF NOT EXISTS grid_cells (
|
||||
map_id TEXT NOT NULL REFERENCES grid_maps(id) ON DELETE CASCADE,
|
||||
x INTEGER NOT NULL,
|
||||
y INTEGER NOT NULL,
|
||||
color TEXT NOT NULL DEFAULT '#808080',
|
||||
PRIMARY KEY (map_id, x, y)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS grid_tokens (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
map_id TEXT NOT NULL REFERENCES grid_maps(id) ON DELETE CASCADE,
|
||||
x INTEGER NOT NULL,
|
||||
y INTEGER NOT NULL,
|
||||
label TEXT NOT NULL,
|
||||
color TEXT NOT NULL DEFAULT '#4444FF'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user