Uma ferramente de gerenciamento de tarefas, similar à board do MeisterTask.
- Quem terá acesso a plataforma e poderá usufruir de suas funcionalidades;
- Um projeto só pode ter um owner;
- Deve existir uma categoria padrão que não pode ser apagada, mas pode ser editada;
- Status: pending, done, expired;
- Deve pertencer a uma categoria;
- Se tiver um assign, o usuário assigned não poderá estar com outra tarefa pending agendada para o mesmo período de tempo (Se tiver done, pode existir sobreposição de agendamentos. Se tiver pending, não pode existir sobreposição. Se tiver expired, o usuário não pode ter nenhum assign pro futuro até que esteja done);
- Roles: owner, maintainer e colaborator;
- Para adicionar ou remover participante, a role do participante em questão deve ser inferior a quem está realizando a ação;
- Login/Logout (todos);
- Pedir esquecimento (apagar tudo do usuário: projetos, tasks, etc.);
- Criar um projeto (todos);
- Listar projetos (todos - aparecem apenas os seus);
- Deletar um projeto (owners);
- Editar um projeto (owners, maintainers);
- Visualizar um projeto (usuários relacionados ao projeto);
- Adicionar participantes (owners, maintainers);
- Remover participantes (owners, maintainers);
- Criar uma tarefa (owners, maintainers);
- Dar assign numa tarefa (Pode dar assign pra outro tenha role inferior naquele projeto OU para si caso esteja sem assign);
- Marcar uma tarefa como concluída (Owner, maintainar ou assigned);
- Mudar categoria da tarefa (Owner, maintainar ou assigned);
- Mudar data de início e fim de uma tarefa (Owner ou maintainar);
- Deletar (Owner ou maintainar);
- Visualizar (usuários relacionados ao projeto);
- Usuário consegue buscar tarefas, através de um termo, pelo nome;
- Criar e editar categorias (owners, maintainers);
- Apagar categorias. Ao apagar, mover tarefas para a categoria padrão. (owners, maintainers);
- Devise (Autenticação e fluxo de cadastro);
- Devise Token Auth (Autenticação via tokens);
- Pundit (Políticas de acesso);
- JSON:API Serialization Library (views/jsons);
- Name (Nome do usuário, string);
- Password (Senha do usuário, string);
- Email (Email do usuário, string, será uma chave única de identificação de usuário);
- Name (Nome do projeto, string);
- Tem exatamente 1 owner;
- Name (Nome da categoria, string);
- Slug (Nome da categoria parametrizado, string, única por projeto);
- ProjectID (ID do projeto a qual a categoria deve pertencer, integer);
- Name (Nome da tarefa, string);
- Description (Descrição da tarefa, text);
- StartDate (Data em que a tarefa deve ser iniciada, Datetime);
- DueDate (Data em que a tarefa deve ser finalizada, Datetime);
- Status (Status atual da realização da tarefa, enum: pending, done, expired);
- CategoryID (ID da categoria a qual a tarefa deve pertencer, integer);
- ProjectID (ID do projeto que será associado ao usuário, integer);
- UserID (ID do usuário que será associado ao projeto, integer);
- Role (Função de um usuário dentro do projeto, enum: owner, maintainer, developer)