Створити консольну версію інтернет аукціону.
Програма дозволяє купувати товари за фіксовану ціну або на аукціоні між різними користувачами.
Програма має складатися з трьох логічних частин:
backend - для обробки команд і даних,
historyLoader - для завантаження історії команд при запуску програми
userInterface - для консольної взаємодії з користувачем
reports - для створення звітів
backend
Містить класи для представлення товарів, користувачів, ставок (bids) на аукціоні, та мехінізм для їх збереження.
Містить логічний функціонал перевірки вхідних даних при створенні вищеперелічених об'єктів.
Користувач має інформацію про свій тип, логін, пароль, ПІБ, країну, номер кредитної картки, історію покупок та ставок, рейтинг продавця (0-100), відмітку перевіреного продавця (встановлюється адміністратором аукціону), рейтинг покупця (0-100) (очивидно, що підкреслені властивості можуть виникнути тільки всередині аукціону, і не можуть бути завантажені з файлу).
Типи користувачів: адміністратор, користувач.
Адміністратор не може продавати/купувати товари, але може блокувати користувачів, надавати їм відмітку перевіреного продавця, блокувати позиції аукціону (модерація).
Товар має назву, опис, кількість одиниць (наприклад, 5 пар взуття, як одна позиція в аукціоні), ціна, тип продажу (аукціон, фіксована ціна), термін аукціону (1,3,5 днів), мінімальне зростання ставки, доставку в обмежену кількість країн (або у всі можливі), обмеження на рейтинг покупця.
Ставка має інформацію про того хто її зробив, іі значення і час.
При встановленій фіксований ціні товар може бути куплений одразу, якщо термін аукціону це дозволяє. При аукціоні, товар отримується тим користувачем, який зробив найбільшу ставку.
Процес роботи аукціону:
Позиція аукціону має початкову ціну 100, мінімальне зростання 5.
Користувач А робить ставку (для нього ціна 100)
Користувач В робить ставку (для нього ціна 105)
Користувач А робить ставку +15 (нова ціна - 120)
Термін аукціону вичерпався (заборона на нові ставки)
Товар проданий за 120
historyLoader
Містить функціонал для завантаження певного стану інтернет аукціону з файлу. Вміє розрізняти команди у файлі та перевіряти їх на правильність.
команда складається з таких частин: час, тип команди, додаткові дані.
Файл містить команди в порядку зростання часу (вважатимемо, що дві коменди не можуть виконуватися в той самий час, але валідація має бути присутня), при обробці команди внутрішній годинник аукціону оновлюється до вказаного часу і виконуються автоматичнві дії, такі як завершення акціону для товару А, тощо.
Кожна команда може мати свою кількість додаткових даних.
Типи команд користувачів: створити користувача, змінити його дані, створити позицію на аукціоні (товар), зробити ставку
Типи команд адміністраторів: заблокувати користувача, надавати користувачу відмітку перевіреного продавця, блокувати позиції аукціону (модерація)
Мають виконуватися перевірки для кожної з завантажених команд: заблокований користувач не може виконувати якісь дії, заблокований товар не можна купити, не можна купити проданий товар, не можна купувати товар який не доставляють в країну користувача, тощо (згідно логіки і описаних деталей завдання).
Тексти (такі як опис) мають бути обмеженні у файлі символами " (наприклад "some description for product F").
userInterface
Дозволяє залогуватися в систему за логіном та паролем.
Для адміністратора дає можливість створювати користувачів, блокувати користувачів, надавати їм відмітку перевіреного продавця, блокувати позиції аукціону (модерація).
Звичайний користувач може переглядати всі позиції з застосуванням фільтрів (ціна, назва, тип товару, тощо) та сортувань, робити ставки, переглядати свої товари, історію своїх покупок та продажів, продавати товари.
reports
Дозволяє згенерувати звіт згідно стану системи (завантаженої історії). Звіти зберігаються у зовнішній файл з вказаним з консолі іменем. Типи звітів: завершені аукціони за останні 30/90/180 днів, активні аукціони (сюди входять непродані товари з фіксованою ціною) на даний момент, заблоковані аукціони за останні 30/90/180 днів, доходи продавців за останні 30/90/180 днів.
Програма має запускатися з консолі в трьох режимах:
З інтерфесом, можлитвістю залогуватися, тощо (historyLoader завантажує файл на старті без виводу на консоль)
Режим логу - historyLoader завантажує файл на старті та виводить на консоль повідомлення про невалідні дії (такі як купівля проданого товару)
Режим звітів - створення звітів через консоль з визначенням необхідних параметрів.