Git Product home page Git Product logo

testwork's Introduction

Сервис уведомлений

Стек Python, Django, DRF, PostgreSQL для админики Django admin

Тестовое задание для кандидатов-разработчиков Тестовое задание – дополнительный способ для нас убедиться в вашей квалификации и понять, какого рода задачи вы выполняете эффективнее всего.

Расчётное время на выполнение тестового задания: 3-4 часа, время засекается нестрого. Приступить к выполнению тестового задания можно в любое удобное для вас время.

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

Задача Необходимо разработать сервис управления рассылками API администрирования и получения статистики.

Описание • Необходимо реализовать методы создания новой рассылки, просмотра созданных и получения статистики по выполненным рассылкам.

• Реализовать сам сервис отправки уведомлений на внешнее API.

• Опционально вы можете выбрать любое количество дополнительных пунктов описанных после основного.

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

Критерии приёмки • Выполненное задание необходимо разместить в публичном репозитории на gitlab.com

• Понятная документация по запуску проекта со всеми его зависимостями

• Документация по API для интеграции с разработанным сервисом

• Описание реализованных методов в формате OpenAPI

• Если выполнено хотя бы одно дополнительное задание - написать об этом в документации, указав на конкретные пункты из списка ниже.

Основное задание Спроектировать и разработать сервис, который по заданным правилам запускает рассылку по списку клиентов.

Сущность "рассылка" имеет атрибуты:

• уникальный id рассылки

• дата и время запуска рассылки

• текст сообщения для доставки клиенту

• фильтр свойств клиентов, на которых должна быть произведена рассылка (код мобильного оператора, тег)

• дата и время окончания рассылки: если по каким-то причинам не успели разослать все сообщения - никакие сообщения клиентам после этого времени доставляться не должны

Сущность "клиент" имеет атрибуты:

• уникальный id клиента

• номер телефона клиента в формате 7XXXXXXXXXX (X - цифра от 0 до 9)

• код мобильного оператора

• тег (произвольная метка)

• часовой пояс

Сущность "сообщение" имеет атрибуты:

• уникальный id сообщения

• дата и время создания (отправки)

• статус отправки

• id рассылки, в рамках которой было отправлено сообщение

• id клиента, которому отправили

Спроектировать и реализовать API для:

• добавления нового клиента в справочник со всеми его атрибутами

• обновления данных атрибутов клиента

• удаления клиента из справочника

• добавления новой рассылки со всеми её атрибутами

• получения общей статистики по созданным рассылкам и количеству отправленных сообщений по ним с группировкой по статусам

• получения детальной статистики отправленных сообщений по конкретной рассылке

• обновления атрибутов рассылки

• удаления рассылки

• обработки активных рассылок и отправки сообщений клиентам

Логика рассылки • После создания новой рассылки, если текущее время больше времени начала и меньше времени окончания - должны быть выбраны из справочника все клиенты, которые подходят под значения фильтра, указанного в этой рассылке и запущена отправка для всех этих клиентов.

• Если создаётся рассылка с временем старта в будущем - отправка должна стартовать автоматически по наступлению этого времени без дополнительных действий со стороны пользователя системы.

• По ходу отправки сообщений должна собираться статистика (см. описание сущности "сообщение" выше) по каждому сообщению для последующего формирования отчётов.

• Внешний сервис, который принимает отправляемые сообщения, может долго обрабатывать запрос, отвечать некорректными данными, на какое-то время вообще не принимать запросы. Необходимо реализовать корректную обработку подобных ошибок. Проблемы с внешним сервисом не должны влиять на стабильность работы разрабатываемого сервиса рассылок.

API внешнего сервиса отправки Для интеграции с разрабатываемым проектом в данном задании существует внешний сервис, который может принимать запросы на отправку сообщений в сторону клиентов.

OpenAPI спецификация находится по адресу: https://probe.fbrq.cloud/docs

В этом API предполагается аутентификация с использованием JWT. Токен доступа предоставлен вам вместе с тестовым заданием.

Дополнительные задания Опциональные пункты, выполнение любого количества из приведённого списка повышают ваши шансы на положительное решение о приёме

организовать тестирование написанного кода

обеспечить автоматическую сборку/тестирование с помощью GitLab CI

подготовить docker-compose для запуска всех сервисов проекта одной командой

написать конфигурационные файлы (deployment, ingress, …) для запуска проекта в kubernetes и описать как их применить к работающему кластеру

сделать так, чтобы по адресу /docs/ открывалась страница со Swagger UI и в нём отображалось описание разработанного API. Пример: https://petstore.swagger.io

реализовать администраторский Web UI для управления рассылками и получения статистики по отправленным сообщениям

обеспечить интеграцию с внешним OAuth2 сервисом авторизации для административного интерфейса. Пример: https://auth0.com

реализовать дополнительный сервис, который раз в сутки отправляет статистику по обработанным рассылкам на email

удаленный сервис может быть недоступен, долго отвечать на запросы или выдавать некорректные ответы. Необходимо организовать обработку ошибок и откладывание запросов при неуспехе для последующей повторной отправки. Задержки в работе внешнего сервиса никак не должны оказывать влияние на работу сервиса рассылок.

реализовать отдачу метрик в формате prometheus и задокументировать эндпоинты и экспортируемые метрики

реализовать дополнительную бизнес-логику: добавить в сущность "рассылка" поле "временной интервал", в котором можно задать промежуток времени, в котором клиентам можно отправлять сообщения с учётом их локального времени. Не отправлять клиенту сообщение, если его локальное время не входит в указанный интервал.

обеспечить подробное логирование на всех этапах обработки запросов, чтобы при эксплуатации была возможность найти в логах всю информацию по

• id рассылки - все логи по конкретной рассылке (и запросы на api и внешние запросы на отправку конкретных сообщений)

• id сообщения - по конкретному сообщению (все запросы и ответы от внешнего сервиса, вся обработка конкретного сообщения)

• id клиента - любые операции, которые связаны с конкретным клиентом (добавление/редактирование/отправка сообщения/…)

testwork's People

Contributors

hopes9 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.