https://github.com/padupe/example-api
Repositório para estudos de requisitos para o desenvolvimento de uma API, utilizando Prisma ORM, Docker e o padrão de arquitetura MVC.
https://github.com/padupe/example-api
Last synced: 12 months ago
JSON representation
Repositório para estudos de requisitos para o desenvolvimento de uma API, utilizando Prisma ORM, Docker e o padrão de arquitetura MVC.
- Host: GitHub
- URL: https://github.com/padupe/example-api
- Owner: padupe
- Created: 2022-07-19T14:55:33.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-07-19T14:56:40.000Z (almost 4 years ago)
- Last Synced: 2025-03-31T09:15:07.084Z (about 1 year ago)
- Language: JavaScript
- Size: 190 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Example API

## Índice
- [Objetivo](#objetivo)
- [Requisitos](#requisitos)
- [Estrutura do Projeto](#estrutura-do-projeto)
- [Ferramentas Utilizadas](#ferramentas-utilizadas)
- [Proposta](#proposta)
- [Parte I](#parte-i)
- [Parte II](#parte-ii)
- [Parte III](#parte-iii)
- [Usando a Aplicação](#usando-a-aplicação)
- [Comandos Úteis](#comandos-úteis)
- [Banco de Dados](#banco-de-dados)
- [Docker](#docker)
- [Prisma Studio](#prisma-studio)
## Objetivo
Proporcionar um ambiente simples, porém, objetivo para estudos quanto a conceitos básicos para o desenvolvimento de _software_:
- Regras de Negócio [**RN**];
- Requisitos do Usuário [**RU**];
- Requisitos de Sistema [**RS**];
- Requisitos Funcionais [**RF**];
- Requisitos Não Funcionais [**RNF**].
## Requisitos
- [Docker](https://www.docker.com/)
- [Node.js](https://nodejs.org/pt-br/) >= 16.15.1
- [nvm](https://github.com/nvm-sh/nvm)
## Estrutura do Projeto
⚠️ATENÇÃO⚠️
Não é recomendado subir os arquivos .env, neste caso trata-se apenas de um exercício.
## Ferramentas Utilizadas
- **Container:** Docker;
- **Database:** [PostgreSQL](https://www.postgresql.org/);
- **ORM:** [Prisma](https://www.prisma.io/).
## Proposta
Cenário fictício para análise:
### Parte I
Clique para expandir
Com base nos pontos descritos, informe qual é o termo que se enquadra (RN, RU, RS, RF, RNF)
1. Usuário deve ser capaz de cadastrar uma Squad e um Usuário
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
2. O sistema deve listar todas as Squads e Usuários Cadastrados
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
3. O banco de dados deve ser relacional
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
4. Enquanto usuário quero poder consultar os membros de uma Squad pelo nome da mesma
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
5. Não podem existir duas Squads com o mesmo nome
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
6. O cadastro do usuário recebe o `id` da Squad que estiver vinculado
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
7. Para atualizar o cadastro da Squad devo informar o nome da mesma
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
8. Quero ter autonomia para atualizar o cadastro de uma Squad
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
9. O banco de dados utilizados deve ser o PostgreSQL
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
10. Só posso alterar o cadastro de uma Squad se não houverem membros vinculados a ela
- [ ] RN
- [ ] RU
- [ ] RS
- [ ] RF
- [ ] RNF
### Parte II
Agora que já possui uma base dos requisitos da aplicação, devemos realizar a modelagem do Banco de Dados.
1. No diretório [`prisma`](./prisma/), no arquivo [`schema.prisma`](./prisma/schema.prisma) realize a configuração das tabelas, campos e tipos de dados que julgar necessários para atender a proposta.
2. Considere diagramar o **MER** (Modelo Entidade Relacionamento) para enriquecer seu Projeto.
### Parte III
O Projeto já possui uma estrutura base, iremos utilizar o padrão **MVC** (_Model, View_ e _Controller_) neste exercício. Apesar de muitas pessoas considerarem essa sigla como um padrão de design de interface, na verdade ele é um padrão de arquitetura de software responsável por contribuir na otimização da velocidade entre as requisições feitas pelo comando dos usuários.
Em resumo trata-se de:
- **_Model_:** Essa classe também é conhecida como _Business Object Model_ (objeto modelo de negócio). Sua responsabilidade é gerenciar e controlar a forma como os dados se comportam por meio das funções, lógica e regras de negócios estabelecidas.
- **_View_:** Essa camada é responsável por apresentar as informações de forma visual ao usuário. Em seu desenvolvimento devem ser aplicados apenas recursos ligados a aparência como mensagens, botões ou telas.
**IMPORTANTE:** Neste cenário de estudos não iremos nos aprofundar nesta camada, visto que o foco é exclusivamente o Back-end.
- **_Controller_:** A camada de controle é responsável por intermediar as requisições enviadas pelo _View_ com as respostas fornecidas pelo _Model_, processando os dados que o usuário informou e repassando para outras camadas.
## Usando a Aplicação
1. Instale as dependêcias
```
yarn install
```
2. Suba o container do Banco de Dados
```
docker-compose -f docker/docker-compose.yaml --env-file docker/.env up -d
```
3. Rode o comando para instanciar o Prisma
```
yarn prisma generate
```
4. Rode o comando para gerar as migrations:
```
yarn migrate:run
```
5. Popule o Banco de Dados
```
yarn seed
```
6. Inicie a aplicação
```
yarn dev
```
## Comandos Úteis
### Banco de Dados
Comando para resetar a base de dados local
```
yarn migrate:reset
```
### Docker
Comando para subir o container do Banco de Dados
```
docker-compose -f docker/docker-compose.yaml --env-file docker/.env up -d
```
### Prisma Studio
Comando para renderizar um gerenciador de Banco de Dados em seu [browser](http://localhost:5555)
```
yarn studio
```