# TASK_PHASE_MICRODAO_ROOMS_INTEGRATION_v1 Version: 1.0 Status: Ready Priority: High (City → District → MicroDAO контур) --- # 1. МЕТА Повністю інтегрувати Rooms Layer для MicroDAO: - кожен MicroDAO має стандартний набір кімнат - кімнати прив'язані до Matrix - UI відображає кімнати з можливістю переходу та чату --- # 2. ВИХІДНІ ДАНІ Вже є: - City Rooms (`/city/{slug}`) — 100% - District Portals (`/districts/{slug}`) — 100% - Matrix Integration — 100% - Chat Widget — 100% - Базова сторінка `/microdao/{slug}` Потрібно: - API для кімнат MicroDAO - Стандартні room-types - UI секція кімнат на сторінці MicroDAO - Seed data для існуючих MicroDAO --- # 3. SCOPE 1. Backend API: - `GET /api/v1/microdao/{slug}/rooms` - `GET /api/v1/microdao/{slug}/agents` - `POST /api/v1/microdao/{slug}/rooms` 2. Стандартні room-types для MicroDAO 3. Frontend: - Секція "Кімнати MicroDAO" - Секція "Агенти MicroDAO" - Chat Widget для lobby 4. Seed Data для DAARION та Districts 5. Matrix auto-create для нових кімнат --- # 4. МОДУЛЬ 1 — BACKEND API ## 4.1. GET /api/v1/microdao/{slug}/rooms Повертає список кімнат MicroDAO. ```json [ { "id": "room_microdao_daarion-lobby", "slug": "daarion-lobby", "name": "DAARION Lobby", "description": "Головна кімната DAARION DAO", "room_role": "lobby", "is_public": true, "matrix_room_id": "!abc:daarion.space", "matrix_room_alias": "#daarion-lobby:daarion.space" }, ... ] ``` ## 4.2. GET /api/v1/microdao/{slug}/agents Повертає агентів MicroDAO. ```json [ { "id": "daarwizz", "name": "DAARWIZZ", "kind": "governance", "role": "orchestrator", "is_core": true, "status": "active" }, ... ] ``` ## 4.3. POST /api/v1/microdao/{slug}/rooms Створює нову кімнату для MicroDAO. Request: ```json { "slug": "daarion-treasury", "name": "Treasury", "description": "Фінанси та токеноміка", "room_role": "treasury", "is_public": false } ``` Response: створена кімната з matrix_room_id --- # 5. МОДУЛЬ 2 — СТАНДАРТНІ ROOM-TYPES Кожен MicroDAO має мати набір кімнат: | room_role | Назва | Опис | is_public | |-----------|-------|------|-----------| | lobby | {DAO} Lobby | Головна кімната | true | | governance | Governance | Голосування, пропозиції | true | | operations | Operations | Операційна діяльність | false | | knowledge | Knowledge Base | Документація, FAQ | true | | treasury | Treasury | Фінанси, токеноміка | false | | ai-core | AI Core | Агенти, автоматизація | false | --- # 6. МОДУЛЬ 3 — REPO_CITY МЕТОДИ ```python async def get_microdao_rooms(microdao_id: str) -> List[Dict]: """Отримати кімнати MicroDAO""" query = """ SELECT id, slug, name, description, room_role, is_public, matrix_room_id, matrix_room_alias FROM city_rooms WHERE owner_id = $1 AND owner_type = 'microdao' ORDER BY sort_order, name """ rows = await pool.fetch(query, microdao_id) return [dict(r) for r in rows] async def get_microdao_agents(microdao_id: str) -> List[Dict]: """Отримати агентів MicroDAO""" query = """ SELECT a.id, a.display_name as name, a.kind, a.status, a.avatar_url, ma.role, ma.is_core FROM agents a JOIN microdao_agents ma ON ma.agent_id = a.id WHERE ma.microdao_id = $1 ORDER BY ma.is_core DESC, a.display_name """ rows = await pool.fetch(query, microdao_id) return [dict(r) for r in rows] async def create_microdao_room( microdao_id: str, slug: str, name: str, description: str, room_role: str, is_public: bool = True ) -> Dict: """Створити кімнату для MicroDAO з Matrix""" # 1. Create Matrix room matrix_room_id, matrix_room_alias = await ensure_room_has_matrix( slug, name, "public" if is_public else "private" ) # 2. Insert into DB room_id = f"room_microdao_{slug}" query = """ INSERT INTO city_rooms ( id, slug, name, description, created_by, owner_type, owner_id, room_role, is_public, matrix_room_id, matrix_room_alias, sort_order ) VALUES ($1, $2, $3, $4, 'u_system', 'microdao', $5, $6, $7, $8, $9, $10) RETURNING * """ sort_order = { 'lobby': 10, 'governance': 20, 'operations': 30, 'knowledge': 40, 'treasury': 50, 'ai-core': 60 }.get(room_role, 100) row = await pool.fetchrow( query, room_id, slug, name, description, microdao_id, room_role, is_public, matrix_room_id, matrix_room_alias, sort_order ) return dict(row) ``` --- # 7. МОДУЛЬ 4 — FRONTEND ## 7.1. Оновити /microdao/[slug]/page.tsx Додати секції: - MicroDAO Rooms (список кімнат з картками) - MicroDAO Agents (список агентів) - Chat Widget для lobby room ## 7.2. Компонент MicroDAORoomsSection ```tsx function MicroDAORoomsSection({ rooms }: { rooms: Room[] }) { return (
{room.name}
{room.room_role}
{room.matrix_room_id && ( )}{agent.name}
{agent.role}