AeThex-Bot-Master/aethex-bot/migrations/create_federation_tables.sql
sirpiglr 6fb0e785f6 Add missing tables to Supabase and improve API logging for federation data
Creates SQL migration script for federation tables in Supabase and adds detailed logging to federation API endpoints in webServer.js.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: aed2e46d-25bb-4b73-81a1-bb9e8437c261
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: f067ae59-c14c-4c16-bbf9-bb3883920fcc
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/aed2e46d-25bb-4b73-81a1-bb9e8437c261/BXwPVpJ
Replit-Helium-Checkpoint-Created: true
2025-12-13 17:28:38 +00:00

128 lines
5 KiB
SQL

-- Federation Tables for AeThex Bot
-- Run this in your Supabase SQL Editor
-- Federation Servers - Tracks servers that are part of the federation
CREATE TABLE IF NOT EXISTS federation_servers (
id SERIAL PRIMARY KEY,
guild_id VARCHAR(32) UNIQUE NOT NULL,
guild_name VARCHAR(255),
guild_icon VARCHAR(255),
owner_id VARCHAR(32),
member_count INTEGER DEFAULT 0,
status VARCHAR(32) DEFAULT 'pending', -- pending, approved, rejected, suspended
tier VARCHAR(32) DEFAULT 'free', -- free, premium
trust_level VARCHAR(32) DEFAULT 'bronze', -- bronze, silver, gold, platinum
reputation_score INTEGER DEFAULT 0,
subscription_id VARCHAR(255),
subscription_status VARCHAR(32),
invite_code VARCHAR(32),
description TEXT,
joined_federation_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Federation Bans - Shared ban list across federation servers
CREATE TABLE IF NOT EXISTS federation_bans (
id SERIAL PRIMARY KEY,
user_id VARCHAR(32) NOT NULL,
username VARCHAR(255),
reason TEXT,
evidence TEXT,
severity VARCHAR(32) DEFAULT 'low', -- low, medium, high, critical
reported_by VARCHAR(32),
reported_by_guild_id VARCHAR(32),
active BOOLEAN DEFAULT true,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Federation Applications - Servers applying to join
CREATE TABLE IF NOT EXISTS federation_applications (
id SERIAL PRIMARY KEY,
guild_id VARCHAR(32) UNIQUE NOT NULL,
guild_name VARCHAR(255),
guild_icon VARCHAR(255),
owner_id VARCHAR(32),
member_count INTEGER DEFAULT 0,
reason TEXT,
status VARCHAR(32) DEFAULT 'pending', -- pending, approved, rejected
reviewed_by VARCHAR(32),
reviewed_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Federation Mappings - Cross-server role mappings
CREATE TABLE IF NOT EXISTS federation_mappings (
id SERIAL PRIMARY KEY,
role_id VARCHAR(32) UNIQUE NOT NULL,
role_name VARCHAR(255),
guild_id VARCHAR(32) NOT NULL,
federation_role VARCHAR(64), -- The unified role name
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Federation Featured - Premium featured slots
CREATE TABLE IF NOT EXISTS federation_featured (
id SERIAL PRIMARY KEY,
guild_id VARCHAR(32) UNIQUE NOT NULL,
subscription_id VARCHAR(255),
active BOOLEAN DEFAULT true,
expires_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Federation Reputation - Tracks server reputation metrics
CREATE TABLE IF NOT EXISTS federation_reputation (
id SERIAL PRIMARY KEY,
guild_id VARCHAR(32) NOT NULL,
valid_reports INTEGER DEFAULT 0,
false_positives INTEGER DEFAULT 0,
total_reports INTEGER DEFAULT 0,
last_updated TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(guild_id)
);
-- Create indexes for better query performance
CREATE INDEX IF NOT EXISTS idx_federation_servers_status ON federation_servers(status);
CREATE INDEX IF NOT EXISTS idx_federation_servers_guild_id ON federation_servers(guild_id);
CREATE INDEX IF NOT EXISTS idx_federation_bans_user_id ON federation_bans(user_id);
CREATE INDEX IF NOT EXISTS idx_federation_bans_active ON federation_bans(active);
CREATE INDEX IF NOT EXISTS idx_federation_applications_status ON federation_applications(status);
CREATE INDEX IF NOT EXISTS idx_federation_mappings_guild_id ON federation_mappings(guild_id);
-- Disable RLS for now (or configure appropriate policies)
ALTER TABLE federation_servers ENABLE ROW LEVEL SECURITY;
ALTER TABLE federation_bans ENABLE ROW LEVEL SECURITY;
ALTER TABLE federation_applications ENABLE ROW LEVEL SECURITY;
ALTER TABLE federation_mappings ENABLE ROW LEVEL SECURITY;
ALTER TABLE federation_featured ENABLE ROW LEVEL SECURITY;
ALTER TABLE federation_reputation ENABLE ROW LEVEL SECURITY;
-- Allow service role full access (for the bot)
CREATE POLICY "Service role has full access to federation_servers" ON federation_servers
FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Service role has full access to federation_bans" ON federation_bans
FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Service role has full access to federation_applications" ON federation_applications
FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Service role has full access to federation_mappings" ON federation_mappings
FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Service role has full access to federation_featured" ON federation_featured
FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Service role has full access to federation_reputation" ON federation_reputation
FOR ALL USING (true) WITH CHECK (true);
-- Grant usage
GRANT ALL ON federation_servers TO service_role;
GRANT ALL ON federation_bans TO service_role;
GRANT ALL ON federation_applications TO service_role;
GRANT ALL ON federation_mappings TO service_role;
GRANT ALL ON federation_featured TO service_role;
GRANT ALL ON federation_reputation TO service_role;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO service_role;