itxor / test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Основная информация

Сервис уведомлений позволяет пользователям получить уведомление на почту об скором окончании срока подписки. Разработан на чистом PHP 8-ой версии, с минимальным количеством зависимостей.

Концепция работы

Сервис делает 2 основные действия: проверяет пользовательские email'ы, добавляемые в базы, и отправляет пользователям сообщения на почту, когда срок их подписки заканчивается через +- 3 дня. В качестве реализации был выбран подход с запуском команд через cron, так как это упрощает структуру работы сервиса и решает поставленную задачу без дополнительного оверхеда в виде веб-сервера.

Команды, запускаемые через cron:

  • src/Command/CheckUsersEmailsCommand.php - валидация пользовательских email'ов
  • src/Command/CheckUsersSubscriptionCommand.php - проверка подписок пользователей

Учитывая паттерн работы php, для избежания долгой работы процессов, команды сбрасывают все проверяемые ими данные в exchange rabbit, который, в свою очередь, разбрасывает сообщения по воркерам.

Воркеры подразумевают постоянную работу в памяти, поэтому их запуск предполагает инструменты демонизации, например - supervisor

  • src/Command/EmailValidateConsumer - consumer, работающий с задачами на валидацию email'ов
  • src/Command/UserCheckSubscriptionConsumer - consumer, работающий с задачами на проверку подписки пользователей

Запуск

Перед запуском нужно скопировать .env.dist в .env, и заменить параметры на актуальные.

Сервис докеризован, запустить можно посредством выполнения команды:

docker-compose up --build

Установка зависимостей:

docker-compose exec php composer install

Задачи в cron и воркеры через supervisor в docker не интегрированы, могу сделать по запросу.

Заполнение базы

В качестве библиотеки для работы с миграциями была выбрана библиотека phinx - https://phinx.org/, как наиболее легковесное и поддерживаемое решение с активным комьюнити. Накатка миграций выполняется посредством выполнения внутри контейнера php команды:

./vendor/bin/phinx migrate -e dev

Заполнение базы тестовыми данными можно выполнить посредством выполнения команды:

./vendor/bin/phinx seed:run

About


Languages

Language:PHP 98.0%Language:Dockerfile 2.0%