Skip to content

vesh95/messages-registry

Repository files navigation

Тестовое Teletype App. Бэкенд-разработчик (PHP+Yii2)

Краткое описание задачи

Создать API endpoint.

  • Принимает POST-запросы без авторизации с сообщением из внешнего мессенджера содержащим следующие параметры:
  • external_message_id:string (уникальный внешний идентификатор сообщения - 16 байт)
  • external_client_id:string (уникальный внешний идентификатор клиента - 16 байт)
  • client_phone:string (номер телефона с +7. Пример - +79194961182. Допустим, что номера могут быть только российские (12 символов))
  • message_text:string (текст сообщения - до 4096 символов)
  • send_at:integer (дата-время отправки в формате unixtime).
  • Сохраняет данные в 3 таблицы: clients: информация о клиентах, dialogs: диалоги, связанные с клиентами, messages: сообщения внутри диалогов.
  • Обрабатывает дубликаты, обеспечивает целостность данных и высокую производительность.

Пояснения:

Для разработки был выбран фреймворк yii2 в минималистичном виде, в программном коде намеренно выбраны решения с наименьшим кол-вом абстракций. Для большего контроля над запросами было отброшено использование ActiveRecord, прямые SQL запросы позволяют за один запрос проверить и вставить данные в БД.

В БД добавлены требуемые таблицы, в каждой имеется первичный ключ и индекс по нему в dialogs добавлен clients_uniq для уникализации диалога к пользователю.

Реализовано кэширование по id сообщения для того, чтобы не обращаться к реляционным данным если этот id уже имеется в базе.

Для улучшения производительности приложение лучше запускать через php-fpm, на случай возросшей нагрузки иметь возможность реплицировать инстансы с приложением, для обработки множества подключений использовать pgbouncer. Желательно кластеризировать redis т.к. появляется необходимость хранить большое кол-во данных в памяти или же периодически старые ключи очищать.

About

Test application for Teletype App

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages