Skip to content

Toxanetoxa/emailSend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Email Sender

Email Sender - это проект на Go, который реализует компонент системы для отправки писем через очередь. Этот компонент может использоваться несколькими экземплярами приложения одновременно, обеспечивая stateless отправку писем.

Особенности

1. Определение интерфейсов и структур

Интерфейсы и структуры определены для отправки email и работы с очередью.

2. Реализация компонента отправки писем

Используется библиотека для отправки email, предоставляющая возможность легко заменить её на любую другую.

3. Добавление очереди и подключения к брокеру

Реализована очередь для хранения писем, без привязки к конкретному брокеру (Redis, RabbitMQ, Kafka и т.д.).

3. Добавление ограничения на количество отправленных писем

Возможность установки лимита на количество отправляемых писем в минуту.

4. Написание тестов с использованием моков

Полное покрытие тестами, использующими моки для отправки писем и работы с очередью.

5. Подготовка места для метрик

Предусмотрено место для внедрения метрик в будущем (например, для Prometheus).

Установка

  1. Создайте .env.prod файл:

  2. Перейдите в папку с Docker файлами:

cd docker
  1. Создайте Docker сеть:
docker network create email-sender
  1. Запустите Docker Compose:
docker-compose up -d

Использование

Интерфейс email

package email

type Message struct {
	To      string `json:"to"`
	Subject string `json:"subject"`
	Body    string `json:"body"`
}

TODO:

  1. Отправка сообщений происходит по таймеру. Приложению нужно отправлять письмо как только оно появилось в очереди, не дожидаясь таймеров. Использовать таймер для отслеживания лимита. +
  2. В сигнатуру Send стоит добавить контекст. +
  3. Добавить ошибки на уровне пакета, вместо fmt.Errorf для удобства их отлавливания в других пакетах (и тестах). +
  4. log вместо fmt.Print, консистентный лог с единым форматом всегда лучше). +
  5. в Dockerfile лучше использовать multistage сборку. +
  6. Добавить негативные кейсы, и применить табличные тесты. // с тестами пока шляпа, нужно больще времени чтобы поглубже разобраться
  7. Перенести интерфейсы в места их использования. // (у меня один интерфей используетс в двух местах, поэтому я его вынес отдельно и импортировал в оба места, возможно раз у меня так получилось, то я не правильно построил приложение???)
  8. Убрать комментарии в docker-compose. +/-
  9. Порт 8080 кажется, что не используется, его не нужно открывать наружу. (поменял на 587 +/- честно говоря не уверен, что это правильно)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published