https://github.com/augustomello09/help-desk
O objetivo do projeto é fornecer um sistema no qual os usuários possam abrir chamados e serem atendidos por um técnico com mudanças de status do chamado sendo enviadas por e-mail, informando o cliente sobre a aceitação e conclusão.
https://github.com/augustomello09/help-desk
angular aws-elastic-beanstalk aws-rds aws-s3 docker java javamailsender junit5 jwt-token spring-boot spring-security swagger
Last synced: 29 days ago
JSON representation
O objetivo do projeto é fornecer um sistema no qual os usuários possam abrir chamados e serem atendidos por um técnico com mudanças de status do chamado sendo enviadas por e-mail, informando o cliente sobre a aceitação e conclusão.
- Host: GitHub
- URL: https://github.com/augustomello09/help-desk
- Owner: AugustoMello09
- License: mit
- Created: 2023-12-29T18:50:29.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-11T12:53:14.000Z (about 2 years ago)
- Last Synced: 2025-10-14T18:16:15.171Z (8 months ago)
- Topics: angular, aws-elastic-beanstalk, aws-rds, aws-s3, docker, java, javamailsender, junit5, jwt-token, spring-boot, spring-security, swagger
- Language: Java
- Homepage:
- Size: 456 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Help Desk 🆘
### Projeto Full Stack
O Projeto HelpDesk é uma aplicação web desenvolvida utilizando as tecnologias Java, Spring Boot 3+ e Angular.O objetivo do projeto é fornecer um sistema no qual os usuários possam abrir chamados e serem atendidos por um técnico, as mudanças de status do chamado são enviadas por e-mail, informando o cliente sobre a aceitação e conclusão. O projeto conta com segurança do Spring Security, geração de tokens com JWT, testes unitários e integração com JUnit 5. Este ano, iniciei meus estudos em Cloud com foco na AWS e nada melhor do que colocar em prática alguns conceitos. Por isso, escolhi desenvolver esta aplicação simples para auxiliar nos estudos e compreender como funciona o processo de deploy na AWS, utilizando S3, RDS e Elastic Beanstalk.
https://github.com/AugustoMello09/Locadora/assets/101072311/044efd75-4dbc-425b-9b06-4e4dd98a7221
### UML 🧱

### Funcionalidades Principais como Cliente 👷♀️
__Criando conta__: Os usuários podem se cadastrar no Help Desk.
__Criando chamado__: Os usuários podem criar chamados e descreverem seus problemas `🟢 ABERTO`, após aberto o chamado o usuário tem que aguardar até que seja aceito por um técnico.
### Funcionalidades Principais como Técnico 🛠️
__Criando conta__: Os usuários podem se cadastrar no Help Desk.
__Listar Chamados__: O Técnico pode listar todos os chamados de acordo com seu StatusChamdo `🟢 ABERTO`, `🟡 ANDAMENTO` e `🔴 FECHADO`.
__Aceitando chamado__: O Técnico aceita o chamado, a aplicação envia uma email avisando que seu chamado foi aceito, trocando o status do chamado para `🟡 ANDAMENTO`.
__Finalizando chamado__: Após o técnico resolver o problema é enviado um email para o cliente informando que foi resolvido e seus status é alterado para `🔴 FECHADO`.
### AWS ☁️
O Projeto HelpDesk foi desenvolvido com o intuito de explorar e aplicar conceitos da AWS. Utilizando as tecnologias Java, Spring Boot 3+ e Angular, o projeto foi implantado na infraestrutura da AWS para fornecer uma solução escalável e segura para seus usuários.
##### Fluxo 🔄

- S3 (Simple Storage Service): Armazena o frontend da aplicação, ou seja, todos os arquivos necessários para o usuário interagir com a interface.
- Beanstalk: É onde o backend da aplicação está hospedado. Aqui está o código do servidor que processa as requisições do usuário e fornece as respostas necessárias.
- RDS (Relational Database Service): É onde os dados da aplicação são armazenados de forma segura e organizada. Aqui está o banco de dados MySQL que o backend acessa para recuperar ou armazenar informações.
### Documentação com Swagger 📗
- Documentação do nosso sistema de halp desk usando Swagger, proporcionando uma visão unificada e acessível.

https://github.com/AugustoMello09/Help-Desk/assets/101072311/514100d3-13b1-447f-a15c-203c5441948f
__Acesse a documentação do projeto:__ (Local)
- __Acesse:__ http://localhost:8080/swagger-ui.html para visualizar os endpoints.
### Ferramentas e Tecnologias usadas no Backend 🧱

### Ferramentas e Tecnologias usadas no Frontend 🎨

## Execute o projeto 👁🗨
### Backend 🧱
__Pré-requisitos:__ Java 17, Docker(opcional)
__Clone o repositório do projeto__
` git clone https://github.com/AugustoMello09/Help-Desk.git `
### Configurando o projeto local 🏠
__Configurando o ambiente:__
- Navegue até o diretório do projeto.
```bash
cd HelpDesk-Backend
```
- Acesse o diretório do projeto, utilize o comando mvn install para instalar todas as dependências necessárias:
```bash
# exemplo
cd HelpDesk-Backend
./mvnw install -DskipTests=true
```
- Abra o arquivo de configuração application.yml.
- Modifique o perfil que deseja rodar a aplicação.
__Perfil de teste__
```bash
profiles:
active:
- test
```
__Perfil de Dev__
```bash
profiles:
active:
- dev
```
#### Usando a aplicação no perfil Test 🧪
- Não é necessário nenhuma modificação no projeto, certifique-se que esteja no perfil de test.
__Perfil de teste__: application-test.yml
```bash
profiles:
active:
- test
```
- Suba a aplicação e acesse o H2.
- __Acesse:__ http://localhost:8080/h2-console para visualizar o H2.

- Tudo pronto e funcionando.

#### Usando a aplicação no perfil Dev 🏛️
- __AVISO ⚠️__: para rodar no modo dev faça as modificações necessárias no application-dev.yml.
```bash
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/helpdesk
username: username
password: senha
jpa:
hibernate:
ddl-auto: update
show-sql: false
```
- Antes de supir a aplicação prepare o banco e certifique-se que esteja no perfil de dev.
__Perfil de Dev__: application-dev.yml
```bash
profiles:
active:
- dev
```

- Suba a aplicação e logo depois será criado automaticamente o banco.

- faça um INSERT na tabela tb_cargo.
__COMANDO__:
```bash
INSERT INTO tb_cargo (authority) VALUES ('ROLE_OPERATOR');
INSERT INTO tb_cargo (authority) VALUES ('ROLE_ADMIN');
```

- Feito o INSERT na tabela tb_cargo já pode começar a usar.

### Configurando o projeto para usar Docker-compose 🐳
- __AVISO ⚠️__: para subir o docker-compose usando a imagem `augustomello09/help-desk-backend:latest` o username e password tem que ser root no mySQL. Caso não seja vou mostrar como subir uma nova img e alterar no docker-compose.
##### Alterando a img docker (Caso credencial não for compatível com password e username root).
- Navegue até o local do arquivo e faça modificações necessárias no application-dev.yml com sua credencial do mySQL.

- Certifique-se que esteja no perfil Dev.

- Depois das alterações navegue até o diretório do projeto HelpDesk-Backend e empacote o Jar.
`./mvnw clean peckage -DskipTests=true`
- Gere o build da img do docker (Lembre de tirar os {}).
`docker build -t {NomeDaNovaImg}:{teg} .`
- Depois de todas as modificações e com a img nova, abra o docker-compose e faça as ultimas alterações com a nova img e sua credencial do mySQL.

- Agora com tudo pronto suba o docker-compose: `docker-compose up -d` ( Todas as modificações foram feitas no diretório HelpDesk-Backend).

#### Executando o Docker-compose
- Navegue até o local do arquivo docker-compose.yml e suba.
```bash
cd helpdesk
docker-compose up -d
```
- __Acesse:__ http://localhost:8000 para visualizar o phpMyAdmin.

- Abra o banco helpdesk.

- Execute a Query na tabela de tb_cargo.
__COMANDO__:
```bash
INSERT INTO tb_cargo (authority) VALUES ('ROLE_OPERATOR');
INSERT INTO tb_cargo (authority) VALUES ('ROLE_ADMIN');
```

- Tudo pronto, agora é só usar.
### Configurando o projeto na AWS ☁️ (Opcional)
- __AVISO ⚠️__: Esta seção de implantação na AWS é apenas informativa e não está refletida na última versão da aplicação HelpDesk, você poderá rodar a aplicação local.
##### Antes de começar
- Crie uma conta na AWS
#### Passos para Implantação
1. **Preparação do AWS S3**:
- Acesse o console da AWS -> S3 ;
- Crie um novo bucket

- Acesse as permissões do bucket:
- Gerenciar políticas públicas do bucket;

- Acesse as propriedades do bucket:
- Selecione a opção para utilizar o bucket como website host;

`S3 URL: [nome-do-bucket].s3-website.[zona-do-bucket].amazonaws.com`

2. **Configuração do AWS RDS**:
- Crie um banco no RDS.

- Escolha o MySQL.

- Modelos escolha free tier.

- Configure o nome identificador, username e password do db.

- Deixe somente habilitada a opção marcada e use `db.t3.micro`.

- Desabilite a opção de escalabilidade.

- Escolha o nome do banco de dados. (Recomendo usar o mesmo do id instância)

- Crie o banco.
3. **Configuração do Backend (Spring Boot)**:
- Configure seu aplicativo Spring Boot para usar o banco de dados RDS (MySQL).
1. Crie um application-aws.yml
2. configure para acessar o RDS.
```bash
spring:
datasource:
url: jdbc:mysql://{url}:3306/{nomedb}
username: (username)
password: (senha)
jpa:
hibernate:
ddl-auto: update
show-sql: false
```
- Confira se está usando o perfil da aws no application.yml
e também coloque a porta como 5000.
```bash
server:
port: 5000
profiles:
active:
- aws
```
- Abra o mySQL no meu caso estou usando o HeidiSQL como exemplo.

- Acesse o banco.

- Suba a aplicação e certifique que está usando o perfil correto.
```bash
profiles:
active:
- aws
spring:
datasource:
url: jdbc:mysql://{url}:3306/{nomedb}
username: (username)
password: (senha)
jpa:
hibernate:
ddl-auto: update
show-sql: false
```
- Atualize a tabela.

- faça um INSERT na tabela tb_cargo.
__COMANDO__:
```bash
INSERT INTO tb_cargo (authority) VALUES ('ROLE_OPERATOR');
INSERT INTO tb_cargo (authority) VALUES ('ROLE_ADMIN');
```

- Empacote seu aplicativo em um arquivo JAR executável:
```bash
./mvnw clean package -DskipTests=true
```

4. **Implantação no Elastic Beanstalk**:
__ANTES DE CRIAR UM NOVO AMBIENTE NO ELASTIC BEANSTALK__:
- Acesse IAM
1. Crie um perfil.

2. Selecione as opções.

3. __ACESSE:__ https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-roles-instance.html

5. Adicione as 3 permissões.

4. Escolha um nome para usar.

6. verifique se foram adicionados as permissões.

- Agora Crie um novo ambiente no Elastic Beanstalk para seu aplicativo.

- Escolha o ambiente e o nome da aplicação.

- Escolha a plataforma, e marque as primeiras opções de código da aplicação e predefinições.

- Na configuração de acesso ao serviço use o perfil criado antes de começar a implantação do Beanstalk.

- Coloque as credenciais usadas na criação do RDS com username e password.

- Crie a aplicação.
- Faça o upload do jar empacotado

5. **Preparação do frontend (Angular)**:
- Acesse o diretório do HelpDesk-frontend
```bash
cd helpdesk-frontend
```
- Acesse `environment.prot.ts` e coloque a url gerada pelo Beanstalk.
```bash
export const environment = {
production: true,
baseUrl: 'http://{url}.com'
};
```
- Compile seu projeto Angular para produção:
```bash
ng build --configuration=production
```
- Faça upload dos arquivos gerados para um bucket no Amazon S3.

- Agora é só acessar a url do S3 e testar.
### Frontend 🌐
__Pré-requisitos:__ Angular
__Executar__
- Certifique-se de ter o Node.js e o Angular CLI instalados em seu ambiente.
- Navegue até a pasta do projeto front-end:
```bash
cd helpdesk/helpdesk-frontend
```
__Instale as dependências do projeto:__
```bash
npm install
```
__Inicie a aplicação:__
```bash
ng serve
```
### Entre em contato
Para mais informações sobre o projeto ou para entrar em contato, você pode me encontrar através dos canais abaixo: