Skip to content

prev0id/chattery

Repository files navigation

Chatter - Group chatting app

Logo

Документация к проекту расположена в docs

TODO

Список задач, по которому можно отслеживать прогресс проекта.

Прогресс: 107/107 (100%) Задач всего: 107 Выполнено: 107 Осталось: 0

Infra (9/9 ~100%)

Задачи, связанные с инфраструктурой сервиса, деплоем и локальной разработкой.

  • (4/4) Локальная разработка
    • docker-compose
    • Makefile
    • Air (live reload)
    • Миграции
  • (5/5) Деплой
    • Домен
    • DNS
    • Postgres
    • Redis
    • Server

Backend (50/50 100%)

Задачи на серверную часть проекта.

  1. (13/13) User service
    • Миграция БД
    • Domain структуры
    • SQLC запросы
    • Создание профиля
    • Удаление профиля
    • Логин
    • Разлогин
    • Поиск пользователей
    • Обновление профиля
    • Создание сессии
    • Удаление сессии
    • Аутентификационная middleware
    • Интеграция с фронтендом для login/signup/me
  2. (8/8) DM service (личные сообщения)
    • Миграция БД
    • Domain структуры
    • SQLC запросы
    • Создание DM
    • Список DM пользователя
    • Сообщения (первая/следующие страницы)
    • Ручка чтения DM: POST /v1/dm/read
    • Интеграция с Hub (WebSocket)
  3. (11/11) Server service (публичные сервера с топиками)
    • Миграция БД (servers, topics)
    • Domain структуры
    • SQLC запросы
    • Создание сервера
    • Обновление сервера
    • Удаление сервера
    • Присоединение к серверу
    • Выход из сервера
    • CRUD топиков
    • Сообщения в текстовых топиках
    • Интеграция с Hub (WebSocket)
  4. (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 участникам звонка
  5. (5/5) Voice Topic Service
    • Redis: хранение активных звонков
    • Создание/удаление комнаты звонка
    • Вход/выход участников
    • Signaling: обработка offer/answer
    • Signaling: обработка ICE candidates

Frontend (48/48 ~100%)

Задачи на клиентскую часть проекта (SolidJS).

  1. (4/4) Общее
    • Vite + SolidJS зависимость
    • Общие стили (Tailwind CSS)
    • Toast уведомления
    • UI компоненты (Button, FormTextInput, Modal, avatar)
  2. (3/3) Страницы
    • Страница логина (UI + API)
    • Страница регистрации (UI + API)
    • Главная страница App (UI + роутинг)
  3. (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
  4. (11/11) Чат
    • Компонент Chat
    • Компонент ChatMessage
    • Компонент ChatInput
    • WebSocket клиент с переподключением
    • Единое WebSocket подключение без сброса при переходах между чатами
    • API: отправка сообщения
    • API: загрузка истории
    • API: пометка DM прочитанным при live-сообщении в открытом чате
    • JS: авто-прокрутка к новым сообщениям
    • JS: догрузка старых сообщений по cursor при скролле вверх
    • JS: live preview/unread для DM и toast-нотификации входящих сообщений
  5. (10/10) Звонки
    • Media hook для локальных устройств
    • Поддержка микрофона
    • Поддержка камеры
    • Поддержка трансляции экрана
    • UI: кнопки звонка и настройки устройств
    • UI: локальный preview stream
    • WebRTC peer/signaling hook
    • UI: отображение удаленных участников
    • Интеграция с signaling WebSocket
    • Call UI подключает пользователя к backend-комнате voice topic

To fix

  • sort services, topics, dms
  • Подключить profile settings modal к реальным /v1/user/* endpoint'ам вместо неподключенных HTML form handlers
  • Дописать закомментированный internal/service/voice_topic
  • Добавить e2e/unit тесты для сервисов и API handlers
  • перенести toast в entry

Extra (на подумать)

  • Turn server
  • Unit tests
  • E2E tests
  • Notifications
  • Desc package
  • Password as struct

работа очередей

Messaging

-> 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}

Call service

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}

About

Chattery - Group Chatting App

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages