PROF. ALEXANDRE DE SOUZA JR
DESAFIO TÉCNICO: JAVA EXPERIENCE
Nome do projeto: Sistema de Gerenciamento de Tarefas
Descrição do projeto:
O objetivo deste projeto é desenvolver um sistema de gerenciamento de tarefas
simples, onde os usuários possam criar, atualizar, visualizar e excluir suas tarefas.
Requisitos técnicos:
1. O sistema deve ser implementado usando o framework Spring Boot e Java.
2. As tarefas devem ter os seguintes campos: título, descrição, data de criação e status
(concluída ou não concluída).
3. Os usuários devem ser capazes de se registrar e fazer login no sistema.
4. Cada usuário deve ter acesso apenas às suas próprias tarefas.
5. O sistema deve fornecer APIs RESTful para realizar as seguintes operações:
5.1. Criar uma nova tarefa.
5.2. Atualizar uma tarefa existente.
5.3. Excluir uma tarefa.
5.4. Obter uma lista de todas as tarefas do usuário.
5.5. Marcar uma tarefa como concluída.
6. O sistema deve ser protegido por autenticação JWT para garantir que apenas usuários
autenticados possam acessar as APIs (exceto as de login e cadastro).
7. As tarefas devem ser armazenadas em um banco de dados relacional (MySQL).
8. O projeto deve ser configurado usando o Maven para gerenciamento de
dependências.
9. O código-fonte deve ser hospedado em um repositório GitHub:
9.1. O repositório do projeto deve conter um histórico de commits relevante,
com mensagens de commit claras e concisas.
9.2. Os candidatos devem criar um arquivo README.md com informações sobre
como executar o projeto localmente.
Sugestões adicionais:
Além dos requisitos básicos, os candidatos podem adicionar recursos extras para
mostrar suas habilidades, como paginação na listagem de tarefas, pesquisa por título ou
descrição, ordenação por data, etc. A interface do usuário não precisa ser implementada
para este desafio, mas os candidatos podem criar uma documentação Swagger para
facilitar o teste das APIs.
Copie e cole o link abaixo no navegador apos a inicialização da API
http://localhost:8080/swagger-ui.html#/user-controller
Para alterar o ambiente deve mudar a variavel dev para prod ou test
spring.profiles.active=${APP_PROFILE:dev}
spring.jpa.open-in-view=false
security.oauth2.client.client-id=${CLIENT_ID:taskManagement}
security.oauth2.client.client-secret=${CLIENT_SECRET:taskManagement}
jwt.secret=${JWT_SECRET:MY-JWT-SECRET}
jwt.duration=${JWT_DURATION:86400}
Link http://localhost:8080/h2-console/
Deve criar o SCHEMA com nome taskmanagement com acesso para usuario: root senha: root
INSERT INTO USER (EMAIL,NAME,PASSWORD) VALUES ('vitor@gmail.com','vitor','$2a$12$M0MZT.cs2NfePHC4ZIfEpukYtY2rb1a4RtBZTeqFH5yO7H8rRPVYO');
INSERT INTO USER (EMAIL,NAME,PASSWORD) VALUES ('rodrigo@gmail.com','rodrigo','$2a$12$M0MZT.cs2NfePHC4ZIfEpukYtY2rb1a4RtBZTeqFH5yO7H8rRPVYO');
INSERT INTO USER (EMAIL,NAME,PASSWORD) VALUES ('admin@gmail.com','admin','$2a$12$M0MZT.cs2NfePHC4ZIfEpukYtY2rb1a4RtBZTeqFH5yO7H8rRPVYO');
INSERT INTO ROLE (AUTHORITY) VALUES ('ROLE_ADMIN');
INSERT INTO USER_ROLE (user_id,role_id) VALUES('1','1');
INSERT INTO USER_ROLE (user_id,role_id) VALUES('2','1');
INSERT INTO USER_ROLE (user_id,role_id) VALUES('3','1');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('1','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('2','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('3','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('4','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('5','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('6','2',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('7','2',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('8','2',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('9','2',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('10','2',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('11','3',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('12','3',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('13','3',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('14','3',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('15','3',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('16','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('17','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('18','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('19','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');
INSERT INTO TASK (ID,COD_USER,DATA_CRIACAO,DESCRICAO,TITULO,STATUS) VALUES ('20','1',TO_DATE('23/06/2023','DD/MM/YYYY'),'TAREFA TREINA RECIFE IPI', 'TAREFA TREINA RECIFE','NAO CONCLUIDA');