Задача: разработать 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 можно задавать вопросы.