Инвентаризационный список техники (1.0.0)

Описание

Приложение, решающее задачу по управлению списком с данными.

Данные

Приложение считывает все данные из соответствующих CSV-файлов (разделитель – запятая) при старте приложения.

Список элементов техники

Имя файла с исходными данными передаётся приложению с ключом --equipment-file

Id,Equipment,Category,GuaranteeDate,IsUsed,Price,Location,ResponsiblePerson
1d0f861e-9d0c-4340-acad-69ade7b83085,"Монитор 19.5"" LG 20M47D",Монитор,2028-01-01,false,2800,склад,Иванов Иван Иванович
4cc3098f-fa98-4312-b351-fce99fde825f,"Монитор 19.5"" Acer K202HQL",Монитор,2028-01-01,false,5700,склад,Иванов Иван Иванович
bf7c82ce-334a-470b-89be-f7ae283ce564,"Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",ПК,2028-01-01,false,15300,склад,Иванов Иван Иванович
f463afc0-3088-4ba4-92ae-5859faedc585,"Принтер Canon PIXMA G540 ",Принтер,2030-01-01,true,21550,"офис, кабинет № 26",Иванов Иван Иванович
d7494a0f-6929-4d71-9bbc-fb067356bfeb,IP-телефон Cisco CP-7940G,Телефон,2030-01-01,true,6100,"офис, кабинет № 26",Иванов Иван Иванович
fe385d95-f916-47c0-b042-557435b2e160,Проектор Epson EB-E20,Другое,2030-01-01,true,60600,"офис, кабинет № 15",Иванов Иван Иванович
f920444e-3741-497c-a6b2-b9fa1bc5b741,"Принтер Canon PIXMA G540 ",Принтер,2030-01-01,true,21550,"офис, кабинет № 15",Иванов Иван Иванович

Записи в журнале

Имя файла с исходными данными передаётся приложению с ключом --log-file

Id,Equipment,ResponsiblePerson,Operation,Text,LogDateTime
29478648-3524-4d60-9176-22aad1c3bb4a,1d0f861e-9d0c-4340-acad-69ade7b83085,Иванов Иван Иванович,Приобретение,Приобретение,2024-01-01T00:00:00

Запуск приложения

Приложение запускается с помощью системы сборки Gradle, обязательные параметры:

  • --equipment-file – имя файла со списком оборудования
  • --log-file – имя файла с журналом
  • --port – порт, по которому доступен веб-сервер
./gradlew run --args="--equipment-file ../sample-data/equipment.csv --log-file ../sample-data/log.csv --port 9000"

Веб-сервер запускается и работает только при получении корректных значений всех параметров. При некорректном значении хотя бы одного параметра приложение выводит соответствующее сообщение об ошибке и завершает работу с ненулевым кодом возврата.

Error: missing option --equipment-file
Error: file not found «abc.csv»

Базовые маршруты

Маршруты проверки работоспособности веб-сервера

Проверка, запущен ли веб-сервер

Маршрут обязательно должен быть реализован, при отсутствии приложение не будет проверяться.

Responses

Инвентаризация

Методы, связанные с получением информации о технике

Получение списка техники

Список упорядочен по возрастанию типа техники лексикографически и id.

query Parameters
page
integer >= 1
Default: 1
Example: page=1

Номер страницы.

Если номер превышает максимально возможный, приложение возвращает пустой список.

Если номер передан и не является натуральным числом, приложение возвращает сообщение об ошибке.

records-per-page
integer
Default: 10
Enum: 5 10 20 50
Example: records-per-page=10

Количество записей на странице.

Если количество передано и не входит в указанный набор значений, приложение возвращает сообщение об ошибке.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Получение информации о элементе техники

path Parameters
equipment-id
required
string <UUID>
Example: 67bfcd12-6c8f-45fc-bc6b-265c23d7d881

Идентификатор техники

Responses

Response samples

Content type
application/json
{
  • "Id": "67bfcd12-6c8f-45fc-bc6b-265c23d7d881",
  • "Equipment": "Системный блок Acer",
  • "Category": "ПК",
  • "GuaranteeDate": "2028-01-01",
  • "IsUsed": true,
  • "Price": 15300,
  • "Location": "дома",
  • "ResponsiblePerson": "Иванов Иван Иванович",
  • "Log": [
    ]
}

Список свободной техники

Получение списка свободной (не использующейся) техники переданных типов.

Список упорядочен по возрастанию типа техники лексикографически и id.

query Parameters
category
string
Enum: "Монитор" "ПК" "Телефон" "Принтер" "Другое"
Example: category=Монитор,Телефон

Тип техники.

Содержит ноль, один или несколько типов техники через запятую.

Если параметр пустой или отсутствует, приложение возвращает список без фильтрации по типу.

Тип техники должен точно соответствовать одному из указанных значений. Например, пк и телефон не являются корректными значениями.

Если хотя бы один из переданных типов не является корректным, значение параметра считается некорректным.

page
integer >= 1
Default: 1
Example: page=1

Номер страницы.

Если номер превышает максимально возможный, приложение возвращает пустой список.

Если номер передан и не является натуральным числом, приложение возвращает сообщение об ошибке.

records-per-page
integer
Default: 10
Enum: 5 10 20 50
Example: records-per-page=10

Количество записей на странице.

Если количество передано и не входит в указанный набор значений, приложение возвращает сообщение об ошибке.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Список техники на замену

Получение списка техники, которую нужно заменить к моменту времени: в переданный момент времени истечёт гарантийный срок.

Список упорядочен по возрастанию типа техники лексикографически и id.

query Parameters
time
required
string <date-time>
Example: time=2030-01-01T00:00:00.0

Дата и время в формате ISO

page
integer >= 1
Default: 1
Example: page=1

Номер страницы.

Если номер превышает максимально возможный, приложение возвращает пустой список.

Если номер передан и не является натуральным числом, приложение возвращает сообщение об ошибке.

records-per-page
integer
Default: 10
Enum: 5 10 20 50
Example: records-per-page=10

Количество записей на странице.

Если количество передано и не входит в указанный набор значений, приложение возвращает сообщение об ошибке.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Статистика

query Parameters
by-type
required
string
Enum: "category" "person"
Example: by-type=category

Тип статистики.

  • category – статистика по типу техники
  • person – статистика по материально ответственному лицу

Статистика упорядочена по полю Category/Person лексикографически.

Responses

Response samples

Content type
application/json
Example
{
  • "StatisticsByCategory": [
    ]
}

Журнал

Получение информации о записи в журнале

path Parameters
log-id
required
string <UUID>
Example: 29478648-3524-4d60-9176-22aad1c3bb4a

Идентификатор записи в журнале

Responses

Response samples

Content type
application/json
{
  • "Id": "29478648-3524-4d60-9176-22aad1c3bb4a",
  • "Equipment": "67bfcd12-6c8f-45fc-bc6b-265c23d7d881",
  • "ResponsiblePerson": "Иванов Иван Иванович",
  • "Operation": "Приобретение",
  • "Text": "Приобретение нового ПК в связи с поломкой предыдущего",
  • "LogDateTime": "2024-01-01T00:00:00"
}

Элемент техники (Equipment)

Id
string <UUID>

Уникальный идентификатор оборудования

Equipment
string

Наименование оборудования

Category
string
Enum: "Монитор" "ПК" "Телефон" "Принтер" "Другое"

Тип техники

GuaranteeDate
string <date>

Гарантийный срок

IsUsed
boolean

Используется или свободно

  • true – используется
  • false – свободно
Price
number <double> >= 0

Балансная стоимость

Location
string

Место хранения

ResponsiblePerson
string

ФИО материально-ответственного лица

{
  • "Id": "67bfcd12-6c8f-45fc-bc6b-265c23d7d881",
  • "Equipment": "Системный блок Acer",
  • "Category": "ПК",
  • "GuaranteeDate": "2028-01-01",
  • "IsUsed": true,
  • "Price": 15300,
  • "Location": "дома",
  • "ResponsiblePerson": "Иванов Иван Иванович"
}

Запись в журнале (Log)

Id
string <UUID>

Идентификатор записи в журнале.

Equipment
string <UUID>

Уникальный идентификатор оборудования

ResponsiblePerson
string

ФИО материально-ответственного лица

Operation
string

Журналируемая операция. Поле не может быть пустым

Text
string

Комментарий к операции

LogDateTime
string <date-time>

Дата и время создания записи

{
  • "Id": "29478648-3524-4d60-9176-22aad1c3bb4a",
  • "Equipment": "67bfcd12-6c8f-45fc-bc6b-265c23d7d881",
  • "ResponsiblePerson": "Иванов Иван Иванович",
  • "Operation": "Приобретение",
  • "Text": "Приобретение нового ПК в связи с поломкой предыдущего",
  • "LogDateTime": "2024-01-01T00:00:00"
}