Skip to content

Подсистема начисления бонусов к заказам для интернет-магазина

Notifications You must be signed in to change notification settings

ashandi/bonuses-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

bonuses-system

Подсистема начисления бонусов к заказам для интернет-магазина

Задача

Необходимо создать систему, которая будет начислять бонусы на переданный заказ, основываясь на его итоговой сумме. Бонусы могут начисляться в любой заказ, либо в заказ, достигший определенной суммы, либо за каждую определенную сумму в заказе (например, 1 бонус за каждую 1000 р в заказе). Бонусы должны хранится в БД и редактироваться из панели администратора.

Решение

Начислением бонусов занимается класс BonusesManager из папки App\Service. Для каждого типа бонуса (в каждый заказ - EveryOrder, за каждую сумму - EveryPrice и при достижении определенной суммы - ReachedPrice) определен хандлер, имеющий метод check для проверки, подходит ли заказ под условие этого типа бонусов, и метод calculateQuantity для посчета количества начисляемых на заказ бонусов. Все три хандлера забиндены в контейнер.

BonusManager получает из репозитория коллекцию всех доступных бонусов, по очереди для каждого получает хандлер, основываясь на типе конкретного бонуса, через метод getHandler (паттерн Фабричный метод), проверяет заказ через метод check хандлера, и если необходимо начисляет на заказ бонусы в количестве, получаемом из метода calcualteQuantity хандлера.

При такой системе обрабатывающий код не будет меняться при добавлении новых типов бонусов. Суммы и начисляемые количества бонусов, при этом хранятся в БД и доступны для редактирования.

About

Подсистема начисления бонусов к заказам для интернет-магазина

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages