Esta documentação tem como objetivo detalhar os requisitos para o desenvolvimento de um Sistema de Gerenciamento de Projetos (SGP). O sistema será uma aplicação web completa, com backend e frontend integrados, projetada para facilitar a gestão de projetos e usuários/colaboradores.
O objetivo principal do Sistema de Gerenciamento de Projetos é fornecer uma plataforma intuitiva e robusta para a administração de projetos. Através do SGP, os usuários poderão criar, editar, visualizar e remover projetos, além de gerenciar usuários vinculados a esses projetos, categorizando-os por seus papéis específicos.
- Node JS (API REST)
- React JS
- Typescript
- MySQL
- JWT
- GIT
- 📂gerenciamento-projetos
- 📂backend
- Container(Caso utilize)
- 📂frontend
- Container(Caso utilize)
- 📂gerenciamento-projetos: Pasta raiz do projeto.
- 📂backend: Contém o código relacionado ao servidor (API RESTful).
- 📂frontend: Contém o código da interface do usuário.
Abaixo está a estrutura da base de dados do projeto:
Projetos:
id: integer
nome: varchar
descricao: text
data_inicio: date
data_fim: date
status: varchar (ex: 'Em andamento', 'Concluído', 'Pendente')
Usuários:
id: integer
nome: varchar
email: varchar
senha: varchar
papel: varchar (ex: 'Gerente', 'Desenvolvedor', 'Designer')
Projetos_Usuários:
usuario_id: integer (referência ao usuário)
projeto_id: integer (referência ao projeto)
O backend será responsável por fornecer uma API RESTful que permitirá a interação com os dados do sistema. A API terá endpoints para realizar operações CRUD (Create, Read, Update, Delete) em projetos e usuários além da autenticação do login e registro de usuários usando JWT.
- Diretório backend: Contém o código do servidor.
- Container (opcional): Para facilitar a execução e o isolamento do ambiente.
Solicitamos que façam o uso do Node JS em uma versão 18 ou superior
Esperamos os seguintes endpoints da API para este primeiro projeto:
-
Listar projetos (GET):
/api/projetos- Resposta de Sucesso (200): Retorna um array com os projetos.
[ { "id": 1, "nome": "Nome do Projeto", "descricao": "Descrição do Projeto", "data_inicio": "2024-01-01", "data_fim": "2024-12-31", "status": "Em andamento" }, ]- Resposta de Erro (404): Retorna uma mensagem indicando que nenhum projeto foi encontrado.
-
Cadastrar Projeto (POST):
/api/projetos- Corpo da Requisição:
{ "nome": "Nome do Projeto", "descricao": "Descrição do Projeto", "data_inicio": "2024-12-31", "status": "Em andamento" }- Resposta de Sucesso (200): Retorna o novo projeto criado.
- Resposta de Erro (400): Retorna uma mensagem indicando que o corpo da requisição está incorreto.
-
Editar Projeto (PUT):
/api/projetos/:id- Corpo da Requisição:
{ "nome": "Novo Nome do Projeto", "descricao": "Nova Descrição do Projeto", "data_inicio": "2024-01-01", "data_fim": "2024-12-31", "status": "Concluído" }- Resposta de Sucesso (200): Retorna o projeto atualizado.
- Resposta de Erro (400): Retorna uma mensagem indicando que o corpo da requisição está incorreto.
-
Remover Projeto (DELETE):
/api/projetos/:id- Resposta de Sucesso (204): Confirma que o projeto foi removido com sucesso.
- Resposta de Erro (400): Retorna uma mensagem indicando problemas na remoção.
-
Listar usuários em um projeto (GET):
/api/projetos/{projetoId}/usuarios- Resposta de Sucesso (200): Retorna a lista de usuários vinculados ao projeto.
[ { "id": 1, "nome": "Nome do Usuário", "email": "email@exemplo.com", "papel": "Desenvolvedor" }, ]- Resposta de Erro (404): Retorna uma mensagem indicando que nenhum usuário foi encontrado para o projeto especificado..
-
Cadastrar Usuário em Projeto (POST):
/api/projetos/{projetoId}/usuarios- Corpo da Requisição:
{ "usuario_id": 1 }- Resposta de Sucesso (201): Retorna o usuário adicionado ao projeto.
- Resposta de Erro (400): Retorna uma mensagem indicando que o corpo da requisição está incorreto.
-
Remover Usuário em Projeto (DELETE):
/api/projetos/{projetoId}/usuarios/{usuarioId}- Resposta de Sucesso (204): Confirma que o usuário foi removido do projeto com sucesso.
- Resposta de Erro (400): Retorna uma mensagem indicando problemas na remoção.
-
Registrar novo usuário (POST):
/api/auth/register- Corpo da Requisição:
{ "nome": "Nome do Usuário", "email": "email@exemplo.com", "senha": "senha123", "papel": "Desenvolvedor" }- Resposta de Sucesso (201): Usuário criado com sucesso:
{ "id": 1, "nome": "Nome do Usuário", "email": "email@exemplo.com", "papel": "Desenvolvedor", "token": "jwt_token" }- Resposta de Erro (400): Dados inválidos ou usuário já existente.
-
**Realizar login de usuário (POST): **
/api/auth/login- Resposta de Sucesso (201): Retorna um token JWT válido:
- Resposta de Erro (400): Credenciais inválidas.
-
Retornar dados do usuário autenticado (GET):
/api/auth/me- Resposta de Sucesso (201): Retorna os dados do usuário autenticado:
- Resposta de Erro (400): Token inválido ou não fornecido.
O frontend será uma SPA (Single Page Application) que interage com a API criada para fornecer uma interface de usuário intuitiva. A interface permitirá logar/cadastrar no sistema, visualizar, adicionar, editar e remover projetos e visualizar, adicionar, editar e remover usuários em projetos.
- Diretório Frontend: Contém o código da interface do usuário.
- Container (opcional): Para isolar o ambiente de desenvolvimento do frontend.
-
Cadastro:
- Registro de novos usuários no sistema.
-
Login:
- Permitirá a autenticação de usuários.
-
Gestão de Projetos:
- Listagem: Tabela com os projetos cadastrados, com opções de adicionar, editar e remover.
- Cadastro/Edição: Formulário para cadastro ou edição de projetos, pode ser uma modal ou uma página separada.
- Exclusão: Confirmação antes de excluir um projeto.
-
Gestão de Usuários em Projetos:
- Listagem de Usuários em Projetos: Tabela com os usuários vinculados ao projeto, com opções de adicionar, editar e remover.
- Cadastro: Formulário para associação de um usuário ao projeto.
- Exclusão: Confirmação antes de excluir um usuário de um projeto.
No geral, tudo será avaliado. Porém nosso foco é descobrir como você aplica os conceitos da programação nos seus projetos, como você soluciona problemas e como irá gerar valor ao produto desenvolvido.
- Estrutura do Código: Organização e clareza do código.
- Cumprimento de Requisitos: Atendimento aos requisitos especificados.
- Lógica de Programação: Soluções implementadas e sua eficiência.
- Metodologia Aplicada: Abordagem para resolver problemas e entregar valor.
- Criatividade: Criatividade na solução dos requisitos propostos.
Faça o projeto calmamente e organizadamente! E após finaliza-lo envie-nos e aguarde a correção.
- OBS: Faça commits claros e descritivos, estaremos atentos a cada detalhe do seu desenvolvimento.
Abaixo estão as implementações que terão de ser feitas no seu projeto. Quanto mais itens você entregar, melhor será sua avaliação. Utilize este checklist como um guia e faça os itens que conseguir.
Os itens estão separados por níveis, e o nível 1 é o mínimo que esperamos que vocês entreguem. Considerem diferenciais para este primeiro projeto itens do nível 2 em diante.
Legenda:
- B -> Backend
- F -> Frontend
| Descrição | Local | |
|---|---|---|
| [ ] | Listar projetos | F B |
| [ ] | Cadastrar um projeto | F B |
| [ ] | Editar um projeto | F B |
| [ ] | Remover um projeto | F B |
| [ ] | Listar usuários em projetos | F B |
| [ ] | Cadastrar usuários em projetos | F B |
| [ ] | Remover usuários em projetos | F B |
| [ ] | Tipagem de dados | F B |
| [ ] | Registro de usuários no sistema | F B |
| [ ] | Autenticação via login | F B |
| [ ] | Validações de campos | F B |
| Descrição | Local | |
|---|---|---|
| [ ] | Tratamento de exceções / Retornos erros concisos | F B |
| [ ] | Mensagens de sucesso e/ou erros | F |
| [ ] | Impedir remoção de projetos não concluídos | B |
| [ ] | Paginação na listagem de projetos | F B |
| [ ] | Paginação na listagem de usuários | F B |
| [ ] | Confirmação para exclusão de itens | F |
| Descrição | Local | |
|---|---|---|
| [ ] | Testes de integração | B |
| [ ] | Organização e estrutura de pastas | F B |
| [ ] | Clean Code | F B |
| Descrição | Local | |
|---|---|---|
| [ ] | Disponibilização do backend via Containers | B |
| [ ] | Disponibilização do frontend via Containers | F |
| [ ] | Disponibilização dos containers (backend + frontend) | F B |