|
1 |
| -<p align="center"> |
2 |
| - <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a> |
3 |
| -</p> |
4 |
| - |
5 |
| -[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 |
6 |
| -[circleci-url]: https://circleci.com/gh/nestjs/nest |
7 |
| - |
8 |
| - <p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p> |
9 |
| - <p align="center"> |
10 |
| -<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a> |
11 |
| -<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a> |
12 |
| -<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a> |
13 |
| -<a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a> |
14 |
| -<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a> |
15 |
| -<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a> |
16 |
| -<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a> |
17 |
| -<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a> |
18 |
| - <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg" alt="Donate us"/></a> |
19 |
| - <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a> |
20 |
| - <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow" alt="Follow us on Twitter"></a> |
21 |
| -</p> |
22 |
| - <!--[](https://opencollective.com/nest#backer) |
23 |
| - [](https://opencollective.com/nest#sponsor)--> |
24 |
| - |
25 |
| -## Description |
26 |
| - |
27 |
| -[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. |
28 |
| - |
29 |
| -## Project setup |
30 |
| - |
31 |
| -```bash |
32 |
| -$ npm install |
33 |
| -``` |
34 | 1 |
|
35 |
| -## Compile and run the project |
| 2 | +# Corpora - Backend |
36 | 3 |
|
37 |
| -```bash |
38 |
| -# development |
39 |
| -$ npm run start |
| 4 | +Este é o backend da aplicação **Corpora**, desenvolvido com **NestJS** utilizando **TypeScript**. Ele fornece serviços para autenticação, autorização, integração com OAuth (Google) e gerenciamento de empresas associadas a usuários. |
40 | 5 |
|
41 |
| -# watch mode |
42 |
| -$ npm run start:dev |
| 6 | +--- |
43 | 7 |
|
44 |
| -# production mode |
45 |
| -$ npm run start:prod |
46 |
| -``` |
| 8 | +## 🚀 Funcionalidades |
47 | 9 |
|
48 |
| -## Run tests |
| 10 | +- Autenticação e autorização com **JWT** e **OAuth Google**. |
| 11 | +- Suporte a guardas para controle de acesso: **Local**, **JWT** e **Google**. |
| 12 | +- Operações CRUD para empresas (Create, Read, Update, Delete). |
| 13 | +- Estrutura modular seguindo princípios **SOLID** e organização limpa. |
| 14 | +- Conexão com **MySQL** usando **TypeORM**. |
49 | 15 |
|
50 |
| -```bash |
51 |
| -# unit tests |
52 |
| -$ npm run test |
| 16 | +--- |
53 | 17 |
|
54 |
| -# e2e tests |
55 |
| -$ npm run test:e2e |
| 18 | +## 🛠️ Tecnologias |
56 | 19 |
|
57 |
| -# test coverage |
58 |
| -$ npm run test:cov |
59 |
| -``` |
| 20 | +- **NestJS** (Framework para Node.js) |
| 21 | +- **TypeScript** |
| 22 | +- **JWT** para autenticação |
| 23 | +- **OAuth2** para login com Google |
| 24 | +- **MySQL** como banco de dados |
| 25 | +- **TypeORM** para modelagem e gerenciamento do banco de dados |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## ⚙️ Configuração do Ambiente |
| 30 | + |
| 31 | +1. **Instale as dependências:** |
| 32 | + ```bash |
| 33 | + npm install |
| 34 | + ``` |
| 35 | + |
| 36 | +2. **Configure o arquivo `.env`:** |
| 37 | + Crie um arquivo `.env` na raiz do projeto e adicione os seguintes valores que existem no arquivo `.env.example`: |
| 38 | + |
| 39 | + ```plaintext |
| 40 | + DB_HOST=localhost |
| 41 | + DB_PORT=3306 |
| 42 | + DB_USER=root |
| 43 | + DB_PASSWORD=sua_senha_do_banco |
| 44 | + DB_NAME=corpora |
| 45 | + JWT_SECRET=12345 |
| 46 | + JWT_EXPIRES_IN=1d |
| 47 | + REFRESH_JWT_SECRET=12345 |
| 48 | + REFRESH_JWT_EXPIRES_IN=7d |
| 49 | + GOOGLE_CLIENT_ID=seu_google_client_id |
| 50 | + GOOGLE_SECRET=seu_google_secret |
| 51 | + GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callback |
| 52 | + ``` |
| 53 | + |
| 54 | +3. **Tenha um servidor MySQL configurado:** |
| 55 | + |
| 56 | + ``` |
60 | 57 |
|
61 |
| -## Resources |
| 58 | +--- |
62 | 59 |
|
63 |
| -Check out a few resources that may come in handy when working with NestJS: |
| 60 | +## 🏃 Executando o Backend |
64 | 61 |
|
65 |
| -- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework. |
66 |
| -- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy). |
67 |
| -- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/). |
68 |
| -- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com). |
69 |
| -- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com). |
70 |
| -- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs). |
71 |
| -- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com). |
| 62 | +1. **Modo de Desenvolvimento:** |
| 63 | + ```bash |
| 64 | + npm run start:dev |
| 65 | + ``` |
72 | 66 |
|
73 |
| -## Support |
| 67 | +--- |
74 | 68 |
|
75 |
| -Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). |
| 69 | +## 📖 Decisões Técnicas |
76 | 70 |
|
77 |
| -## Stay in touch |
| 71 | +- **Modularidade e SOLID:** |
| 72 | + A arquitetura do backend foi projetada com módulos independentes e bem definidos, como `AuthModule`, `UserModule`, e `CompanyModule`, seguindo o princípio da **separação de responsabilidades**. Isso permite que novas funcionalidades sejam adicionadas ou alteradas com impacto mínimo em outras partes do sistema. |
78 | 73 |
|
79 |
| -- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec) |
80 |
| -- Website - [https://nestjs.com](https://nestjs.com/) |
81 |
| -- Twitter - [@nestframework](https://twitter.com/nestframework) |
| 74 | +- **NestJS Framework:** |
| 75 | + O NestJS foi escolhido por sua abordagem opinativa e sua aderência aos princípios da engenharia de software, como o SOLID. Ele oferece uma estrutura robusta e escalável, permitindo a criação de APIs RESTful com práticas modernas. |
82 | 76 |
|
83 |
| -## License |
| 77 | +- **TypeORM:** |
| 78 | + Utilizado para simplificar a interação com o banco de dados MySQL. Com ele, foi possível: |
| 79 | + - Gerenciar entidades com facilidade. |
| 80 | + - Sincronizar o esquema do banco de dados. |
| 81 | + - Garantir a consistência e integridade dos dados por meio de validações a nível de entidade. |
| 82 | + |
| 83 | +- **Guards para Controle de Acesso:** |
| 84 | + Os **Guards** do NestJS foram essenciais para proteger as rotas e garantir que somente usuários autorizados pudessem realizar determinadas ações. As implementações incluem: |
| 85 | + - **LocalGuard:** Realiza a autenticação inicial do usuário com credenciais tradicionais. |
| 86 | + - **JwtGuard:** Verifica e valida tokens JWT para proteger rotas de acesso restrito. |
| 87 | + - **GoogleGuard:** Facilita o login com OAuth 2.0 do Google, integrando a autenticação social de forma segura. |
| 88 | + |
| 89 | +- **Injeção de Dependência:** |
| 90 | + O uso nativo do NestJS para gerenciar dependências tornou o código mais limpo e fácil de testar, promovendo a reutilização de serviços e a manutenção do projeto. |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## 🔑 Configuração do OAuth Google |
| 95 | + |
| 96 | +1. Acesse o [Console de API do Google](https://console.developers.google.com/). |
| 97 | +2. Crie um projeto e habilite o **OAuth 2.0**. |
| 98 | +3. Adicione as seguintes URLs de redirecionamento: |
| 99 | + - **`http://localhost:3000/auth/google/callback`** |
| 100 | +4. Copie o **Client ID** e **Secret** e configure no `.env`, substituindo os valores das variáveis existentes. |
| 101 | + |
| 102 | +--- |
| 103 | + |
| 104 | +## 📂 Estrutura do Projeto |
| 105 | + |
| 106 | +```plaintext |
| 107 | +src/ |
| 108 | +├── auth/ # Módulo de autenticação |
| 109 | +├── auth/decorators # Decorator para role de usuario |
| 110 | +├── auth/enums # Enum de role de usuario |
| 111 | +├── auth/guard # Validação de rota com tipo de autenticação |
| 112 | +├── auth/jwt # Configuração do token e refresh token do jwt |
| 113 | +├── company/ # Módulo de empresas |
| 114 | +├── config/ # Configuração do google |
| 115 | +├── dto/ # Dto de paginação |
| 116 | +├── strategies/ # Estratégias de autenticação |
| 117 | +├── typeOrm/ # Configuração das entidades do banco de dados |
| 118 | +├── user/ # Modulo de usuario |
| 119 | +├── utils/ # Tamanho padrão do retorno de uma requisicao |
| 120 | +├── main.ts # Arquivo principal |
| 121 | +├── database-init.ts # Arquivo de configuração do banco de dados |
| 122 | +``` |
84 | 123 |
|
85 |
| -Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE). |
| 124 | +--- |
0 commit comments