mirror of
https://gitverse.ru/kpa39l/yaru.nixg.ru.git
synced 2026-09-29 09:55:06 +00:00
Initial commit: проект документации YARU
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# Backend документация
|
||||
|
||||
## Стек технологий
|
||||
|
||||
| Компонент | Технология | Примечание |
|
||||
|-----------|------------|------------|
|
||||
| Язык | Python 3.11+ | |
|
||||
| Фреймворк | FastAPI | Асинхронный, автодокументация |
|
||||
| База данных | PostgreSQL 15+ | Основная БД |
|
||||
| Кэш | PostgreSQL + pg_redis | Или Redis через extension |
|
||||
| Очереди | PostgreSQL + pgqueue | Или Celery + Redis |
|
||||
| ORM | SQLAlchemy 2.0 + Async | Асинхронная работа |
|
||||
|
||||
---
|
||||
|
||||
## Архитектура сервера
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ FastAPI App │
|
||||
├─────────────┬─────────────┬─────────────┬───────────────┤
|
||||
│ REST API │ ActivityPub │ Auth API │ Export API │
|
||||
│ (лента, │ (inbox, │ (OAuth2, │ (markdown, │
|
||||
│ профили) │ outbox) │ JWT) │ медиа) │
|
||||
└─────────────┴─────────────┴─────────────┴───────────────┘
|
||||
│
|
||||
┌─────────▼──────────┐
|
||||
│ PostgreSQL │
|
||||
│ ───────────────── │
|
||||
│ • pg_redis (кэш) │
|
||||
│ • pgqueue (очереди)│
|
||||
│ • pg_trgm (поиск) │
|
||||
└────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Требования к бэкенду
|
||||
|
||||
### 1. ActivityPub реализация
|
||||
|
||||
- [ ] **Inbox** — приём активностей от других серверов
|
||||
- [ ] **Outbox** — отправка активностей подписчикам
|
||||
- [ ] **WebFinger** — обнаружение пользователей по @username@domain
|
||||
- [ ] **Actor** — профиль пользователя в формате ActivityPub
|
||||
- [ ] **Follow/Unfollow** — подписки между серверами
|
||||
- [ ] **Create/Update/Delete** — посты и их редактирование
|
||||
- [ ] **Like/Announce** — лайки и репосты
|
||||
- [ ] **Mastodon совместимость** — тестирование с mastodon.social
|
||||
|
||||
### 2. REST API
|
||||
|
||||
- [ ] `/api/v1/accounts` — управление профилем
|
||||
- [ ] `/api/v1/statuses` — создание/чтение постов
|
||||
- [ ] `/api/v1/timelines/home` — домашняя лента
|
||||
- [ ] `/api/v1/timelines/public` — публичная лента
|
||||
- [ ] `/api/v1/follows` — подписки
|
||||
- [ ] `/api/v1/karma` — карма пользователя
|
||||
|
||||
### 3. База данных (PostgreSQL)
|
||||
|
||||
#### Основные таблицы:
|
||||
- `users` — пользователи (id, username, domain, display_name, bio, karma)
|
||||
- `posts` — посты (id, user_id, content, content_type, created_at)
|
||||
- `follows` — подписки (follower_id, following_id, created_at)
|
||||
- `likes` — лайки (user_id, post_id, created_at)
|
||||
- `media` — медиафайлы (id, user_id, filename, mime_type, size)
|
||||
- `activities` — ActivityPub активности (id, type, actor, object, timestamp)
|
||||
|
||||
#### PostgreSQL расширения:
|
||||
- `pg_trgm` — полнотекстовый поиск по постам
|
||||
- `pg_redis` — кэширование лент
|
||||
- `pgqueue` — фоновые задачи (отправка активностей)
|
||||
|
||||
### 4. Экспорт контента
|
||||
|
||||
**Требование**: Пользователь может экспортировать весь свой контент в виде:
|
||||
|
||||
```
|
||||
export_username_2026-03-01/
|
||||
├── profile.md # Информация о профиле
|
||||
├── posts/
|
||||
│ ├── 2026-03-01_post-123.md
|
||||
│ ├── 2026-03-02_post-124.md
|
||||
│ └── ...
|
||||
├── media/
|
||||
│ ├── image-001.png
|
||||
│ ├── image-002.jpg
|
||||
│ └── ...
|
||||
└── manifest.json # Структура экспорта
|
||||
```
|
||||
|
||||
- [ ] Формат постов — Markdown с frontmatter (дата, теги, карма)
|
||||
- [ ] Медиа — оригинальные файлы с переименованием
|
||||
- [ ] Manifest — JSON со списком всех файлов и метаданными
|
||||
- [ ] API endpoint: `GET /api/v1/export/@username`
|
||||
|
||||
### 5. Аутентификация
|
||||
|
||||
- [ ] OAuth2 + JWT токены
|
||||
- [ ] Поддержка Application Passwords для клиентов
|
||||
- [ ] Сессии с возможностью отзыва
|
||||
|
||||
### 6. Карма
|
||||
|
||||
- [ ] Механизм начисления/списания кармы
|
||||
- [ ] Защита от накрутки (лимиты, анти-спам)
|
||||
- [ ] История изменений кармы
|
||||
|
||||
---
|
||||
|
||||
## План разработки бэкенда
|
||||
|
||||
1. [ ] Настройка проекта FastAPI + SQLAlchemy
|
||||
2. [ ] Модели базы данных (users, posts, follows, likes)
|
||||
3. [ ] REST API (CRUD для постов, профили)
|
||||
4. [ ] ActivityPub базовая реализация (Actor, Outbox)
|
||||
5. [ ] ActivityPub полная реализация (Inbox, Federation)
|
||||
6. [ ] Экспорт контента (Markdown + медиа)
|
||||
7. [ ] Система кармы
|
||||
8. [ ] Тестирование совместимости с Mastodon
|
||||
|
||||
---
|
||||
|
||||
## Вопросы для обсуждения
|
||||
|
||||
- [ ] Нужно ли поддерживать совместимость с другими Fediverse-серверами (Pleroma, Pixelfed)?
|
||||
- [ ] Требуется ли rate limiting на API? Какие лимиты?
|
||||
- [ ] Как хранить медиа: локально, S3, или оба варианта?
|
||||
- [ ] Нужна ли модерация контента (админ-панель)?
|
||||
Reference in New Issue
Block a user