Домашки для курса асинхронных архитектур
Топ-менеджмент UberPopug Inc столкнулся с проблемой производительности сотрудников. Чтобы повысить производительность, было принято решение выкинуть текущий таск-трекер и написать особый Awesome Task Exchange System (aTES), который должен будет увеличить производительность сотрудников на неопределённый процент. Чтобы попуги развивались и изучали новые направления, была придумана инновационная схема ассайна каждой задачи на случайного сотрудника. А для повышения мотивации топ-менеджмент решил сделать корпоративный аккаунтинг в таск-трекере, чтобы по количеству выполненных задач выплачивать сотрудникам зарплату. При этом задачи оцениваются с плавающим коэффициентом (местами отрицательным).
Требования
В ходе обсуждения задачи с топ-менеджментом были выявлены следующие требования:
- Таск-трекер должен быть отдельным дашбордом и доступен всем сотрудникам компании UberPopug Inc.
- Авторизация в таск-трекере должна выполняться через общий сервис авторизации UberPopug Inc (у нас там инновационная система авторизации на основе формы клюва).
- В таск-трекере должны быть только задачи. Проектов, скоупов и спринтов нет, потому что они не умещаются в голове попуга.
- Новые таски может создавать кто угодно (администратор, начальник, разработчик, менеджер и любая другая роль). У задачи должны быть описание, статус (выполнена или нет) и рандомно выбранный попуг (кроме менеджера и администратора), на которого заассайнена задача.
- Менеджеры или администраторы должны иметь кнопку «заассайнить задачи», которая возьмёт все открытые задачи и рандомно заассайнит каждую на любого из сотрудников (кроме менеджера и администратора) . Не успел закрыть задачу до реассайна — сорян, делай следующую.
- Ассайнить задачу можно на кого угодно (кроме менеджера и администратора), это может быть любой существующий аккаунт из системы.
- Ассайнить задачу на нового попуга, можно только кнопкой «заассайнить задачи», других вариантов нет
- При нажатии кнопки «заассайнить задачи» все текущие не закрытые задачи должны быть случайным образом перетасованы между каждым аккаунтом в системе
- Мы не заморачиваемся на ограничение по нажатию на кнопку «заассайнить задачи». Её можно нажимать хоть каждую секунду.
- На одного сотрудника может выпасть любое количество новых задач, может выпасть ноль, а может и 10.
- Создать задачу не заасайненую на пользователя нельзя. Т.е. любая задача должна иметь попуга, который ее делает
- Каждый сотрудник должен иметь возможность видеть в отдельном месте список заассайненных на него задач + отметить задачу выполненной.
- Аккаунтинг должен быть в отдельном дашборде и доступным только для администраторов и бухгалтеров.
- у обычных попугов доступ к аккаунтингу тоже должен быть. Но только к информации о собственных счетах (аудит лог + текущий баланс).
- У админов и бухгалтеров должен быть доступ к общей статистике по деньгами заработанным (количество заработанных топ-менеджментом за сегодня денег + статистика по дням).
- Авторизация в дешборде аккаунтинга должна выполняться через общий сервис аутентификации UberPopug Inc.
- У каждого из сотрудников должен быть свой счёт, который показывает, сколько за сегодня он получил денег. У счёта должен быть аудитлог того, за что были списаны или начислены деньги, с подробным описанием каждой из задач.
- Расценки:
- цены на задачу определяется единоразово, в момент появления в системе (можно с минимальной задержкой)
- цены рассчитываются без привязки к сотруднику
- формула, которая говорит сколько списать денег с сотрудника при ассайне задачи — rand(-10..-20)$
- формула, которая говорит сколько начислить денег сотруднику для выполненой задачи — rand(20..40)$
- деньги списываются сразу после ассайна на сотрудника, а начисляются после выполнения задачи.
- отрицательный баланс переносится на следующий день. Единственный способ его погасить - закрыть достаточное количество задач в течение дня.
- Дешборд должен выводить количество заработанных топ-менеджментом за сегодня денег.
- т.е. сумма всех закрытых и заасайненых задач за день с противоположным знаком: (sum(completed task amount) + sum(assigned task fee)) * -1
- В конце дня необходимо:
- считать сколько денег сотрудник получил за рабочий день
- отправлять на почту сумму выплаты.
- После выплаты баланса (в конце дня) он должен обнуляться, и в аудитлоге всех операций аккаунтинга должно быть отображено, что была выплачена сумма.
- Дашборд должен выводить информацию по дням, а не за весь период сразу.
- вообще хватит только за сегодня (всё равно попуги дальше не помнят), но если чувствуете, что успеете сделать аналитику за каждый день недели — будет круто
- Аналитика — это отдельный дашборд, доступный только админам.
- Нужно указывать, сколько заработал топ-менеджмент за сегодня и сколько попугов ушло в минус.
- Нужно показывать самую дорогую задачу за день, неделю или месяц.
-
самой дорогой задачей является задача с наивысшей ценой из списка всех закрытых задач за определенный период времени
-
пример того, как это может выглядеть:
03.03 — самая дорогая задача — 28$
02.03 — самая дорогая задача — 38$
01.03 — самая дорогая задача — 23$
01-03 марта — самая дорогая задача — 38$
-
- Никакого сложного UI-дизайна не надо, хватит самого банального бутстрапа или чистого html.
- Никакого реалтайма тоже не нужно, хватит рефреша страницы для всех дашбордов и пользовательского интерфейса.
- Вопрос нагрузки не стоит, можно считать, что максимальное количество пользователей будет не больше 100 пользователей в минуту.
- Язык и технологии можно выбрать любые, кроме BrainFuck.
- Все права на PopugJira принадлежат UberPopug Inc.
- Желательно, чтобы ни один попуг в ходе выполнения ДЗ не пострадал.