Задание «Список задач» #
Задание № 1 #
Разработать приложение, решающее задачу по управлению списком с данными.
Данные #
Элемент списка: задача.
Название поля | Описание поля | Тип поля |
---|---|---|
Id | Уникальный идентификатор | UUID |
Title | Название задачи | Текст |
RegistrationDateTime | Регистрация в системе | Дата и время в формате ISO |
StartDateTime | Начало задачи | Дата и время в формате ISO |
EndDateTime | Плановое окончание задачи | Дата и время в формате ISO Может быть null |
Importance | Приоритет задачи | Из списка: очень низкий, низкий, обычный, высокий, очень высокий, критический |
Urgency | Срочность задачи | Логическое значение true/false |
Percentage | Процент выполнения | Целое число от 0 до 100 |
Description | Описание | Текст |
Пример описания задачи в формате JSON:
{
"Id": "ec247f48-f86c-45c8-ab2f-7510e4640052",
"Title": "Задача",
"RegistrationDateTime": "2024-01-02T00:00:00.0",
"StartDateTime": "2024-01-02T00:00:00.0",
"EndDateTime": "2024-01-06T00:00:00.0",
"Importance": "очень низкий",
"Urgency": false,
"Percentage": 0,
"Description": "Описание задачи"
}
Приложение должно считывать список задач из CSV-файла (разделитель – запятая).
Пример данных:
Id,Title,RegistrationDateTime,StartDateTime,EndDateTime,Importance,Urgency,Percentage,Description
8b2a4482-35c8-411e-aab9-6ce490b3bea1,Задача № 1,2024-01-01T00:00:00.0,2024-01-01T00:00:00.0,,очень низкий,false,100,задача
ec247f48-f86c-45c8-ab2f-7510e4640052,Задача № 2,2024-01-02T00:00:00.0,2024-01-02T00:00:00.0,2024-01-06T00:00:00.0,очень низкий,false,0,задача
b0d29fa9-cfd4-41e2-9753-f9b5f40e9811,Задача № 3,2024-01-03T00:00:00.0,2024-01-03T00:00:00.0,2024-01-04T00:00:00.0,критический,true,90,задача
a89723c3-0bfe-41b1-b7b9-db67a8c4708a,Задача № 4,2024-01-04T00:00:00.0,2024-01-04T00:00:00.0,,очень низкий,false,0,задача
5bdb77b9-3a66-4217-b6fe-2eaaf9e54200,Задача № 5,2024-01-05T00:00:00.0,2024-01-05T00:00:00.0,,высокий,false,70,задача
2aeaf2b4-ad18-4686-a69c-9d9baa34fe69,Задача № 6,2024-01-06T00:00:00.0,2024-01-06T00:00:00.0,,очень низкий,true,5,задача
Имя файла с исходными данными должно передаваться приложению с ключом --tasks-file
... --tasks-file="../data/file.csv"
... --tasks-file="C:\Users\AM\data\app-3968942893870838401.csv"
Задание #
В зависимости от аргументов вызова приложение должно выполнять следующие команды:
1. list
– получить список задач.
#
Выходные данные: список всех задач в формате JSON, упорядоченный по возрастанию даты и времени регистрации и id. Список может быть пустым.
Информация о задаче должна содержать только идентификатор, название и поле IsClosed:
true
– задача закрыта (процент выполнения 100%)false
– задача ещё не закрыта (процент выполнения не 100%)
{
"tasks": [
{
"Id": "8b2a4482-35c8-411e-aab9-6ce490b3bea1",
"Title": "Задача № 1",
"IsClosed": true
}, {
"Id": "ec247f48-f86c-45c8-ab2f-7510e4640052",
"Title": "Задача № 2",
"IsClosed": false
}
]
}
{
"tasks": []
}
2. show-task
– получить один элемент списка по идентификатору.
#
--id=ID
– обязательный параметр. Корректное значение: идентификатор существующей в списке задачи.
Выходные данные: полная информация о задаче в формате JSON.
show --task-id=ec247f48-f86c-45c8-ab2f-7510e4640052
{
"task-id": "ec247f48-f86c-45c8-ab2f-7510e4640052",
"task": {
"Id": "ec247f48-f86c-45c8-ab2f-7510e4640052",
"Title": "Задача № 2",
"RegistrationDateTime": "2024-01-02T00:00:00.0",
"StartDateTime": "2024-01-02T00:00:00.0",
"EndDateTime": "2024-01-06T00:00:00.0",
"Importance": "очень низкий",
"Urgency": false,
"Percentage": 0,
"Description": "задача",
"IsClosed": false
}
}
{
"task-id": "a89723c3-0bfe-41b1-b7b9-db67a8c4708a",
"task": {
"Id": "a89723c3-0bfe-41b1-b7b9-db67a8c4708a",
"Title": "Задача № 4",
"RegistrationDateTime": "2024-01-04T00:00:00.0",
"StartDateTime": "2024-01-04T00:00:00.0",
"EndDateTime": null,
"Importance": "очень низкий",
"Urgency": false,
"Percentage": 100,
"Description": "задача",
"IsClosed": true
}
}
3. list-eisenhower
– получить список задач для блока Матрицы Эйзенхауэра.
#
--important=[true/false]
– необязательный параметр важности, где:
true
– задачи с приоритетом «высокий», «очень высокий», «критический»false
– задачи с приоритетом «очень низкий», «низкий», «обычный»
--urgent=[true/false]
– необязательный параметр срочности.
Обязательно должен быть передан хотя бы один из параметров.
Выходные данные: список задач в формате JSON соответствующего уровня важности и срочности, упорядоченный по возрастанию даты регистрации и id. Список может быть пустым.
Информация о задаче содержит только идентификатор, название, приоритет, срочность и процент выполнения.
list-eisenhower --important=true
list-eisenhower --important=false --urgent=true
list-eisenhower --urgent=true
{
"important": true,
"urgent": false,
"tasks": [
{
"Id": "5bdb77b9-3a66-4217-b6fe-2eaaf9e54200",
"Title": "Задача № 5",
"Importance": "высокий",
"Urgency": false,
"Percentage": 70
}
]
}
{
"important": true,
"tasks": [
{
"Id": "b0d29fa9-cfd4-41e2-9753-f9b5f40e9811",
"Title": "Задача № 3",
"Importance": "критический",
"Urgency": true,
"Percentage": 90
}, {
"Id": "5bdb77b9-3a66-4217-b6fe-2eaaf9e54200",
"Title": "Задача № 5",
"Importance": "высокий",
"Urgency": false,
"Percentage": 70
}
]
}
4. list-time
– получить список задач, актуальных на момент времени.
#
--time
– обязательный параметр даты и времени в формате ISO
Выходные данные: список задач, для которых дата и время начала меньше переданных и процент выполнения меньше 100%. Список упорядочен по убыванию важности, убыванию срочности, возрастанию даты регистрации и id. Список может быть пустым.
Информация о задаче содержит только идентификатор, название, приоритет, срочность и процент выполнения.
list-time --time=2024-01-01T00:00:00.0
{
"time": "2024-01-01T00:00:00.0",
"tasks": [
{
"Id": "b0d29fa9-cfd4-41e2-9753-f9b5f40e9811",
"Title": "Задача № 3",
"Importance": "критический",
"Urgency": true,
"Percentage": 90
}, {
"Id": "5bdb77b9-3a66-4217-b6fe-2eaaf9e54200",
"Title": "Задача № 5",
"Importance": "высокий",
"Urgency": false,
"Percentage": 70
}
]
}
5. statistic
– получить статистическую информацию о списке задач по дням недели.
#
--by-date=[registration/start/end]
– обязательный параметр типа отображаемой статистики.
Возможные значения:
registration
– статистика по дате регистрацииstart
– статистика по дате начала задачиend
– статистика по дате окончания задачи
Выходные данные: статистика количества задач по дням недели переданного типа даты в формате JSON. Значение null сопоставляется дню недели «Не заполнено». Список упорядочен по дню недели, «Не заполнено» (при наличии) в конце.
В выдаче должны присутствовать только те дни недели, которые есть в списке данных.
statistic --by-date=registration
statistic --by-date=start
statistic --by-date=end
{
"statisticByRegistrationDateTime": [
{ "Понедельник": 1 },
{ "Среда": 3 }
]
}
{
"statisticByStartDateTime": [
{ "Вторник": 5 },
{ "Воскресенье": 3 }
]
}
{
"statisticByEndDateTime": [
{ "Понедельник": 1 },
{ "Не заполнено": 9 }
]
}
Выходные данные #
При корректных входных данных приложение должно завершать работу с кодом возврата 0 и возвращать данные в формате JSON.
При некорректных входных данных приложение должно завершать работу с ненулевым кодом возврата и возвращать сообщение об ошибке. Некорректными данными считаются:
- отсутствие аргумента команды или некорректная команда.
- отсутствие обязательного параметра команды, его некорректное значение или несоответствие значения указанному типу данных.
- отсутствие аргумента
--tasks-file
или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.