108 lines
3.2 KiB
Markdown
108 lines
3.2 KiB
Markdown
# Social Graph Builder
|
||
|
||
Построитель социального графа: импорт контактов, визуализация связей, CRUD.
|
||
|
||
## Стек
|
||
|
||
| Слой | Технология |
|
||
|------|-----------|
|
||
| Backend API | Django 4.2 + Django REST Framework |
|
||
| База данных | SQLite |
|
||
| Frontend | Vue.js 3 + Vite |
|
||
| Граф | vis-network |
|
||
| Состояние | Pinia |
|
||
| Запуск | Docker Compose |
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
git clone <repo>
|
||
cd social-graph
|
||
docker-compose up --build
|
||
```
|
||
|
||
- Frontend: http://localhost:5173
|
||
- Backend API: http://localhost:8000/api/
|
||
|
||
## API endpoints
|
||
|
||
| Метод | URL | Описание |
|
||
|-------|-----|----------|
|
||
| GET/POST | `/api/contacts/` | Список / создание контактов |
|
||
| GET/PATCH/DELETE | `/api/contacts/{id}/` | Контакт по ID |
|
||
| GET/POST | `/api/relations/` | Список / создание связей |
|
||
| DELETE | `/api/relations/{id}/` | Удалить связь |
|
||
| GET | `/api/graph/` | Граф (nodes + edges для vis.js) |
|
||
| GET | `/api/relation-types/` | Типы связей |
|
||
| POST | `/api/import/` | Импорт CSV/JSON |
|
||
|
||
## Формат CSV для импорта
|
||
|
||
```csv
|
||
name,email,phone,organization,position,notes
|
||
Иван Иванов,ivan@example.com,+7-900-000-0001,ООО Ромашка,Директор,
|
||
Мария Петрова,maria@example.com,+7-900-000-0002,Газпром,Аналитик,
|
||
```
|
||
|
||
## Формат JSON для импорта
|
||
|
||
```json
|
||
[
|
||
{"name": "Иван Иванов", "email": "ivan@example.com", "organization": "ООО Ромашка"},
|
||
{"name": "Мария Петрова", "phone": "+7-900-000-0002"}
|
||
]
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
social-graph/
|
||
├── backend/
|
||
│ ├── config/ # Django settings, urls
|
||
│ ├── contacts/ # models, serializers, views, urls
|
||
│ ├── manage.py
|
||
│ ├── requirements.txt
|
||
│ └── Dockerfile
|
||
├── frontend/
|
||
│ ├── src/
|
||
│ │ ├── views/ # GraphView, ContactsView, ContactDetailView, ImportView
|
||
│ │ ├── components/ # ContactForm
|
||
│ │ ├── stores/ # Pinia store (contacts)
|
||
│ │ ├── router/ # Vue Router
|
||
│ │ ├── api.js # Axios instance
|
||
│ │ └── App.vue
|
||
│ ├── vite.config.js
|
||
│ └── Dockerfile
|
||
└── docker-compose.yml
|
||
```
|
||
|
||
## Запуск без Docker
|
||
|
||
**Backend:**
|
||
```bash
|
||
cd backend
|
||
pip install -r requirements.txt
|
||
python manage.py migrate
|
||
python manage.py runserver
|
||
```
|
||
|
||
**Frontend:**
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
> В `vite.config.js` прокси настроен на `http://backend:8000`.
|
||
> При локальном запуске без Docker замените на `http://localhost:8000`.
|
||
|
||
## Планируемые фичи (следующие итерации)
|
||
|
||
- [ ] Авторизация (Django auth + JWT)
|
||
- [ ] Теги/группы контактов
|
||
- [ ] Экспорт в CSV/JSON
|
||
- [ ] Поиск по организации и должности
|
||
- [ ] История изменений контакта
|
||
- [ ] Импорт из vCard (.vcf)
|
||
- [ ] Уведомления / дни рождения
|