Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
# ADR-001: Выбор PostgreSQL как основной СУБД
**Статус:** принято
**Дата:** 2026-05-10
---
## Контекст
Для проекта VoIdea требуется база данных с поддержкой:
- Сложных запросов (аналитика идей)
- JSONB для гибкости (метаданные, настройки)
- ACID транзакции (финансовые операции, подписки)
- Масштабируемость (тысячи пользователей)
- Хорошая работа с Python (asyncpg)
Рассматривались:
- **PostgreSQL** — реляционная, ACID, JSONB, mature
- **MongoDB** — документоориентированная, гибкость, шардинг
- **SQLite** — простая, не подходит для production
---
## Решение
**PostgreSQL** выбран как основная СУБД.
### Обоснование
| Критерий | PostgreSQL | MongoDB | SQLite |
|----------|------------|---------|--------|
| ACID | ✅ Полный | ❌ Eventual | ✅ Полный |
| JSONB | ✅ Отличный | ✅ Лучший | ❌ Limited |
| Масштабируемость | ✅ Хорошая | ✅ Отличная | ❌ Плохая |
| Python async | ✅ asyncpg | ✅ motor | ❌ |
| Сложные запросы | ✅ Отличные | ❌ Limited | ⚠️ Basic |
| Зрелость | ✅ 20+ лет | ⚠️ 15 лет | ✅ |
### Преимущества для VoIdea
1. **JSONB** — хранение зашифрованных данных, настроек агентов
2. **ACID** — безопасность транзакций (подписки, платежи)
3. **Индексы** — поиск по метаданным, пользователям
4. **PostGIS** — геолокация (future: автоопределение региона)
5. **Full-text search** — поиск в идеях
---
## Последствия
### Положительные
- Надёжная, проверенная база данных
- Отличная производительность
- Большое сообщество
- Хорошая документация
- Mature ORM (SQLAlchemy async)
### Отрицательные
- Требует установку и настройку (PostgreSQL server)
- Миграции Alembic для схемы
- Начальная настройка (создание пользователя, базы)
### Миграция
Для локальной разработки:
```bash
# Windows
# Скачать PostgreSQL с postgresql.org/download/windows
# или использовать Chocolatey:
choco install postgresql
# Ubuntu (VPS)
apt install postgresql postgresql-contrib
```
---
## Реализация
### Конфигурация в .env
```bash
DB_HOST=localhost
DB_PORT=5432
DB_NAME=voidea
DB_USER=voidea
DB_PASS=your_secure_password
```
### SQLAlchemy async setup
```python
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine(
f"postgresql+asyncpg://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}",
echo=True
)
```
---
## Ответственный
**Decision maker:** Owner
**Review date:** При масштабировании (> 10,000 пользователей)
---
*Создано: 2026-05-10*
*Обновлено при изменениях SpecAgent*