Рассмотрим приложения Any.do, Wunderlist и Todoist
Во всех этих приложениях есть:
- создание задач
- присвоение категорий задачам (например, "Фильмы к просмотру" или "Личные поручения")
- установка приоритета
- создание подзадач
- установка даты и времени выполнения задачи
- установка напоминания
- добавление заметок
Теперь распишем отличительные особенности этих приложений
- при добавлении задачи предлагает наиболее частые варианты ("купить", "позвонить" и т.д.)
- при выполнении задачи перечёркивается в списке и только потом её можно удалить.
- задачи можно группировать в папки
- возможность добавить пользователя для совместного выполнения списка задач
- возможность оставлять комментарии под задачей для обсуждения с другими пользователями
- система кармы (позволяет анализировать и визуализировать производительность пользователя. Существует пять уровней в зависимости от количества набранных пользователем пунктов: Новичок, Любитель, Эксперт, Мастер и Гуру)
- подзадачи в Todoist - полноценные задачи, к которым также можно установить дату и время с напоминаниями и т.д., в отличие от Any.do и Wunderlist, где подзадачи являются просто строками, которые можно добавить и удалить
- несколько уровней важности (приоритета) с выделением цветом
Из этих 3 приложений для меня безусловным лидером является Todoist.
- возможность просмотра в нескольких режимах (день, неделя, месяц, год)
- создание событий в определённый день или промежуток времени
- установка напоминания для события
- указание места проведения события
- возможность добавления участников к событию
- импорт и экспорт различных календарей
Также были рассмотрены Календарь Outlook и Яндекс.Календарь. Все они обладают тем же функционалом, что и Google Calendar с минимальными отличиями во внешнем виде (например, в Календаре Outlook показывается погода на ближайшие дни, а в Яндекс.Календаре сохранена цветовая палитра всех продуктов Яндекс).
- у каждого пользователя есть возможность создать доски с отображением задач по спискам
- добавление комментариев и меток к задаче
- добавление участников к задаче
- создание общих досок
- уровни доступа для каждого пользователя
- интеграция с Bitbucket
- запись информации о потраченном времени на каждую задачу
- просмотр статистики
- Scrum и Kanban доски
- у Васи лабораторная работа по ИСП. Добавляется задача "Сделать лабораторную №2". Устанавливаются крайний срок для начала работы (7 марта) и крайний срок выполнения (13 марта), категория "Учёба". Эта задача разделяется на подзадачи: "Расписать аналоги", "Написать сценарии использования", и т.д.
- Вася также любит смотреть фильмы. Его одногруппник Влад посоветовал ему несколько фильмов к просмотру. Вася создаёт категорию "Фильмы к просмотру" и добавляет туда фильмы.
- Влад похвастался, что у него уже 3-й уровень в трекере дел. А у Васи только 1-й. Поэтому Вася срочно начал выполнять задачи, которые были у него в трекере для того, чтобы обогнать Владика.
- Мама сказала Васе сходить в магазин. Добавляется задача "Купить продукты", в заметках к которой указываются продукты. Также для этой задачи указывается высокий приоритет, так как мама не может ждать.
- Васю приглашают на собеседование. Указывается промежуток времени: с 15:00 до 17:00 25 апреля. В заметках добавляется место. Устанавливается напоминание за неделю, чтобы Вася успел подготовиться к нему.
- Вася участвует в чемпионат по программированию BSUIR OPEN. Добавляется задача "BSUIR OPEN". Создаются подзадачи - задачи олимпиады. Каждому участнику команды предоставляется доступ к задаче "BSUIR OPEN". Он выбирает, какую задачу он хочет решить и назначает её на себя.
- создание и редактирование задачи
- присвоение категорий задачам
- установка срока начала и срока конца выполнения задачи
- добавление заметок/примечаний к задаче
- установка напоминаний
- создание подзадач
- регистрация и авторизация для пользователей
- предоставление доступа к задачам другим пользователям
- назначение задачи на пользователя
- добавление события с временем начала и конца
- система уровней: у каждого пользователя будут очки опыта, которые он сможет получать за выполнение задач. Чем больше задач выполнено, тем больше уровень.
- id
- name
- password
- level_id
- 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, привязанный к данному пользователю
- id
- experience - текущее количество опыта пользователя.
- current_level() - возвращает текущий уровень исходя из количества опыта
- next_level_experience() - возвращает количество опыта, необходимое для получения следующего уровня
- increase_experience() - повышает количество опыта на заданную константу (стандартное количество опыта за выполнение задачи)
- create() - создаёт объект класса Level
- delete(id) - удаляет уровень пользователя с заданным id
- get_by_user_id(user_id) - возвращает объект уровня пользователя по id пользователя
- 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 - является ли событием с промежутком времени (временем начала и конца)
- 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
- id
- task_id
- start_time - хранится относительное время от времени начала задачи. Например, "напомнить за 5 часов до начала"
- title
- status - статус уведомления (CREATED (по умолчанию), PENDING, SHOWN)
- 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
- id
- name
- user_id
- 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 Push)
- было бы хорошо сделать возле иконки профиля колокольчик, в которым бы отображались все действия, которые касаются пользователя (назначена задача, открыт доступ к задаче и т.д.)
- будет круто, если смогу сделать, чтобы приоритет задачи менялся Drag'n'Drop'ом (как в Trello).
До 10 мая
До 30 мая
До 10 июня
Основная версия и Web приложение готовы