Тестовое задание «Треугольники» (2.0.0)

Описание

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

Данные

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

Приложение записывает все данные из оперативной памяти в CSV-файлы при завершении работы приложения.

Во время работы приложения ему запрещено взаимодействовать с файловой системой в другие моменты времени.

Список шаблонов треугольника

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

Id,SideA,SideB,SideC
4ae25b32-d794-4560-8a08-5e6d09a19c33,1,2,5
22f9f6c1-82af-4681-b92e-a3510ecee4b5,2,3,5
0c96ea19-fa65-499a-80ad-ea0c86b2a5e0,2,3,4

Список треугольников

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

Id,Template,RegistrationDateTime,BorderColor,FillColor,Description
66ade672-2301-4408-9471-8a17aa883d65,4ae25b32-d794-4560-8a08-5e6d09a19c33,2024-08-26T19:01:41.114511727,GREEN,RED,"странные данные, это неправильный треугольник"
a6be5e23-b8d4-4d78-8aa3-1c204d0befc8,22f9f6c1-82af-4681-b92e-a3510ecee4b5,2024-07-10T17:26:41.129567382,RED,GREEN,"точки расположены на отрезке"
baa30333-23d6-4eba-a8ed-7c235adf4228,0c96ea19-fa65-499a-80ad-ea0c86b2a5e0,2024-07-27T00:10:41.129642513,RED,GREEN,"обычный треугольник"

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

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

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

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

  Error: missing option --triangles-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
[
  • {
    }
]

Создание нового треугольника

Создание нового треугольника.

Дата и время регистрации в системе устанавливаются автоматически по текущей дате и времени, если не переданы.

Идентификатор треугольника генерируется уникальным.

Request Body schema: application/json
required
Template
required
string <UUID>

Шаблон треугольника (соответствует Template→Id)

RegistrationDateTime
string <date-time>
Default: "текущая дата и время"

Дата и время регистрации в системе

BorderColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет границы из списка цветов

FillColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет заливки из списка цветов

Description
required
string

Описание треугольника

Responses

Request samples

Content type
application/json
{
  • "Template": "4ae25b32-d794-4560-8a08-5e6d09a19c33",
  • "RegistrationDateTime": "2024-01-01T00:00:00",
  • "BorderColor": "BLACK",
  • "FillColor": "BLACK",
  • "Description": "обыкновенный треугольник"
}

Response samples

Content type
application/json
{
  • "Id": "de42a00f-7f43-4d10-808d-bee47fdeef49"
}

Получение информации о треугольнике

Получение информации о треугольнике по идентификатору треугольника

path Parameters
triangle-id
required
string <UUID>
Example: de42a00f-7f43-4d10-808d-bee47fdeef49

идентификатор треугольника

Responses

Response samples

Content type
application/json
{
  • "Id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
  • "Template": "4ae25b32-d794-4560-8a08-5e6d09a19c33",
  • "SideA": 3,
  • "SideB": 4,
  • "SideC": 5,
  • "RegistrationDateTime": "2024-01-01T00:00:00",
  • "BorderColor": "BLACK",
  • "FillColor": "BLACK",
  • "Description": "обыкновенный треугольник",
  • "Area": 6,
  • "Type": "прямоугольный"
}

Удаление треугольника

Удаление треугольника по идентификатору

path Parameters
triangle-id
required
string <UUID>
Example: de42a00f-7f43-4d10-808d-bee47fdeef49

идентификатор треугольника

Responses

Response samples

Content type
application/json
{
  • "Error": "Некорректный идентификатор треугольника. Для параметра triangle-id ожидается UUID, но получено значение «id»"
}

Получение списка треугольников, отфильтрованного по цвету границы

Получение списка треугольников, отфильтрованного по цвету границы.

Список упорядочен по возрастанию даты и времени регистрации и id.

query Parameters
border-color
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"
Example: border-color=BLACK

Цвет границы треугольника

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
area-min
number <double>
Example: area-min=0.0

нижняя граница площади (включительно)

area-max
number <double>
Example: area-max=6.0

верхняя граница площади (включительно)

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
[
  • {
    }
]

Получение статистической информации

Получение статистической информации для набора треугольников.
В выдаче присутствуют только те цвета и типы треугольника, которые есть в списке данных.

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

query Parameters
by
required
any
Enum: "color" "type" "color,type"
Example: by=color,type

Тип запрашиваемой статистики.

  • color – статистика по цвету заливки
  • type – статистика по типу треугольника
  • color,type – статистика по цвету заливки и по типу треугольника

Responses

Response samples

Content type
application/json
Example
[ ]

Создание нового треугольника по шаблону

Создание нового треугольника по шаблону

Дата и время регистрации в системе устанавливаются автоматически по текущей дате и времени, если не переданы.

path Parameters
template-id
required
string <UUID>
Example: 4ae25b32-d794-4560-8a08-5e6d09a19c33

идентификатор шаблона

Request Body schema: application/json
required
RegistrationDateTime
string <date-time>
Default: "текущая дата и время"

Дата и время регистрации в системе

BorderColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет границы из списка цветов

FillColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет заливки из списка цветов

Description
required
string

Описание треугольника

Responses

Request samples

Content type
application/json
{
  • "RegistrationDateTime": "2024-01-01T00:00:00",
  • "BorderColor": "BLACK",
  • "FillColor": "BLACK",
  • "Description": "обыкновенный треугольник"
}

Response samples

Content type
application/json
{
  • "Id": "de42a00f-7f43-4d10-808d-bee47fdeef49"
}

Шаблоны

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

Получение списка всех шаблонов треугольника

Список упорядочен по возрастанию идентификатора шаблона

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Создание нового шаблона

Создание нового шаблона.

Идентификатор шаблона генерируется уникальным.

Request Body schema: application/json
required
SideA
required
integer >= 1

Длина первой стороны (натуральное число)

SideB
required
integer >= 1

Длина второй стороны (натуральное число)

SideC
required
integer >= 1

Длина третьей стороны (натуральное число)

Responses

Request samples

Content type
application/json
{
  • "SideA": 3,
  • "SideB": 4,
  • "SideC": 5
}

Response samples

Content type
application/json
{
  • "Id": "4ae25b32-d794-4560-8a08-5e6d09a19c33"
}

Получение информации о шаблоне

Получение информации о шаблоне по идентификатору

path Parameters
template-id
required
string <UUID>
Example: 4ae25b32-d794-4560-8a08-5e6d09a19c33

идентификатор шаблона

Responses

Response samples

Content type
application/json
{
  • "Id": "4ae25b32-d794-4560-8a08-5e6d09a19c33",
  • "SideA": 3,
  • "SideB": 4,
  • "SideC": 5,
  • "Area": 6,
  • "Type": "прямоугольный"
}

Редактирование шаблона

Request Body schema: application/json
required

Список редактируемых полей.

SideA
required
integer >= 1

Длина первой стороны (натуральное число)

SideB
required
integer >= 1

Длина второй стороны (натуральное число)

SideC
required
integer >= 1

Длина третьей стороны (натуральное число)

Responses

Request samples

Content type
application/json
{
  • "SideA": 3,
  • "SideB": 4,
  • "SideC": 5
}

Response samples

Content type
application/json
Example
{
  • "Value": "{",
  • "Error": "Missing a name for object member."
}

Создание нового треугольника по шаблону

Создание нового треугольника по шаблону

Дата и время регистрации в системе устанавливаются автоматически по текущей дате и времени, если не переданы.

path Parameters
template-id
required
string <UUID>
Example: 4ae25b32-d794-4560-8a08-5e6d09a19c33

идентификатор шаблона

Request Body schema: application/json
required
RegistrationDateTime
string <date-time>
Default: "текущая дата и время"

Дата и время регистрации в системе

BorderColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет границы из списка цветов

FillColor
required
string
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет заливки из списка цветов

Description
required
string

Описание треугольника

Responses

Request samples

Content type
application/json
{
  • "RegistrationDateTime": "2024-01-01T00:00:00",
  • "BorderColor": "BLACK",
  • "FillColor": "BLACK",
  • "Description": "обыкновенный треугольник"
}

Response samples

Content type
application/json
{
  • "Id": "de42a00f-7f43-4d10-808d-bee47fdeef49"
}

Шаблон треугольника

Id
string <UUID>

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

SideA
integer >= 1

Длина первой стороны (натуральное число)

SideB
integer >= 1

Длина второй стороны (натуральное число)

SideC
integer >= 1

Длина третьей стороны (натуральное число)

Area
number or null (Площадь треугольника)

Вычисляемое поле, отсутствует в файле с данными.
Площадь отрезка = 0. Площадь некорректного треугольника = null

Type
string (Тип треугольника)
Enum: "некорректный" "отрезок" "остроугольный" "прямоугольный" "тупоугольный"

Вычисляемое поле, отсутствует в файле с данными

  • некорректный (наибольшая сторона больше суммы двух других)
  • отрезок (наибольшая сторона равна сумме двух других)
  • остроугольный (квадрат наибольшей стороны меньше суммы квадратов двух других)
  • прямоугольный (квадрат наибольшей стороны равен сумме квадратов двух других)
  • тупоугольный (квадрат наибольшей стороны больше суммы квадратов двух других)
{
  • "Id": "4ae25b32-d794-4560-8a08-5e6d09a19c33",
  • "SideA": 3,
  • "SideB": 4,
  • "SideC": 5,
  • "Area": 6,
  • "Type": "прямоугольный"
}

Треугольник

Id
string <UUID>

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

Template
string <UUID>

Шаблон треугольника (соответствует Template→Id)

RegistrationDateTime
string <date-time>

Дата и время регистрации в системе

BorderColor
string (Color)
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет границы из списка цветов

FillColor
string (Color)
Enum: "BLACK" "WHITE" "RED" "GREEN" "BLUE" "YELLOW" "CYAN" "MAGENTA" "SILVER" "GRAY" "MAROON" "OLIVE" "DARKGREEN" "PURPLE" "TEAL"

Цвет заливки из списка цветов

Description
string

Описание треугольника

{
  • "Id": "de42a00f-7f43-4d10-808d-bee47fdeef49",
  • "Template": "4ae25b32-d794-4560-8a08-5e6d09a19c33",
  • "RegistrationDateTime": "2024-01-01T00:00:00",
  • "BorderColor": "BLACK",
  • "FillColor": "BLACK",
  • "Description": "обыкновенный треугольник"
}