Проектът представлява частична симулация на физически магазин чрез интерфейс през команндия ред (CLI).
Важно правило в имплементацията е методите в моделите да не реализират бизнес логика, в която участници са обекти и от други модели. Когато това е необходимо, въпросното действие се изплементира като команда (commands.Command
). Всички налични команди се описват в App::commands
.
За улесняване на работата при четене и валидиране на вход са изградени съответно абстракциите cli.Reader
и validation.Rule
, които не допускат потребителят да продължи напред, докато не въведе стойност, която удовлетворява всички правила, които са указани при инстанцирането на всяко поле.
Проектът е направен така, че да може всяка една част от него да се тества. Това означава, че не се използват статични методи, а само инстанционни такива.
- SKU;
- име;
- доставна цена;
- тип (стойности от
models.Category
); - дата на изтичане на годността;
add_product
SKU-1234
My product
10.55
GROCERY
2023-06-23
- Марж за всеки един от типовете продукти;
- отстъпка за продукти с изтичащ срок на годност;
- от колко дни преди изтичането на срока на годност да се прилага отстъпката за това;
- информация за служителите в магазина - служебен номер, имена и месечна заплата.
add_shop
10
5
3
2
3
2
S1C1
Petko
1500.50
S1C2
Ivanko
1600
- SKU на продукта;
- количество
- магазин, в който да се зареди.
add_product_in_shop
SKU-1234
5
0
- Магазин;
- служебен номер на служителя;
- каса, на която да отиде.
set_cashier_desk
0
S1C2
2
- Стойност в портфейл;
- магазин;
- SKU и количество на продуктите, които иска да купи. При въвеждане на празен ред се спира въвеждането им.
- избор на отворена каса, на която да се нареди.
add_customer
0
0
SKU-1234
6
3
0
- магазин;
- отворена каса.
serve_cash_desk
0
0