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

https://github.com/icaroov/wa-project-challenge

Projeto construído com React + API GraphQL com NestJS, TypeScript, e PostgreSQL, tudo servido através do Docker Compose com dois ambientes.
https://github.com/icaroov/wa-project-challenge

apollo docker docker-compose graphql nestjs nodejs postgresql react typeorm typescript

Last synced: 3 months ago
JSON representation

Projeto construído com React + API GraphQL com NestJS, TypeScript, e PostgreSQL, tudo servido através do Docker Compose com dois ambientes.

Awesome Lists containing this project

README

          

# Desafio Tech

API construída com NestJS 8, React + TypeScript e PostgreSQL + PostgresAdmin.

Todas as aplicações são servidas em containers utilizando Docker. ✨

## Proposta

- Desenvolver um serviço com API GraphQL e uma base de dados de alunos
contendo: nome, CPF e e-mail. A API deve listar os alunos, filtrando por quaisquer dos campos, retornando todos, caso nenhum seja informado.
- Desenvolver uma UI em React que permita realizar consultas a esse serviço, consumindo e exibindo os dados retornados por ele.

## Executando a aplicação

```shell
# Clonar esse repositório
git clone https://github.com/icaroov/wa-project-challenge.git

# Entrar no projeto
cd wa-project-challenge
```

Com Docker instalado, existem duas opções: a `production` e a `development`.

Em `production` o Frontend está sendo distribuído de forma estática em um servidor Http [NGINX](https://www.nginx.com/) através do Dockerfile.

Para executar o modo `production` basta executar:

```
docker-compose -f docker-compose.prod.yml up
```

O modo `development` permite a sincronização do código local com o código que está no container através dos `volumes`, e é necessário instalar as dependências antes de executar o `docker-compose`.

```
# Instale as dependências
yarn install

# Execute
docker-compose -f docker-compose.dev.yml up
```

### Links

- Client Development: http://localhost:3000
- Client Production: http://localhost:8081
- API: http://localhost:5000/graphql
- PostgresAdmin: http://localhost:5050

### Exemplo de Queries e Mutations

- Listar todos os alunos

```
query {
getAllStudents {
id
name
email
cpf
}
}
```

- Registrar um aluno

```
mutation {
createStudent(
student: {
name: "Jhon Doe"
cpf: 123456789
email: "jhon@gmail.com"
}
) {
id
name
cpf
email
}
}
```

- Selecionar aluno por e-mail

```
query {
getStudentByEmail(email: "jhon@gmail.com") {
id
name
cpf
}
}
```

Todo o Schema pode ser encontrado dentro de `/backend/src/schema.graphql`.

## Tecnologias utilizadas

- [NestJS](https://nestjs.com/)
- [Apollo Server](https://www.apollographql.com/docs/apollo-server/)
- [Apollo Client](https://www.apollographql.com/docs/react/)
- [GraphQL](https://graphql.org/)
- [TypeORM](https://typeorm.io/#/)
- [Docker](https://www.docker.com/)
- [React](https://pt-br.reactjs.org/)
- [TypeScript](https://www.typescriptlang.org/)
- [NGINX](https://www.nginx.com/)

### Dicas

Comandos Docker caso necessário:
- Deletar todos os containers:
```
docker rm -f $(docker ps -a -q)
```
- Deletar todos os volumes:

```
docker volume rm $(docker volume ls -q)
```