Документация к проекту расположена в docs
Список задач, по которому можно отслеживать прогресс проекта.
Прогресс: 107/107 (100%) Задач всего: 107 Выполнено: 107 Осталось: 0
Задачи, связанные с инфраструктурой сервиса, деплоем и локальной разработкой.
- (4/4) Локальная разработка
- docker-compose
- Makefile
- Air (live reload)
- Миграции
- (5/5) Деплой
- Домен
- DNS
- Postgres
- Redis
- Server
Задачи на серверную часть проекта.
- (13/13) User service
- Миграция БД
- Domain структуры
- SQLC запросы
- Создание профиля
- Удаление профиля
- Логин
- Разлогин
- Поиск пользователей
- Обновление профиля
- Создание сессии
- Удаление сессии
- Аутентификационная middleware
- Интеграция с фронтендом для login/signup/me
- (8/8) DM service (личные сообщения)
- Миграция БД
- Domain структуры
- SQLC запросы
- Создание DM
- Список DM пользователя
- Сообщения (первая/следующие страницы)
- Ручка чтения DM:
POST /v1/dm/read - Интеграция с Hub (WebSocket)
- (11/11) Server service (публичные сервера с топиками)
- Миграция БД (servers, topics)
- Domain структуры
- SQLC запросы
- Создание сервера
- Обновление сервера
- Удаление сервера
- Присоединение к серверу
- Выход из сервера
- CRUD топиков
- Сообщения в текстовых топиках
- Интеграция с Hub (WebSocket)
- (12/13) WebSocket Hub (realtime сообщения + signaling)
- WebSocket endpoint
/ws/ - Ping/pong heartbeat
- Redis pub/sub доставка событий пользователю
- Join канала DM/text topic с проверкой доступа
- Leave канала
- Broadcast сообщений участникам DM/text topic
- Глобальная доставка DM-событий пользователю для live sidebar/notifications
- Join канала voice topic с проверкой доступа
- Call events (start/end/join/leave)
- WebRTC signaling (offer, answer, ice candidates)
- Call room management для voice топиков
- Нотификация дисконекта участников звонка
- Broadcast участникам звонка
- WebSocket endpoint
- (5/5) Voice Topic Service
- Redis: хранение активных звонков
- Создание/удаление комнаты звонка
- Вход/выход участников
- Signaling: обработка offer/answer
- Signaling: обработка ICE candidates
Задачи на клиентскую часть проекта (SolidJS).
- (4/4) Общее
- Vite + SolidJS зависимость
- Общие стили (Tailwind CSS)
- Toast уведомления
- UI компоненты (Button, FormTextInput, Modal, avatar)
- (3/3) Страницы
- Страница логина (UI + API)
- Страница регистрации (UI + API)
- Главная страница App (UI + роутинг)
- (20/20) Sidebar
- Tab switching (direct/servers)
- Компоненты SidebarServer, SidebarDM
- API: загрузка списка серверов
- API: загрузка списка DM
- API/UI: поиск серверов
- API/UI: поиск пользователей и создание DM из поиска
- API: создание сервера
- API/UI: присоединение к серверу
- API/UI: выход из сервера
- UI: сервер с топиками
- UI/API: создание, обновление и удаление сервера
- UI/API: создание, обновление и удаление топика
- UI: каркас модалки настроек профиля
- API/UI: обновление профиля
- API/UI: загрузка и удаление аватара
- API/UI: разлогин
- JS: menu-bar + content-bar communication
- JS: состояние вкладок через URL (
/dm,/server) - JS: получение данных профиля
- JS: обновление списков после мутаций без ручного reload
- (11/11) Чат
- Компонент Chat
- Компонент ChatMessage
- Компонент ChatInput
- WebSocket клиент с переподключением
- Единое WebSocket подключение без сброса при переходах между чатами
- API: отправка сообщения
- API: загрузка истории
- API: пометка DM прочитанным при live-сообщении в открытом чате
- JS: авто-прокрутка к новым сообщениям
- JS: догрузка старых сообщений по cursor при скролле вверх
- JS: live preview/unread для DM и toast-нотификации входящих сообщений
- (10/10) Звонки
- Media hook для локальных устройств
- Поддержка микрофона
- Поддержка камеры
- Поддержка трансляции экрана
- UI: кнопки звонка и настройки устройств
- UI: локальный preview stream
- WebRTC peer/signaling hook
- UI: отображение удаленных участников
- Интеграция с signaling WebSocket
- Call UI подключает пользователя к backend-комнате voice topic
- sort services, topics, dms
- Подключить profile settings modal к реальным
/v1/user/*endpoint'ам вместо неподключенных HTML form handlers - Дописать закомментированный
internal/service/voice_topic - Добавить e2e/unit тесты для сервисов и API handlers
- перенести toast в entry
- Turn server
- Unit tests
- E2E tests
- Notifications
- Desc package
- Password as struct
-> function call <- PUBSUB by user_id
user -> ws : {join, chat_id} ws -> rabbitmq : PUBLISH chat_events {chat_id, join, user_id} rabbitmq -> chat : CONSUME chat_events {chat_id, join, user_id} chat -> reddis : SET chat:chat_id:active
user -> chat : POST /v1/api/chat/message {chat_id, message} chat -> reddis : GET chat:chat_id:active chat -> rabbitmq : PUBLISH user_events_exchange {chat_id, message} rabbitmq -> ws : CONSUME user_events_queue {chat_id, join, user_id}
user -> ws : {join, call_id} ws -> call : JoinUser(call_id, user_id, conn_id) call -> reddis : SET call:{call_id}:lock {service_id} NX PX 10000 call -> rabbitmq : PUBLISH user_events_exchange {conn_id, call, message} rabbitmq -> ws : CONSUME user_events_queue {chat_id, join, user_id} user -> ws : {join_ok, chat_id}