https://github.com/trkotovicz/todos-nest
API com as principais funcionalidades de um gerenciador de tarefas
https://github.com/trkotovicz/todos-nest
api-rest docker e2e-testing jest jwt-authentication mysql nestjs nodejs supertest swagger typeorm typescript unit-testing
Last synced: 3 months ago
JSON representation
API com as principais funcionalidades de um gerenciador de tarefas
- Host: GitHub
- URL: https://github.com/trkotovicz/todos-nest
- Owner: trkotovicz
- Created: 2024-03-18T23:08:13.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-22T02:49:19.000Z (over 2 years ago)
- Last Synced: 2025-03-25T08:37:07.710Z (over 1 year ago)
- Topics: api-rest, docker, e2e-testing, jest, jwt-authentication, mysql, nestjs, nodejs, supertest, swagger, typeorm, typescript, unit-testing
- Language: TypeScript
- Homepage:
- Size: 454 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ToDo App
ToDo App é uma API com as principais funcionalidades de um gerenciador de tarefas.
## Sobre a aplicação
- A aplicação foi construída utilizando Node.JS, Typescript e o framework [Nest.JS](https://docs.nestjs.com/).
- O ORM escolhido foi o [TypeORM](https://typeorm.io/).
- O banco é o [MySQL](https://www.mysql.com/)
- As rotas são protegidas no padrão [Bearer Authentication](https://swagger.io/docs/specification/authentication/bearer-authentication).
## Requisitos
Uma pessoa deseja se cadastrar para usufruir do gerenciador de tarefas:
- Pessoa precisa estar autenticada.
- Pessoa pode ter várias tarefas.
- Não pode haver tarefas repetidas.
## Funcionalidades
- **Criar uma pessoa:** o `username` deve ser único.
- Listar usuários.
- Excluir usuário.
- Editar usuário.
- **Adicionar uma tarefa**: `task` deve ser único.
- Listar tarefas.
- Excluir tarefas.
- Editar tarefas.
## Variáveis de Ambiente
Para usar a aplicação, você precisará configurar as variáveis de ambiente.
Renomeie o arquivo raiz do projeto `.env.example` para `.env`. Este arquivo contém todas as variáveis necessárias para iniciar o aplicativo.
⚠️ **Importante**
Você deve substituir as informações do arquivo pelas credenciais do seu banco de dados.
Além disso, na variável `MYSQL_HOST` você precisará informar `localhost` para rodar o projeto **localmente**, ou `mysql` para rodar a aplicação via **Docker**.
Exemplo:
```bash
MYSQL_HOST=mysql # Para rodar pelo Docker
MYSQL_HOST=localhost # Para rodar localmente
MYSQL_USER=root
MYSQL_PASSWORD=root
```
## Inicialização da Aplicação
### Inicialização via Docker 🐳
1. Clone o repositório `git@github.com:trkotovicz/todos-nest.git`.
2. Na raíz do repositório, abra o terminal e rode o comando `npm run compose:up` e aguarde a alicação subir (esse passo pode demorar um pouco).
3. Para encerrar a aplicação, rode o comando `npm run compose:down`.
### Inicialização local 🖥
1. Clone o repositório `git@github.com:trkotovicz/todos-nest.git`.
2. Na raíz do repositório instale as dependências:
```bash
$ npm install
```
3. Configure as variáveis de ambiente no arquivo `.env`
4. Inicialize o projeto:
```bash
$ npm start
```
## API
Com a aplicação rodando acesse a [documentação da API](http://localhost:3001/docs/#/).
### ⚠️ Rotas protegidas
As ações devem ser realizadas com a conta da pessoa autenticada.
O token retornado do login deve ser enviado no header com o nome de `Authorization`.
Exemplo:
```
Authorization: Bearer {TOKEN_AQUI}
```
## Banco de Dados
O aplicativo usa o banco de dados MySQL. Certifique-se de tê-lo instalado em seu computador caso queira rodar a aplicação **localmente**. A aplicação possui os scripts necessários para criar ou excluir o banco de dados.
_**Ao iniciar a aplicação, o banco de dados será criado automaticamente.**_
Scripts:
- `npm run db:create` para criar seu banco de dados.
- `npm run db:drop` para excluir o banco de dados.
## Testes
A aplicação possui testes unitários e testes de integração (E2E).
Para isso, foi utilizado Jest e Supertest.
```bash
# tests
npm test
# coverage
npm run test:cov
```
---
Projeto desenvolvido por [Thais R Kotovicz](https://www.linkedin.com/in/thaiskotovicz/).