cove-chat/cove-db/migrations/05_guilds.sql
CanadianBaconBoi e27a0d33d7 Initial Commit
2026-02-17 18:22:49 +01:00

56 lines
2.6 KiB
SQL

CREATE TABLE guilds (
id BYTEA NOT NULL PRIMARY KEY CHECK(length(id) = 26),
-- Core identity
name TEXT NOT NULL CHECK (LENGTH(name) >= 2 AND LENGTH(name) <= 100),
description TEXT CHECK (LENGTH(COALESCE(description, '')) <= 1024),
icon BYTEA CHECK(length(icon) = 26),
banner BYTEA CHECK(length(banner) = 26),
splash BYTEA CHECK(length(splash) = 26),
-- Ownership & verification
owner_id BYTEA NOT NULL CHECK(length(owner_id) = 26),
owner_permissions BYTEA NOT NULL DEFAULT 'xFFFFFFFFFFFFFFFF'::BYTEA, -- 8-byte bitmask (e.g., ADMINISTRATOR = 0x8)
-- Regions & voice
region TEXT NOT NULL DEFAULT 'us-west', -- voice region (e.g., 'us-west', 'eu-central')
-- Features (bitmask of enabled features)
features INTEGER NOT NULL DEFAULT 0, -- 0 = basic, 1 = ANIMATED_ICON, 2 = BANNER, 4 = COMMERCE, 8 = PUBLIC, etc.
-- Discovery & visibility
afk_channel_id BYTEA CHECK(length(afk_channel_id) = 26),
afk_timeout INTEGER NOT NULL DEFAULT 300, -- seconds (60, 300, 900, 1800, 3600)
verification_level INTEGER NOT NULL DEFAULT 0, -- 0 = none, 1 = low, 2 = medium, 3 = high, 4 = highest
default_message_notifications INTEGER NOT NULL DEFAULT 1, -- 0 = all, 1 = mentions only
-- Explicit content filter
explicit_content_filter INTEGER NOT NULL DEFAULT 0, -- 0 = disabled, 1 = members without role, 2 = all
-- System channels
system_channel_id BYTEA CHECK(length(system_channel_id) = 26),
system_channel_flags INTEGER NOT NULL DEFAULT 0, -- 1 = SUPPRESS_JOIN_NOTIFICATIONS, 2 = SUPPRESS_PREMIUM_SUBSCRIPTIONS, etc.
-- Boosting & nitro
premium_boosters INTEGER NOT NULL DEFAULT 0,
premium_tier INTEGER NOT NULL DEFAULT 0, -- 0 = None, 1 = Tier 1, 2 = Tier 2, 3 = Tier 3
premium_subscription_count INTEGER NOT NULL DEFAULT 0, -- cached boost count
-- Safety & moderation
widget_enabled BOOLEAN NOT NULL DEFAULT FALSE,
widget_channel_id BYTEA CHECK(length(widget_channel_id) = 26),
preferred_locale TEXT NOT NULL DEFAULT 'en-US', -- IETF BCP 47 language tag
-- Audit & integrity
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
joined_at TIMESTAMPTZ, -- when bot joined (if applicable)
large BOOLEAN NOT NULL DEFAULT FALSE, -- >150 members
member_count INTEGER NOT NULL DEFAULT 0 -- cached member count
);
-- Critical indexes
CREATE INDEX idx_guilds_owner_id ON guilds (owner_id);
CREATE INDEX idx_guilds_region ON guilds (region);
CREATE INDEX idx_guilds_verification_level ON guilds (verification_level);
CREATE INDEX idx_guilds_large ON guilds (large) WHERE large = TRUE; -- for pagination
CREATE INDEX idx_guilds_created_at ON guilds (created_at DESC);