Skip to content

Commit

Permalink
Adding readme
Browse files Browse the repository at this point in the history
  • Loading branch information
MatheusSanchez committed Dec 5, 2023
1 parent d652dc5 commit 95bae14
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
NODE_ENV=dev
#PORT=3333 ## default port, chage as needed
DATABASE_URL="postgresql://docker:docker@localhost:8080/gym_pass_db?schema=public"
JWT_SECRET="yoursecret"
92 changes: 92 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# SOLID STUDY

[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/MatheusSanchez/gym-check-in-api/blob/main/README.md)
[![pt-br](https://img.shields.io/badge/lang-pt--br-green.svg)](https://github.com/MatheusSanchez/gym-check-in-api/blob/main/README.pt-br.md)

This repository is dedicated to the study of SOLID principles, Design Patterns, unit tests, integration tests, and GitHub Actions.

The structure of this repository includes the development of an API inspired by the GymPass style.

# GymPass API

## How to Execute

1. Clone this repository to your local machine using the following command:
```bash
$ git clone https://github.com/MatheusSanchez/gym-check-in-api
```

2. Navigate to the project directory and install the required dependencies by running:
```bash
$ npm install
```
3. Create a .env file in the project directory to set the required environment variables. Refer to the provided .env.example file for the necessary variables and their values. [.env.example](./.env.example/)

4. Use Docker Compose to set up the database container. Run the following command in the terminal:
```bash
$ docker compose up -d
```

5. Run Prisma migrations to create the database tables:
```bash
$ npx prisma migrate dev
```

6. Launch the API by running the following command:
```bash
$ npm run dev
```
Check the terminal for the message: 🔥🔥🔥 HTTP Server Running 🔥🔥🔥


# How to Test

Executing Unit tests is pretty simple; just run the following command:
```bash
$ npm run test
```

## E2E tests
There are two scripts in the [package.json](./package.json/) file to set up the E2E tests, as the tests shouldn't add data to the real database.

You can execute the E2E tests using the following command:
```bash
$ npm run test:e2e
```

This script will trigger all the setup, and a new database will be generated to run the tests, which will be deleted after the tests are completed.

You can also check the tests through a UI and check the coverage, use the following commands:
```bash
$ npm run test:ui
$ npm run test:coverage
```

## Functional Requirements (RFs)

- [x] User registration should be possible;
- [x] User authentication should be possible;
- [x] Retrieving the profile of a logged-in user should be possible;
- [x] Retrieving the number of check-ins performed by the logged-in user should be possible;
- [x] The user should be able to retrieve their check-in history;
- [x] The user should be able to search for nearby gyms (up to 10km);
- [x] The user should be able to search for gyms by name;
- [x] The user should be able to check-in at a gym;
- [x] Validating a user's check-in should be possible;
- [x] Registering a gym should be possible;

## Business Rules (RNs)

- [x] Users should not be able to register with a duplicated email;
- [x] A user cannot make 2 check-ins on the same day;
- [x] A user cannot check in if not within 100 meters of the gym;
- [x] Check-in validation can only occur up to 20 minutes after its creation;
- [x] Check-in validation can only be performed by administrators;
- [x] Gym registration can only be done by administrators;

## Non-Functional Requirements (RNFs)

- [x] User passwords need to be encrypted;
- [x] Application data must be persisted in a PostgreSQL database;
- [x] All data lists need to be paginated with 20 items per page;
- [x] User identification should be done through a JWT (JSON Web Token);
93 changes: 93 additions & 0 deletions README.pt-br.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# SOLID STUDY

[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/MatheusSanchez/gym-check-in-api/blob/main/README.md)
[![pt-br](https://img.shields.io/badge/lang-pt--br-green.svg)](https://github.com/MatheusSanchez/gym-check-in-api/blob/main/README.pt-br.md)

Este repositório destina-se ao estudo dos princípios SOLID, Design Patterns, testes unitários, testes de integração, e também GitHub Actions.

A estrutura deste repositório inclui o desenvolvimento de uma API inspirada no estilo do GymPass.

# GymPass API

## Como executar

1. Clone este repositório em sua máquina local usando o seguinte comando:
```bash
$ git clone https://github.com/MatheusSanchez/gym-check-in-api
```
2. Navegue até o diretório do projeto e instale as dependências necessárias executando:
```bash
$ npm install
```
3. Crie um arquivo .env no diretório do projeto para definir as variáveis de ambiente necessárias. Consulte o arquivo .env.example fornecido para obter as variáveis necessárias e seus valores. [.env.example](./.env.example/)

4. Use o Docker Compose para configurar o contêiner do banco de dados. Execute o seguinte comando no terminal:
```bash
$ docker compose up -d
```

5. Execute as migrações do Prisma para criar as tabelas do banco de dados:
```bash
$ npx prisma migrate dev
```

6. Inicie a API executando o seguinte comando:
```bash
$ npm run dev
```

Verifique o terminal para a mensagem: 🔥🔥🔥 HTTP Server Running 🔥🔥🔥

# Como testar
Executar testes unitários é bastante simples; basta executar o seguinte comando:
```bash
$ npm run test
```

## Testes E2E

Existem dois scripts no arquivo [package.json](./package.json/) para configurar os testes E2E, já que os testes não devem adicionar dados ao banco de dados real.

Você pode executar os testes E2E usando o seguinte comando:

```bash
$ npm run test:e2e
```

Este script acionará toda a configuração e um novo banco de dados será gerado para executar os testes, sendo excluído após a conclusão dos testes.

Você também pode verificar os testes por meio de uma interface gráfica (UI) e conferir a cobertura usando os seguintes comandos:

```bash
$ npm run test:ui
$ npm run test:coverage
```

## 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);
2 changes: 1 addition & 1 deletion src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ app
port: env.PORT,
})
.then(() => {
console.log('🔥🔥🔥 HTTP Server Running!')
console.log('🔥🔥🔥 HTTP Server Running 🔥🔥🔥')
})

0 comments on commit 95bae14

Please sign in to comment.