feat: MicroDAO Registry API (read-only) - GET /city/microdao, GET /city/microdao/{slug}
This commit is contained in:
60
migrations/021_microdao_registry.sql
Normal file
60
migrations/021_microdao_registry.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
-- 1. Update microdaos table structure
|
||||
ALTER TABLE microdaos
|
||||
ADD COLUMN IF NOT EXISTS district text,
|
||||
ADD COLUMN IF NOT EXISTS is_active boolean NOT NULL DEFAULT true,
|
||||
ADD COLUMN IF NOT EXISTS is_public boolean NOT NULL DEFAULT true;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_microdaos_district ON microdaos(district);
|
||||
|
||||
-- 2. Create microdao_agents table
|
||||
CREATE TABLE IF NOT EXISTS microdao_agents (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
microdao_id text NOT NULL REFERENCES microdaos(id) ON DELETE CASCADE,
|
||||
agent_id text NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
||||
role text,
|
||||
is_core boolean NOT NULL DEFAULT false,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
UNIQUE(microdao_id, agent_id)
|
||||
);
|
||||
|
||||
-- 3. Create microdao_channels table
|
||||
CREATE TABLE IF NOT EXISTS microdao_channels (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
microdao_id text NOT NULL REFERENCES microdaos(id) ON DELETE CASCADE,
|
||||
kind text NOT NULL,
|
||||
ref_id text NOT NULL,
|
||||
display_name text,
|
||||
is_primary boolean NOT NULL DEFAULT false,
|
||||
extra jsonb DEFAULT '{}'::jsonb,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_microdao_channels_microdao ON microdao_channels(microdao_id);
|
||||
|
||||
-- 4. Seed Data Updates
|
||||
-- Update districts
|
||||
UPDATE microdaos SET district = 'Core' WHERE slug = 'daarion';
|
||||
UPDATE microdaos SET district = 'Energy' WHERE slug = 'energy-union';
|
||||
UPDATE microdaos SET district = 'Green' WHERE slug = 'greenfood';
|
||||
UPDATE microdaos SET district = 'Clan' WHERE slug = 'clan';
|
||||
UPDATE microdaos SET district = 'Soul' WHERE slug = 'soul';
|
||||
UPDATE microdaos SET district = 'Council' WHERE slug = 'yaromir';
|
||||
UPDATE microdaos SET district = 'Labs' WHERE slug = 'druid';
|
||||
UPDATE microdaos SET district = 'Labs' WHERE slug = 'nutra';
|
||||
UPDATE microdaos SET district = 'Creators' WHERE slug = 'eonarch';
|
||||
|
||||
-- Link orchestrators as core agents
|
||||
INSERT INTO microdao_agents (microdao_id, agent_id, role, is_core)
|
||||
SELECT id, owner_agent_id, 'orchestrator', true
|
||||
FROM microdaos
|
||||
WHERE owner_agent_id IS NOT NULL
|
||||
ON CONFLICT (microdao_id, agent_id) DO NOTHING;
|
||||
|
||||
-- Seed basic Telegram channels (assumed based on slug)
|
||||
INSERT INTO microdao_channels (microdao_id, kind, ref_id, display_name, is_primary)
|
||||
SELECT id, 'telegram', '@' || replace(slug, '-', '') || 'bot', name || ' Telegram Bot', true
|
||||
FROM microdaos
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM microdao_channels WHERE microdao_id = microdaos.id AND kind = 'telegram'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user