{"id":15760173,"url":"https://github.com/padupe/example-api","last_synced_at":"2025-07-01T10:35:28.753Z","repository":{"id":46746447,"uuid":"515629169","full_name":"padupe/example-api","owner":"padupe","description":"Repositório para estudos de requisitos para o desenvolvimento de uma API, utilizando Prisma ORM, Docker e o padrão de arquitetura MVC. ","archived":false,"fork":false,"pushed_at":"2022-07-19T14:56:40.000Z","size":195,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T09:15:07.084Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/padupe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-19T14:55:33.000Z","updated_at":"2022-11-14T11:58:13.000Z","dependencies_parsed_at":"2022-09-23T02:02:52.670Z","dependency_job_id":null,"html_url":"https://github.com/padupe/example-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/padupe/example-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fexample-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fexample-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fexample-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fexample-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/padupe","download_url":"https://codeload.github.com/padupe/example-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padupe%2Fexample-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262944717,"owners_count":23388814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-04T10:41:33.073Z","updated_at":"2025-07-01T10:35:28.725Z","avatar_url":"https://github.com/padupe.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Example API\n![img](./assets/example-api.png)\n\n## Índice\n- [Objetivo](#objetivo)\n- [Requisitos](#requisitos)\n- [Estrutura do Projeto](#estrutura-do-projeto)\n- [Ferramentas Utilizadas](#ferramentas-utilizadas)\n- [Proposta](#proposta)\n    - [Parte I](#parte-i)\n    - [Parte II](#parte-ii)\n    - [Parte III](#parte-iii)\n- [Usando a Aplicação](#usando-a-aplicação)\n- [Comandos Úteis](#comandos-úteis)\n    - [Banco de Dados](#banco-de-dados)\n    - [Docker](#docker)\n    - [Prisma Studio](#prisma-studio)\n\n## Objetivo\nProporcionar um ambiente simples, porém, objetivo para estudos quanto a conceitos básicos para o desenvolvimento de _software_:\n- Regras de Negócio [**RN**];\n- Requisitos do Usuário [**RU**];\n- Requisitos de Sistema [**RS**];\n- Requisitos Funcionais [**RF**];\n- Requisitos Não Funcionais [**RNF**].\n\n## Requisitos\n- [Docker](https://www.docker.com/)\n- [Node.js](https://nodejs.org/pt-br/) \u003e= 16.15.1\n- [nvm](https://github.com/nvm-sh/nvm)\n\n## Estrutura do Projeto\n\u003cdiv align=\"center\"\u003e\n    \u003cimg align=\"center\" src=\"./assets/estrutura-projeto.png\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n⚠️\u003cstrong\u003eATENÇÃO\u003c/strong\u003e⚠️\u003cbr\u003e\n\u003ci\u003eNão é recomendado subir os arquivos \u003ccode\u003e.env\u003c/code\u003e, neste caso trata-se apenas de um exercício.\u003c/i\u003e\n\u003c/div\u003e\n\n## Ferramentas Utilizadas\n- **Container:** Docker;\u003cbr\u003e\n- **Database:** [PostgreSQL](https://www.postgresql.org/);\u003cbr\u003e\n- **ORM:** [Prisma](https://www.prisma.io/).\u003cbr\u003e\n\n## Proposta\nCenário fictício para análise:\u003cbr\u003e\n\n### Parte I\n\u003cdetails\u003e\u003csummary\u003eClique para expandir\u003c/summary\u003e\nCom base nos pontos descritos, informe qual é o termo que se enquadra (RN, RU, RS, RF, RNF)\n\n1. Usuário deve ser capaz de cadastrar uma Squad e um Usuário\u003cbr\u003e\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n2. O sistema deve listar todas as Squads e Usuários Cadastrados\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n3. O banco de dados deve ser relacional\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n4. Enquanto usuário quero poder consultar os membros de uma Squad pelo nome da mesma\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n5. Não podem existir duas Squads com o mesmo nome\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n6. O cadastro do usuário recebe o `id` da Squad que estiver vinculado\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n7. Para atualizar o cadastro da Squad devo informar o nome da mesma\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n8. Quero ter autonomia para atualizar o cadastro de uma Squad\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n9. O banco de dados utilizados deve ser o PostgreSQL\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n10. Só posso alterar o cadastro de uma Squad se não houverem membros vinculados a ela\n- [ ] RN\n- [ ] RU\n- [ ] RS\n- [ ] RF\n- [ ] RNF\n\n\u003c/details\u003e\n\n### Parte II\nAgora que já possui uma base dos requisitos da aplicação, devemos realizar a modelagem do Banco de Dados.\n\n1. 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.\n\n2. Considere diagramar o **MER** (Modelo Entidade Relacionamento) para enriquecer seu Projeto.\n\n### Parte III\nO 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.\u003cbr\u003e\nEm resumo trata-se de:\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg align=\"center\" src=\"./assets/MVC.png\"\u003e\n\u003c/div\u003e\n\n- **_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.\n\n- **_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.\u003cbr\u003e\n**IMPORTANTE:** Neste cenário de estudos não iremos nos aprofundar nesta camada, visto que o foco é exclusivamente o Back-end.\n\n- **_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. \n\n## Usando a Aplicação\n1. Instale as dependêcias\n```\nyarn install\n```\n\n2. Suba o container do Banco de Dados\n```\ndocker-compose -f docker/docker-compose.yaml --env-file docker/.env up -d\n```\n\n3. Rode o comando para instanciar o Prisma\n```\nyarn prisma generate\n```\n\n4. Rode o comando para gerar as migrations:\n```\nyarn migrate:run\n```\n\n5. Popule o Banco de Dados\n```\nyarn seed\n```\n\n6. Inicie a aplicação\n```\nyarn dev\n```\n\n## Comandos Úteis\n\n### Banco de Dados\nComando para resetar a base de dados local\n```\nyarn migrate:reset\n```\n\n### Docker\nComando para subir o container do Banco de Dados\n```\ndocker-compose -f docker/docker-compose.yaml --env-file docker/.env up -d\n```\n\n### Prisma Studio\nComando para renderizar um gerenciador de Banco de Dados em seu [browser](http://localhost:5555)\n```\nyarn studio\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadupe%2Fexample-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpadupe%2Fexample-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadupe%2Fexample-api/lists"}