Сервис принимает запросы на создание уведомлений, складывает их в очередь (RabbitMQ), а затем, в нужное время — отправляет. Если что-то пошло не так, сервис попробует повторить отправку позже.
- UI - http://localhost:8080/v1/web
- Документация API - Swagger - http://localhost:8080/swagger
- Конфиг - config/config.go. Читается из
.envфайла. - Логгер - pkg/logger/logger.go. Интерфейс позволяет подменить логгер.
- Кеширование статусов оповещений (Redis) - internal/repo/cache/notification_cache.go.
- Удобная и гибкая конфигурация HTTP сервера - pkg/httpserver/options.go.
Позволяет конфигурировать сервер в конструкторе таким образом:
Аналогичный подход с таким конфигурированием в пакетах rabbitmq, redis, smtp sender, ...
httpServer := httpserver.New(httpserver.Port(cfg.HTTP.Port))
- В слое контроллеров применяется версионирование - internal/controller/restapi/v1.
Для версии v2 нужно будет просто добавить папку
restapi/v2с таким же содержимым, в файле internal/controller/restapi/router.go добавить строку:
{
v1.NewNotificationRoutes(apiV1Group, n, l)
}
{
v2.NewNotificationRoutes(apiV1Group, n, l)
}- Graceful shutdown - internal/app/app.go.
Сервис отправляет оповещения на почту через net/smtp, на телеграм через go-telegram-bot-api.
Соответственно, требуются :
- Gmail аккаунт, с него сервис будет слать оповещения. + app-pasword этого аккаунта. Как создать пароль приложения
- Токен телеграм бота. В телеграм найдите @BotFather - официальный бот для создания других телеграм-ботов. Создайте нового бота, получите токен. Также нужно знать, что телеграм-боты имеют право отправлять сообщения только тем юзерам, которые написали им первыми. API телеграма обязывает слать сообщения по chat ID, а не по @username. Найдите в телеграм @userinfobot - у него можно узнать chat ID любого юзера.
- Клонируйте репозиторий
- В корне создайте
.envфайл, скопируйте туда содержимое env.example, подставив вSMTPMAIL_USERNAMEваш gmail, вSMTPMAIL_PASSWORDваш app-password, вTELEGRAM_BOT_TOKENтокен вашего телеграм-бота. - Выполните, дождитесь запуска сервиса
make compose-up - Перейдите на http://localhost:8080/v1/web и пользуйтесь сервисом.
request:
{
"send_at": "2026-01-22T13:55:30+03:00",
"payload": {
"channel": "email",
"email": {
"to": "user@example.com",
"subject": "Alex Birthday",
"text": "Dont forget about Alexs birthday soon"
}
}
}response:
{
"uid": "9a88d642-6c65-4f0f-b8f0-b920182cceb3",
"status": "pending"
}request:
GET http://localhost:8080/v1/notify/9a88d642-6c65-4f0f-b8f0-b920182cceb3
response:
{
"status": "pending"
}request:
DELETE http://localhost:8080/v1/notify/9a88d642-6c65-4f0f-b8f0-b920182cceb3
response:
{
"status": "cancelled"
}Зависимости:
make deps
docker compose down -v:
make compose-down