R_ShipDays

HappyEvents

Бэкенд афиши мероприятий с подписками и уведомлениями через NATS

REST-бэкенд афиши мероприятий для Хуахина (Таиланд): организаторы публикуют события с ценами, повторами и геоданными, посетители фильтруют афишу, отмечают участие, оставляют отзывы и подписываются на напоминания. Напоминания уходят через NATS JetStream в отдельный сервис уведомлений с отправкой в Telegram.

Статус
MVP бэкенда, 2024
Период
Октябрь — декабрь 2024
Формат
Командная разработка, 2 Go-разработчика
Роль
Техлид: архитектура, основная часть кода, ревью и мёрж PR
Схема HappyEvents: афиша, подписки и уведомления через NATS в Telegram
эндпоинта API
42эндпоинта API
миграций
14миграций
таблиц
16таблиц
коммита за 2 месяца
102коммита за 2 месяца

Задача

Сделать афишу, где организатор сам публикует событие, а посетитель не пропускает интересное: фильтры по датам и категориям, отметка «пойду» и напоминание в Telegram перед началом.

Что сделано

  • События с фильтрами по дате (сегодня, неделя, месяц), городу и категории, пагинация
  • Цены по возрастным группам, счётчик просмотров с дедупликацией по пользователю или IP
  • Повторяющиеся события по RRULE, приватные события по ссылке, онлайн-события с трансляцией
  • Отметки «пойду / возможно», отзывы с рейтингом 1–5, подписки на событие
  • Картинки, координаты и адрес события
  • Блог для админов с тегами и форма обратной связи с ограничением частоты
  • 4 роли: администратор, модератор, организатор, участник

Инженерные решения

  • Напоминания через NATS JetStream: фоновый тикер публикует наступившие подписки с дедупликацией по MsgId, durable-консьюмер отмечает доставку
  • Отдельный сервис уведомлений отправляет напоминания в Telegram
  • 11 доменов, каждый по слоям controller → usecase → repository с интерфейсами
  • Миграции goose вшиты в бинарь и применяются при старте

Инфраструктура и DevOps

  • Docker-образ на distroless, compose с PostgreSQL, NATS и Caddy
  • Работа через pull request: 11 влитых PR с ревью

Стек

  • Go
  • Gin
  • PostgreSQL
  • pgx
  • goose
  • NATS JetStream
  • JWT
  • Docker
  • Caddy

Нужен похожий проект?

Короткий бриф в Telegram, ответ лично от меня в течение дня.