Необходимо спроектировать сервис PromocodeService для WEB проекта, который что-то продаёт.
Условия:
- Промокод - это сущность, которая состоит из: код (символьная строка, которую пользователи будут вводить при оформлении заказа для получения скидки) и размер скидки (процент от стоимости заказа).
- Сервис должен уметь генерировать промокод (получать на вход размер скидки и отдавать в ответ код промокода) и отдавать размер скидки по промокоду (получать на вход код промокода и отдавать по нему размер скидки или ошибку, если промокод не действителен).
- У сервиса должен быть REST API, по которому будет осуществляться взаимодействие с другими сервисами. Авторизация на данном этапе не требуется.
- Промокод может быть одноразовым и многоразовым. Если промокод многоразовый, то у него есть или лимит количества использований, или дата, до которой он действует.
- Код промокода должен быть по возможности коротким, т.е. использовать в качестве него, например, UUID или MD5-хэш нельзя. Продакт-менеджер говорит, что чем короче - тем лучше, но строго длина не задана.
- На старте понадобятся два формата кода промокода - рандомная строка из полного набора символов (
[a-zA-Z0-9]
) и произвольная строка только из цифр. Затем, возможно, потребуются другие форматы. Указание, какой формат использовать, будет поступать в запросе на генерацию промокода. - Стек технологий - Symfony и PostgreSQL, при необходимости - Redis.
Проработать:
- алгоритмы генерации кодов промокодов,
- дизайн API,
- схему и индексы базы данных,
- примерные классы/интерфейсы.