- Front-end
- Back-end
- BCrypt
- Criação de Tasks
- Diagrama de Classes
- Chat Assistente
- Principais Bibliotecas
- Tech Stack Utilizada
- Executar o Projeto
Tela de registro aonde é necessario seu nome, e-mail e uma senha de 8 caracteres
Tela aonde deve ser passada as informações de login previamente cadastradas
Tela principal com a criação, listagem, atualização e exclusão das tasks, e na barra da direita um ChatBot usando com tecnologia do ChatGPT 3.5
Endpoint | Método | Body | Status | Response | Descrição |
---|---|---|---|---|---|
/auth/register | POST | UserRegister | 201 | Cadastrar o usuário. | |
/auth/login | POST | UserLogin | 200 | Token | Logar o usuário e gerar um Token. |
/tasks/create | POST | TaskRequestData | 201 | Cria uma nova Task. | |
/tasks/list/{login} | GET | 200 | TaskResponseData[] | Lista de todas as tasks. | |
/tasks | PUT | TaskUpdateData | 200 | TaskResponseData | Atualiza uma Task existente. |
/tasks/{taskId} | DELETE | 204 | Deleta a Task escolhida. | ||
/chat | POST | ChatRequestData | 200 | String | Responde a pergunta solicitada. |
É necessario passar o email e senha fornecidos durante o registro, caso seja valido, sera devolvido um Token JWT para autenticação.
- ➡️ seu nome
- ➡️ seu login (email)
- ➡️ sua senha
{
"username": "luiz",
"login": "[email protected]",
"password": "123456"
}
{
"id": 1,
"username": "luiz",
"login": "[email protected]",
"password": "$2a$10$diT5bwmH91kdVQvNmmUAae.e8sIUgfkixdgfAJqWr17R.jjldSAsK",
"enabled": true,
"authorities": [
{
"authority": "Usuario"
}
],
"accountNonLocked": true,
"accountNonExpired": true,
"credentialsNonExpired": true
}
Foi usado a criptografia do algoritimo HMAC256 para criptografar as senhas dos usuários e armazenalas no banco de dados da maneira correta seguindo os padrões estabelecidos pela LGPD.
É necessario passar o email e senha fornecidos durante o registro, caso seja valido, sera devolvido um Token JWT para autenticação.
- ➡️ seu login (email)
- ➡️ sua senha
{
"login": "[email protected]",
"password": "12345678"
}
Exemplo de Token JWT gerado caso a requisição de login seja bem sucedida, nele possui os dados relacionados ao usuario que o gerou e tem validade de 2 horas.
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. TyJzdWIiOiJlZG5hbGRvLmVsbjY4QGdtYWlsLmNvbSIsImlzcyI6IlRvLWRvIGxpc3QiLCJleHAiOjE2OegwODY1MTB9.gFolC6lmSqS9FiAdM1zIX0CftVAokc495pkMNnDYLaU"
}
Esse diagrama ilustra o processo da requisição do usuário, aonde ela é enviada do Front-end até o servidor, aonde ela sera processada e se validada, retorna um Token JWT que será armazenado no localstorage do navegador.
sequenceDiagram
participant User as Usuario
participant Application as Front-end
participant Server as Back-end
User->>Application: 1. Inicia o processo de login
Application->>Server: 2. Envia solicitação de login (POST /auth/login)
Server->>Server: 3. Verifica as credenciais no banco de dados
Server-->>Application: 4. Confirmação de sucesso (HTTP 200)
Server-->>Application: 5. Gera um token JWT
Application-->>User: 6. Logado com sucesso
- ➡️ titulo da tarefa
- ➡️ descrição da tarefa (opcional)
- ➡️ prioridade (BAIXA, MEDIA, ALTA)
- ➡️ data inicio da tarefa
- ➡️ data prevista para finalizar
- ➡️ email do usuario
⚠️ OBS: no Front-end o email não é necessario, visto que ele é atribuido automaticamente atraves da decodificação do token JWT enviado
{
"title": "Estudar",
"description": "estudar orientação a objetos com Java",
"priority": "ALTA",
"startAt": "2023-11-06T12:30:00",
"endAt": "2023-11-08T12:30:30",
"userLogin": "[email protected]"
}
Diagrama ilustrativo do modelo orientado a objetos dando uma breve visão de como o sistema e as entidades do banco de dados estão ligadas usando um SGBD relacional
classDiagram
direction RL
class UserModel {
-id: Long
-username: String
-login: String
-password: String
-tasks: List < TaskModel >
}
class TaskModel {
-id: Long
-description: String
-title: String
-startAt: LocalDateTime
-endAt: LocalDateTime
-priority: Priority
-userLogin: UserModel
-createdAt: LocalDateTime
}
class Priority {
<<enumeration>>
BAIXA
MEDIA
ALTA
}
UserModel "1" -- "0..*" TaskModel : Tem
TaskModel "1" -- "1" UserModel : Possui
Caso envie uma mensagem, ela será validade pela Api do GPT 3.5, caso ele encontre uma solução, irá enviar uma resposta.
- ➡️ pergunta/descrição da Task
{
"prompt": "olá, bom dia!"
}
{
"role": "assistant",
"content": "Olá! Bom dia! Como posso ajudar?"
}
biblioteca usada para realizar conexão com a API do ChatGPT
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.16.0</version>
</dependency>
biblioteca usada para filtrar as requisições e autenticar os usuários
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
biblioteca usada para gerar o Token JWT
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.2.1</version>
</dependency>
biblioteca usada em conjunto com o docker-compose.yml para criação do container com a imagem do MySQL
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<version>3.1.0</version>
</dependency>
MySQL | Hibernate | Spring Boot | Java | Javascript | VSCode | Postman | Docker |
🔖 8.1.0 | 🔖 6.3 | 🔖 3.1.4 | 🔖 17 | 🔖 ES6 | 🔖 1.83 | 🔖 10.19 | 🔖 24.0.6 |
git clone https://github.com/EdnaldoLuiz/to-day-list.git
cd to-day-list
./mvnw spring-boot:run
Back-end: http://localhost:8080
MySQL: http://localhost:3307
⚠️ OBS: o docker-compose é iniciado junto graças a biblioteca spring-boot-docker-compose
cd front-end
npm run start
Front-end: http://localhost:3333