Мы работаем в интернет магазине, который продаёт стеклоблоки. Наш маркетинговый отдел решил провести акцию по розыгрышу призов среди наших клиентов. Розыгрыш проводится в 2 этапа: в течении периода акции клиент должен дать согласие на участие в конкурсе и выполнить одно из действий: купить стеклоблок или привести друга, который купит стеклоблок по его промокоду. За это - клиент получает виртуальный "билетик" с номером. После окончания периода выпуска билетиков - криптостойкий генератор псевдослучайных чисел определит номер билета-победителя и его владельцу будет доставлена целая газель стеклоблоков (хочет он этого или нет).
Оповестить нас о совершённой покупке или об активации промокода взялась команда продаж, организация стрима с определением победителя по номеру билета - за командой маркетинга (да у них тоже есть программисты!). Наша задача разработать ядро этой системы: микросервис отслеживающий действия пользователей и выпускающий билетики.
- У фронтового приложения должна быть возможность узнать какие из условий выполнены пользователем. Есть ли у пользователя согласие на участие в конкурсе? Сделал ли он покупку в период проведения конкурса? Использовал ли кто-то его промокод?
- Фронтовое приложение должно иметь возможность зарегистрировать согласие пользователя на участие в конкурсе
- Фронт должен иметь возможность получить номер "билета" пользователя для отображения пользователю на странице акции
- Каждый пользователь выполнивший условия должен получить "билет"
- Пользователь не может получить более одного "билета", даже если выполнит условия несколько раз (сделает несколько покупок, или его промокод будет использован несколько раз)
- Порядок совершения действий не важен
- Должны учитываться те и только те действия, что совершены в период проведения акции