feat: add MicroDAO balance checks and DAARION.city integration

- Update Wallet Service: balance checks (1 DAARION for create, 0.01 for usage)
- Update DAOFactory Service: use new balance checks
- Add DB migration: teams type field and city_links table
- Add DAARION.city seed data
- Create teams API routes with balance validation
- Add DAARION.city remote repository
- Add sync scripts and documentation
This commit is contained in:
Apple
2025-11-15 08:56:14 -08:00
parent c552199eed
commit 582ab75b03
13 changed files with 994 additions and 25 deletions

120
IMPLEMENTATION_SUMMARY.md Normal file
View File

@@ -0,0 +1,120 @@
# Підсумок реалізації: Backend для MicroDAO
## ✅ Що зроблено
### 1. Wallet Service оновлено
-`hasEnoughForMicroDaoCreate()` - перевірка 1 DAARION на балансі (для створення MicroDAO)
-`hasEnoughForAdminRole()` - перевірка 1 DAARION на балансі (для ролі Admin)
-`hasEnoughForMicroDaoUsage()` - перевірка 0.01 DAARION на балансі (для використання сервісу)
-`getDaarionBalance()` - отримання балансу DAARION
- ✅ Legacy методи залишено для сумісності
### 2. DAOFactory Service оновлено
- ✅ Використовує `hasEnoughForMicroDaoCreate()` замість старого методу
- ✅ Перевірка 1 DAARION на балансі перед створенням MicroDAO
- ✅ Помилка: `INSUFFICIENT_BALANCE: Need 1 DAARION on balance to create MicroDAO`
### 3. Міграція БД створена
-`000010_teams_type_and_city_links.sql`
- ✅ Додано поле `type` в таблицю `teams` (city, platform, community, guild, lab, personal)
- ✅ Додано поле `parent_team_id` для ієрархічної структури
- ✅ Створено таблицю `city_links` для зв'язків між DAARION.city та платформами
- ✅ Seed дані для DAARION.city (id='daarion-city', type='city', slug='daarion')
### 4. API Endpoints створено
-`POST /api/v1/teams` - створення MicroDAO (з перевіркою 1 DAARION)
-`GET /api/v1/teams` - список teams/MicroDAO
-`GET /api/v1/teams/:teamId` - отримання team/MicroDAO
-`POST /api/v1/teams/:teamId/members` - запрошення користувача (з перевірками балансу)
### 5. Типи оновлено
-`Team` interface - додано поля `type`, `parent_team_id`, `slug`
-`CreateTeamRequest` interface - додано поля `type`, `slug`, `mode`
### 6. Логіка запрошення
- ✅ Admin може запросити користувача тільки якщо має 1 DAARION на балансі
- ✅ Для ролі Admin: запрошений користувач має мати 1 DAARION на балансі
- ✅ Для ролі Member: запрошений користувач має мати 0.01 DAARION на балансі
---
## 📋 Правила доступу (підсумок)
### Створення MicroDAO
- **Потрібно:** 1 DAARION на балансі (не стейкінг)
- **Результат:** Роль Admin у створеному MicroDAO
### Додавання Admin
- **Потрібно:**
- Поточний користувач: 1 DAARION на балансі
- Запрошений користувач: 1 DAARION на балансі
- **Результат:** Роль Admin у MicroDAO
### Запрошення Member
- **Потрібно:**
- Поточний користувач: 1 DAARION на балансі (Admin)
- Запрошений користувач: 0.01 DAARION на балансі
- **Результат:** Роль Member у MicroDAO
### Використання сервісу MicroDAO
- **Потрібно:** 0.01 DAARION на балансі
- **Результат:** Доступ до функцій MicroDAO
---
## 🔄 Наступні кроки
### Frontend (Console UI)
1. [ ] Створити сторінку `/console`
2. [ ] Компонент "Створити MicroDAO" (з перевіркою балансу)
3. [ ] Компонент "Список MicroDAO" (включаючи DAARION.city)
4. [ ] Компонент "Wallet" (баланси, перевірка доступу)
5. [ ] Компонент "Запросити користувача" (з перевірками балансу)
### Backend (доповнення)
1. [ ] Інтеграція з реальною БД (замість заглушок)
2. [ ] Створення team record при створенні MicroDAO
3. [ ] Створення team_member record при запрошенні
4. [ ] Отримання user_id з email при запрошенні
---
## 📝 Файли, які були змінені/створені
### Створені:
- `supabase/migrations/000010_teams_type_and_city_links.sql`
- `src/api/http/teams.routes.ts`
- `IMPLEMENTATION_SUMMARY.md`
### Оновлені:
- `src/services/wallet/wallet.service.ts`
- `src/services/wallet/wallet.interface.ts`
- `src/services/dao-factory/dao-factory.service.ts`
- `src/types/api.ts`
- `src/app.ts`
- `supabase/migrations/README.md`
---
## 🧪 Тестування
Для тестування потрібно:
1. **Застосувати міграцію:**
```bash
psql -d microdao -f supabase/migrations/000010_teams_type_and_city_links.sql
```
2. **Перевірити API endpoints:**
- `POST /api/v1/teams` - створення MicroDAO
- `POST /api/v1/teams/:teamId/members` - запрошення користувача
3. **Перевірити перевірки балансу:**
- Створення без достатнього балансу → помилка 403
- Запрошення Admin без достатнього балансу → помилка 403
- Запрошення Member без достатнього балансу → помилка 403
---
**Останнє оновлення:** 2024-11-14