HappyEvents
Бэкенд афиши мероприятий с подписками и уведомлениями через NATS
REST-бэкенд афиши мероприятий для Хуахина (Таиланд): организаторы публикуют события с ценами, повторами и геоданными, посетители фильтруют афишу, отмечают участие, оставляют отзывы и подписываются на напоминания. Напоминания уходят через NATS JetStream в отдельный сервис уведомлений с отправкой в Telegram.
- Статус
- MVP бэкенда, 2024
- Период
- Октябрь — декабрь 2024
- Формат
- Командная разработка, 2 Go-разработчика
- Роль
- Техлид: архитектура, основная часть кода, ревью и мёрж PR

- эндпоинта 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


