Тестовое задание Clevertec
Это приложение предназначено для создания чека на основе переданных данных о товарах и дисконтных картах. Приложение считывает данные из базы данных PostgreSQL, принимает параметры через командную строку и генерирует CSV файл с результатами.
src/main/java/ru/clevertec/check/CheckRunner.java
- основной класс для запуска приложения.src/main/resources/data.sql
- файл с DDL и DML операциями для базы данных.result.csv
- файл, в который сохраняется чек.
Таблица product
должна содержать информацию о продуктах в следующем формате:
id | description | price | quantity_in_stock | wholesale_product |
---|---|---|---|---|
1 | Product 1 | 10.00 | 100 | true |
2 | Product 2 | 20.00 | 50 | false |
... | ... | ... | ... | ... |
Таблица discount_card
должна содержать информацию о дисконтных картах в следующем формате:
id | number | discount_amount |
---|---|---|
1 | 1111 | 5 |
2 | 2222 | 10 |
... | ... | ... |
Для запуска приложения используйте следующую команду:
java -jar clevertec-check.jar id-quantity discountCard=xxxx balanceDebitCard=xxxx saveToFile=xxxx datasource.url=xxxx datasource.username=xxxx datasource.password=xxxx
где:
id-quantity
- идентификатор товара и его количество. Например,1-3
означает товар с id=1 в количестве 3 штук.discountCard=xxxx
- номер дисконтной карты (четыре цифры).balanceDebitCard=xxxx
- баланс на дебетовой карте.saveToFile=xxxx
- путь к файлу для сохранения результата (обязательный параметр).datasource.url=xxxx
- URL для подключения к базе данных PostgreSQL.datasource.username=xxxx
- имя пользователя для подключения к базе данных.datasource.password=xxxx
- пароль для подключения к базе данных.
java -jar clevertec-check.jar 3-1 2-5 5-1 discountCard=1111 balanceDebitCard=100 saveToFile=./result.csv datasource.url=jdbc:postgresql://localhost:5432/check datasource.username=postgres datasource.password=postgres
В этом примере:
3-1
- товар с id=3 в количестве 1 штука.2-5
- товар с id=2 в количестве 5 штук.5-1
- товар с id=5 в количестве 1 штука.discountCard=1111
- предъявлена дисконтная карта с номером 1111.balanceDebitCard=100
- баланс на дебетовой карте равен 100.saveToFile=./result.csv
- указан путь для сохранения результата.datasource.url=jdbc:postgresql://localhost:5432/check
- URL базы данных PostgreSQL.datasource.username=postgres
- имя пользователя для базы данных PostgreSQL.datasource.password=postgres
- пароль для базы данных PostgreSQL.
После выполнения команды в указанном файле saveToFile
будет создан CSV файл с результатами, содержащий список товаров, их количество, цену и рассчитанную сумму с учетом скидки по предъявленной карте (если она есть). Также чек будет продублирован в консоль.
Date;Time
2024-07-01;10:30:45
QTY;DESCRIPTION;PRICE;DISCOUNT;TOTAL
1;Product 3;30.00$;3.00$;27.00$
5;Product 2;20.00$;10.00$;90.00$
1;Product 5;50.00$;5.00$;45.00$
DISCOUNT CARD;DISCOUNT PERCENTAGE
1111;5
TOTAL PRICE;TOTAL DISCOUNT;TOTAL WITH DISCOUNT
155.00$;18.00$;137.00$
- Название и путь к SQL-файлу:
data.sql
должен находиться по пути./src/main/resources/data.sql
.
- Все параметры указываются через пробел.
- В наборе параметров должна быть минимум одна связка
id-quantity
. - Номер дисконтной карты должен содержать ровно четыре цифры.
- Баланс дебетовой карты может быть как положительным, так и отрицательным.
- Идентификаторы товаров могут повторяться: например,
1-3 2-5 1-1
эквивалентно1-4 2-5
. - При количестве оптового товара от пяти и более штук на эту позицию применяется скидка 10%, персональная скидка по карте на эту позицию не действует.
- Если не передан аргумент
saveToFile
, ошибка будет сохранена в файлresult.csv
. - Настройки подключения к БД передаются через аргументы командной строки и являются обязательными параметрами.