5.2 KiB
5.2 KiB
TASK_PHASE_LOGOS_BACKGROUNDS_UI_v1
Проєкт: DAARION.city — Логотипи та фони MicroDAO / Agents
Фаза: UI для завантаження та відображення брендингу
Мета: Додати можливість завантажувати та редагувати логотипи MicroDAO та аватарки агентів у новому фронтенді (apps/web).
0. Поточний стан
- Поля
logo_url,banner_urlіснують у БД для MicroDAO. - Поле
avatar_urlіснує для агентів (вdais.vis.avatar_urlабо напряму). - Старий фронтенд (
src/features/microdao/MicrodaoConsolePage.tsx) має UI для завантаження. - Новий фронтенд (
apps/web) не має UI для завантаження — тільки відображення. - API endpoint
PATCH /microdao/{slug}/brandingіснує. - API endpoint для завантаження файлів (
POST /assets/upload) існує.
1. Scope
Включено
- Компонент
MicrodaoBrandingCardдля редагування логотипа та банера MicroDAO. - Компонент
AgentAvatarUploadдля редагування аватарки агента. - Інтеграція в сторінки
/microdao/[slug]та/agents/[agentId]. - API routes для проксі завантаження файлів.
- Відображення placeholder при відсутності зображень.
Виключено
- Складні редактори зображень (crop, resize).
- Генерація AI-аватарок (окремий таск).
2. Backend API (існуючі endpoints)
MicroDAO Branding
PATCH /city/microdao/{slug}/branding
Body: { "logo_url": "...", "banner_url": "..." }
Asset Upload
POST /city/assets/upload
Form: file, type (microdao_logo, microdao_banner, agent_avatar)
Response: { original_url, processed_url, thumb_url }
Agent Avatar Update
PATCH /city/agents/{agent_id}/dais
Body: { "vis": { "avatar_url": "..." } }
3. Frontend Components
3.1. MicrodaoBrandingCard
Файл: apps/web/src/components/microdao/MicrodaoBrandingCard.tsx
'use client';
import { useState, useRef } from 'react';
import { Upload, Image, X } from 'lucide-react';
interface MicrodaoBrandingCardProps {
slug: string;
logoUrl?: string | null;
bannerUrl?: string | null;
canEdit?: boolean;
onUpdated?: () => void;
}
export function MicrodaoBrandingCard({
slug,
logoUrl,
bannerUrl,
canEdit = false,
onUpdated
}: MicrodaoBrandingCardProps) {
// ... implementation
}
3.2. AgentAvatarUpload
Файл: apps/web/src/components/agent-dashboard/AgentAvatarUpload.tsx
'use client';
interface AgentAvatarUploadProps {
agentId: string;
currentAvatarUrl?: string | null;
canEdit?: boolean;
onUpdated?: () => void;
}
export function AgentAvatarUpload({
agentId,
currentAvatarUrl,
canEdit = false,
onUpdated
}: AgentAvatarUploadProps) {
// ... implementation
}
3.3. API Route for Upload
Файл: apps/web/src/app/api/assets/upload/route.ts
import { NextRequest, NextResponse } from 'next/server';
const CITY_SERVICE_URL = process.env.INTERNAL_API_URL || 'http://daarion-city-service:7001';
export async function POST(request: NextRequest) {
const formData = await request.formData();
const upstream = await fetch(`${CITY_SERVICE_URL}/city/assets/upload`, {
method: 'POST',
body: formData,
});
const data = await upstream.json();
return NextResponse.json(data, { status: upstream.status });
}
4. Integration Points
4.1. MicroDAO Detail Page
В apps/web/src/app/microdao/[slug]/page.tsx:
- Додати
MicrodaoBrandingCardу секцію Hero або окрему вкладку Settings. - Показувати тільки якщо
canManage === true.
4.2. Agent Console Page
В apps/web/src/app/agents/[agentId]/page.tsx:
- Додати
AgentAvatarUploadу вкладку Identity. - Показувати тільки якщо агент належить поточному користувачу.
5. Acceptance Criteria
- На сторінці MicroDAO (для orchestrator) є можливість:
- Завантажити/змінити логотип
- Завантажити/змінити банер
- Видалити зображення
- На сторінці агента (для власника) є можливість:
- Завантажити/змінити аватарку
- Видалити аватарку
- Зображення відображаються одразу після завантаження.
- При відсутності зображення показується placeholder.
- Помилки завантаження показуються користувачу.
6. Deliverables
apps/web/src/components/microdao/MicrodaoBrandingCard.tsxapps/web/src/components/agent-dashboard/AgentAvatarUpload.tsxapps/web/src/app/api/assets/upload/route.ts- Оновлені сторінки
/microdao/[slug]та/agents/[agentId]