Тестовое задание для Elixir разработчиков
Необходимо создать API для онлайн магазина. Для покупки необходимо создать корзину, добавить туда товары и затем купить все товары из корзины. API подразумевает возможности просматривать список всех продуктов, список корзин.
Для написания должны использоваться Elixir, Phoenix, Ecto, PostgreSQL, GraphQL(Absinthe), ExUnit.
Ожидается использование GenServer для хранения данных корзин.
Параметры:
name
- латиница и цифры
amount
- количество
Ответ: созданный продукт
Параметры:
id
- id корзины, опциональный, если не указан - показывать список всех продуктов
Ответ: список всех продуктов с актуальным для указанной корзины количеством (или общим количеством)
Ответ: id корзины
Параметры:
id
- id корзины
name
- название товара
amount
- количество товара
Ответ: обновленная корзина
После этого запроса из общего числа товара в списке list_items
с id корзины должны быть вычтены добавленные товары. Если товара не осталось - он не должен больше выводиться в списке list_items
.
Например:
1. list_items {id: 1}
=> [{id: 1, name: "item1", amount: 3}]
2. add_to_cart {id: 1, name: "item1", amount: 2}
=> [{id: 1, name: "item1", amount: 2}]
3. list_items {id: 1}
=> [{id: 1, name: "item1", amount: 1}]
Параметры:
id
- id корзины
После этого запроса из общего числа товара должны быть вычтены купленные товары. Если товара не осталось - он не должен больше выводиться в списке list_items
. Корзина перестает отображаться в списке list_carts
.
Ответ: список купленных товаров (из этой корзины)
Параметры:
id
- id корзины
Ответ: id корзины
После этого запроса корзина удаляется и не отображается в списке list_carts
.
Ответ: список действующих корзин со списком товаров и количеством
Валидация, а также обработка граничных случаев приветствуется и будет плюсом при оценке.
Для упрощения задачи, купленные товары и корзины можно считать удаленными и не хранить.
Проект выкладывайте на github и присылайте ссылку на почту info@aeon.world