Многопользовательский тайм-трекер
Задача: разработать Backend сервиса Многопользовательский тайм-трекер, доступ к которому можно получить по REST.
Тайм-трекер (англ. Time-tracker или Time-tracking software) - это категория компьютерного программного обеспечения, которое позволяет сотрудникам, работающим за компьютерами, записывать время, потраченное на выполнение задач или проектов, а работодателям их контролировать.
Типы запросов
создать пользователя трекинга;
изменить данные пользователя;
начать отсчет времени по задаче Х;
прекратить отсчет времени по задаче Х;
показать все трудозатраты пользователя Y за период N..M в виде связного списка Задача - Сумма затраченного времени в виде (чч:мм) с сортировкой от большего к меньшему (для ответа на вопрос, На какие задачи я потратил больше времени);
показать все временные интервалы занятые работой за период N..M в виде связного списка Временной интервал (число чч:мм) - Задача (для ответа на вопросы, На что ушла моя неделя или Где за прошедшую неделю были ‘дыры’, когда я ничего не делал);
показать сумму трудозатрат по всем задачам пользователя Y за период N..M (как будто для отображения на панели Отработано на этой неделе);
очистить данные трекинга пользователя Z;
удалить всю информацию о пользователе Z.
Дополнительные условия
Если пользователь не завершил отсчет своего времени, то он должен завершаться автоматически в 23:59 текущего дня.
Данные должны храниться в системе не более периода, указанного в конфигурации сервиса. Очистка данных производится задачей по расписанию, работающей в составе java приложения.
Детали реализации
Только backend! RESTful, HTTP, JSON.
Разбивать на микросервисы не нужно.
Все SQL таблицы существуют в одной схеме данных.
Запуск на Ubuntu/Debian или Docker compose.
Security не требуется. Доступ к API может быть открытым без аутентификации и авторизации.
В реальной системе имя пользователя, конечно, передавалось бы в заголовках, token’ах или где-то еще. В данной задаче имя пользователя передается в запросе.
Данные следует хранить в базе данных MySQL или PostgreSQL.
Система должна журналировать происходящие события и ошибки с помощью одного из общепринятых логгеров logback/log4j.
Проект должен содержать список всех REST команд которые можно выполнить с кратким описанием входных и выходных данных. Спецификация OpenAPI приветствуется.
Язык для документации русский или английский на усмотрение разработчика.
Проект должен содержать README файл с описанием, из которого должно быть понятна процедура сборки, места хранения персистентных данных и журналов работы приложения.
Исходный код
Проект необходимо вести в публичном GitHub.
По истории commit'ов должна быть видна самостоятельная разработка кандидата. Один commit с полным набором исходников не приветствуется.
Язык программирования Java 8+ или Kotlin. Можно использовать Spring, другие фреймворки и библиотеки на усмотрение автора.
В проекте должны быть написаны тесты, демонстрирующие все типы запросов и сценарии.
Сроки
Мы никуда не спешим. После ознакомления с ТЗ вы сами определяете срок, за который сможете его выполнить. Обычно это 2-4 недели. Можно быстрее, если это не навредит качеству. Можно дольше, но все равно срок надо обозначить заранее.
При проверке оценивается
Работоспособность решения
Удобство и надежность API
Полноты README и другой документации
Журнал работы
Код решения
Обработка ошибок
Javadoc, комментарии
Тесты
Контакты автора
MikhaelGaydamaka можно задавать вопросы.