An open API service indexing awesome lists of open source software.

https://github.com/mgckaled/ignite-nodejs-api-solid

Repositório do terceiro projeto da trilha Ignite Node.js 2022 desenvolvido pela Rocketseat Education.
https://github.com/mgckaled/ignite-nodejs-api-solid

design-patterns docker fastify jwt nodejs prisma rbac refresh-token solid typescript

Last synced: 2 months ago
JSON representation

Repositório do terceiro projeto da trilha Ignite Node.js 2022 desenvolvido pela Rocketseat Education.

Awesome Lists containing this project

README

          

# Ignite Node.js - `API SOLID`


Node.js




Made by mgckaled

GitHub Repo Size
GitHub Language Count


[**Projeto**](#projeto)   **•**  
[**Tecnologias**](#tecnologias)   **•**  
[**Licença**](#licença)

## Projeto

Foi desenvolvido uma aplicação de check-ins para academias.

**Conceitos e recursos utilziados**:

- SOLID
- Design Patterns
- Docker para iniciar o banco de dados,
- JWT
- Refresh Tokens
- RBAC

### RFs (Requisitos funcionais)

- [x] Deve ser possível se cadastrar;
- [x] Deve ser possível se autenticar;
- [x] Deve ser possível obter o perfil de um usuário logado;
- [x] Deve ser possível obter o número de check-ins realizados pelo usuário logado;
- [x] Deve ser possível o usuário obter o seu histórico de check-ins;
- [x] Deve ser possível o usuário buscar academias próximas (até 10km);
- [x] Deve ser possível o usuário buscar academias pelo nome;
- [x] Deve ser possível o usuário realizar check-in em uma academia;
- [x] Deve ser possível validar o check-in de um usuário;
- [x] Deve ser possível cadastrar uma academia;

### RNs (Regras de negócio)

- [x] O usuário não deve poder se cadastrar com um e-mail duplicado;
- [x] O usuário não pode fazer 2 check-ins no mesmo dia;
- [x] O usuário não pode fazer check-in se não estiver perto (100m) da academia;
- [x] O check-in só pode ser validado até 20 minutos após ser criado;
- [x] O check-in só pode ser validado por administradores;
- [x] A academia só pode ser cadastrada por administradores;

### RNFs (Requisitos não-funcionais)

- [x] A senha do usuário precisa estar criptografada;
- [x] Os dados da aplicação precisam estar persistidos em um banco PostgreSQL;
- [x] Todas listas de dados precisam estar paginadas com 20 itens por página;
- [x] O usuário deve ser identificado por um JWT (JSON Web Token);

### Comandos utilizados no projeto

```powershell
# iniciar projeto
$ npm init -y

# criar tsconfig.json
npx tsc --init

# iniciar prisma
npx prisma init

# executar tipagem / integração do prisma
npx prisma generate

# subir docker container ccom banco de dados postgresql
docker run --name api-solid-pg -e POSTGRESQL_USERNAME=docker -e POSTGRESQL_PASSWORD= -e POSTGRESQL_DATABASE=apisolid -p 5432:5432 bitnami/postgresql

# exibir containers
docker ps

# todos os container já criados pelo desenvolvedor
docker ps -a

# executar imagem do banco de dados postgresql no docker
docker start api-solid-pg
# ou
docker start

# parar imagem do banco de dados postgresql no docker
docker stop api-solid-pg
# ou
docker stop

# executar migração do banco de dados
npx prisma migrate dev

# exibir intarface do banco de dados
npx prisma studio

# exibir coverage de testes (scripts do package.json)
# abrir o arquivo index.html dentro da pasta 'coverage' gerada
npm run test:coverage
```

Análises, exercícios e comentários sobre o código [AQUI](/.github/docs/index.md).

## Tecnologias

## Licença

Distribuído sob a licença *MIT*. Veja [LICENSE](LICENSE) para mais informações. License

---


2023 - Marcel Kaled