Skip to content

Latest commit

 

History

History
225 lines (173 loc) · 18.7 KB

STATUS.md

File metadata and controls

225 lines (173 loc) · 18.7 KB

Информация о трекере дел.

Аналоги

Списки дел

Рассмотрим приложения Any.do, Wunderlist и Todoist

Во всех этих приложениях есть:

  • создание задач
  • присвоение категорий задачам (например, "Фильмы к просмотру" или "Личные поручения")
  • установка приоритета
  • создание подзадач
  • установка даты и времени выполнения задачи
  • установка напоминания
  • добавление заметок

Теперь распишем отличительные особенности этих приложений

Any.do
  • при добавлении задачи предлагает наиболее частые варианты ("купить", "позвонить" и т.д.)
  • при выполнении задачи перечёркивается в списке и только потом её можно удалить.
Wunderlist
  • задачи можно группировать в папки
  • возможность добавить пользователя для совместного выполнения списка задач
  • возможность оставлять комментарии под задачей для обсуждения с другими пользователями
Todoist
  • система кармы (позволяет анализировать и визуализировать производительность пользователя. Существует пять уровней в зависимости от количества набранных пользователем пунктов: Новичок, Любитель, Эксперт, Мастер и Гуру)
  • подзадачи в Todoist - полноценные задачи, к которым также можно установить дату и время с напоминаниями и т.д., в отличие от Any.do и Wunderlist, где подзадачи являются просто строками, которые можно добавить и удалить
  • несколько уровней важности (приоритета) с выделением цветом

Из этих 3 приложений для меня безусловным лидером является Todoist.

Календари

Google Calendar
  • возможность просмотра в нескольких режимах (день, неделя, месяц, год)
  • создание событий в определённый день или промежуток времени
  • установка напоминания для события
  • указание места проведения события
  • возможность добавления участников к событию
  • импорт и экспорт различных календарей

Также были рассмотрены Календарь Outlook и Яндекс.Календарь. Все они обладают тем же функционалом, что и Google Calendar с минимальными отличиями во внешнем виде (например, в Календаре Outlook показывается погода на ближайшие дни, а в Яндекс.Календаре сохранена цветовая палитра всех продуктов Яндекс).

Трекеры задач

Trello
  • у каждого пользователя есть возможность создать доски с отображением задач по спискам
  • добавление комментариев и меток к задаче
  • добавление участников к задаче
  • создание общих досок
Jira
  • уровни доступа для каждого пользователя
  • интеграция с Bitbucket
  • запись информации о потраченном времени на каждую задачу
  • просмотр статистики
  • Scrum и Kanban доски

Сценарии использования

  • у Васи лабораторная работа по ИСП. Добавляется задача "Сделать лабораторную №2". Устанавливаются крайний срок для начала работы (7 марта) и крайний срок выполнения (13 марта), категория "Учёба". Эта задача разделяется на подзадачи: "Расписать аналоги", "Написать сценарии использования", и т.д.
  • Вася также любит смотреть фильмы. Его одногруппник Влад посоветовал ему несколько фильмов к просмотру. Вася создаёт категорию "Фильмы к просмотру" и добавляет туда фильмы.
  • Влад похвастался, что у него уже 3-й уровень в трекере дел. А у Васи только 1-й. Поэтому Вася срочно начал выполнять задачи, которые были у него в трекере для того, чтобы обогнать Владика.
  • Мама сказала Васе сходить в магазин. Добавляется задача "Купить продукты", в заметках к которой указываются продукты. Также для этой задачи указывается высокий приоритет, так как мама не может ждать.
  • Васю приглашают на собеседование. Указывается промежуток времени: с 15:00 до 17:00 25 апреля. В заметках добавляется место. Устанавливается напоминание за неделю, чтобы Вася успел подготовиться к нему.
  • Вася участвует в чемпионат по программированию BSUIR OPEN. Добавляется задача "BSUIR OPEN". Создаются подзадачи - задачи олимпиады. Каждому участнику команды предоставляется доступ к задаче "BSUIR OPEN". Он выбирает, какую задачу он хочет решить и назначает её на себя.

Планируемые возможности

  • создание и редактирование задачи
  • присвоение категорий задачам
  • установка срока начала и срока конца выполнения задачи
  • добавление заметок/примечаний к задаче
  • установка напоминаний
  • создание подзадач
  • регистрация и авторизация для пользователей
  • предоставление доступа к задачам другим пользователям
  • назначение задачи на пользователя
  • добавление события с временем начала и конца
  • система уровней: у каждого пользователя будут очки опыта, которые он сможет получать за выполнение задач. Чем больше задач выполнено, тем больше уровень.

Логическая архитектура

Класс User - пользователь

  • id
  • email
  • name
  • password
  • level_id

Класс UsersController - управляет пользователями

  • create(email, name, password) - создаётся объект user класса User и объект level класса Level, user.level_id = level.id
  • update(id, email, name, password) - обновляет поля пользователя с указанным id
  • tasks() - возвращает задачи пользователя. В аргументы метода передаются параметры, согласно которым фильтруются задачи. Например, 'inner' : true - выведет абсолютно все задачи, вместе с подзадачами для текущего пользователя.
  • get_by_id(id), get_by_email(id) - возвращают пользователя согласно переданному id либо email
  • delete(id) - удаляет пользователя с заданным id и удаляет level, привязанный к данному пользователю

Класс Level - уровень пользователя

  • id
  • experience - текущее количество опыта пользователя.
  • current_level() - возвращает текущий уровень исходя из количества опыта
  • next_level_experience() - возвращает количество опыта, необходимое для получения следующего уровня

Класс LevelsController - управляет уровнями пользователей

  • increase_experience() - повышает количество опыта на заданную константу (стандартное количество опыта за выполнение задачи)
  • create() - создаёт объект класса Level
  • delete(id) - удаляет уровень пользователя с заданным id
  • get_by_user_id(user_id) - возвращает объект уровня пользователя по id пользователя

Класс Task - задача

  • id
  • user_id - id пользователя, создавшего задачу
  • title - заголовок задачи
  • note - заметка к задаче
  • assigned_user_id - id пользователя, на которого назначена задача
  • parent_task_id - id родительской задачи
  • start_time - крайний срок начала / время начала
  • end_time - крайний срок выполнения / время окончания
  • status_id - id объекта класса Status
  • priority_id - id объекта класса Priority
  • notification_id - id объекта класса Notification
  • read_users_ids - id пользователей, которые могут просматривать задачу
  • write_users_ids - id пользователей, которые могут просматривать и редактировать задачу
  • is_event - является ли событием с промежутком времени (временем начала и конца)

Класс TasksController - управляет задачами

  • create(task) - создаёт задачу согласно переданным параметрам
  • update(task) - обновляет задачу согласно переданным параметрам
  • delete(id) - удаляет задачу с заданным id
  • parent() - возвращает родительскую задачу или None, если такой задачи не существует
  • inner() - выведет список подзадач для текущей задачи
  • create_inner_task(parent_task_id, task) - создаёт задачу согласно переданным параметрам, при этом task.parent_task_id = parent_task_id
  • user_tasks(user_id) - возвращает задачи, созданные пользователем с заданным id
  • get_by_id(task_id) - возвращает задачу с заданным id
  • complete() - помечает задачу как выполненную. У LevelsController для уровня пользователя вызывается метод increase_experience() - повышает уровень пользователя. Статус задачи изменяется на "Выполнено"
  • add_user_for_read(user_id, task_id) - добавлет id пользователя user в список пользователей, которые могут просматривать задачу.
  • add_user_for_write(user_id, task_id) - добавлет id пользователя user в список пользователей, которые могут просматривать и редактировать задачу.
  • remove_user_for_read(user_id, task_id) - удаляет id пользователя user из списка пользователей, которые могут просматривать задачу.
  • remove_user_for_write(user_id, task_id) - удаляет id пользователя user из списка пользователей, которые могут просматривать и редактировать задачу.
  • create_notification(title, start_time) - создаёт объект класса Notification для текущей задачи с указанным заголовком уведомления и относительным временем от начала задачи. При этом task.notification_id присваивается id созданного объекта класса Notification
  • set_as_to_do/in_progress/done/archived(task_id) - устанавливает для задачи статус
  • assign_task_on_user(task_id, user_id) - назначает на пользователя user текущую задачу: task.assigned_user_id = user.id

Класс Notification - уведомление, которое напоминает пользователю о задаче

  • id
  • task_id
  • start_time - хранится относительное время от времени начала задачи. Например, "напомнить за 5 часов до начала"
  • title
  • status - статус уведомления (CREATED (по умолчанию), PENDING, SHOWN)

Класс NotificationsController - класс, управляющий уведомлениями.

  • create(notification) - создаёт уведомление с заданными параметрами
  • update(notification) - обновляет уведомление согласно заданным параметрам
  • delete(notification_id) - удаляет уведомление с заданным id
  • get_by_id(notification_id) - возвращает объект уведомления согласно заданному id
  • show(notification_id) - показывает уведомление с заданным id. Поле shown становится True
  • set_as_pending(notification_id) - устанавливает для уведомления status = PENDING
  • set_as_shown(notification_id) - устанавливает для уведомления status = SHOWN
  • process_notifications() - вызывается при запуске программы. Проверяет, есть ли уведомления, которые не были показаны (status == CREATED) и текущее время находится между временем начала задачи и временем за сколько нужно было напомнить. Если есть, то для этих уведомлений вызывается метод set_as_pending(notification_id).
  • pending_notifications() - возвращает список объектов Notification, у которых status == PENDING

Класс Category - категория задачи (например, "Фильмы к просмотру", "Учёба")

  • id
  • name
  • user_id

Класс CategoriesController - управляет категориями задач (например, "Фильмы к просмотру", "Учёба")

  • create(category, user_id) - создаёт категорию с заданным названием для пользователя с заданным id
  • update(category) - обновляет категорию согласно переданным параметрам
  • get_by_id(id) - возвращает категорию с заданным id
  • delete(id) - удаляет категорию с заданным id

Классы CategoryStorage, LevelStorage, NotificationStorage, TaskStorage, UserStorage обеспечивают обмен данных соответствующих классов с базой данных

Класс Priority - важность выполнения задачи. Представляет собой перечисляемый тип, хранящий значения от 0 до 4 (от LOW до MAX)

Класс Status - статус выполнения задачи. Представляет собой перечисляемый тип, хранящий значения TODO, IN_PROGRESS, DONE, ARCHIVED

Этапы разработки

Прототип

  • добавление и редактирование задач и подзадач
  • добавление и редактирование категорий
  • добавление и редактирование статусов для задач
  • сохранение данных в файлы.

Основная версия

  • регистрация и авторизация пользователей
  • назначение пользователей на задачу
  • редактирование прав пользователя для задачи
  • работа с базой данных

Web приложение

  • перенос и адаптация основной версии под Web приложение
  • добавление и отправка уведомлений (можно реализовать через Web Push)
  • было бы хорошо сделать возле иконки профиля колокольчик, в которым бы отображались все действия, которые касаются пользователя (назначена задача, открыт доступ к задаче и т.д.)
  • будет круто, если смогу сделать, чтобы приоритет задачи менялся Drag'n'Drop'ом (как в Trello).

Сроки

Прототип

До 10 мая

Основная версия

До 30 мая

Web приложение

До 10 июня

Статус

Основная версия и Web приложение готовы