{"id":18679481,"url":"https://github.com/jfollmann/mpn-chat-api-sample","last_synced_at":"2025-10-12T08:07:00.576Z","repository":{"id":43981386,"uuid":"238365424","full_name":"jfollmann/mpn-chat-api-sample","owner":"jfollmann","description":"Projeto didático com o objetivo de disseminar conhecimento.","archived":false,"fork":false,"pushed_at":"2023-02-11T10:26:04.000Z","size":777,"stargazers_count":3,"open_issues_count":10,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-12T08:07:00.244Z","etag":null,"topics":["docker","docker-compose","express","express-validator","gts","mongoose","nodejs","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/jfollmann.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-05T04:10:35.000Z","updated_at":"2022-04-01T13:06:56.000Z","dependencies_parsed_at":"2023-02-18T03:35:14.405Z","dependency_job_id":null,"html_url":"https://github.com/jfollmann/mpn-chat-api-sample","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jfollmann/mpn-chat-api-sample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfollmann%2Fmpn-chat-api-sample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfollmann%2Fmpn-chat-api-sample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfollmann%2Fmpn-chat-api-sample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfollmann%2Fmpn-chat-api-sample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfollmann","download_url":"https://codeload.github.com/jfollmann/mpn-chat-api-sample/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfollmann%2Fmpn-chat-api-sample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279010800,"owners_count":26084807,"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","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["docker","docker-compose","express","express-validator","gts","mongoose","nodejs","typescript"],"created_at":"2024-11-07T09:44:47.556Z","updated_at":"2025-10-12T08:07:00.532Z","avatar_url":"https://github.com/jfollmann.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MPN Chat API\n\nEste aplicativo consiste em disponibilizar apis para ilustrar um projeto de exemplo utilizando express e mongoose.\nPara a versão 1 não foi abordado webSockets (socket.io), com o objetivo de simplificar o projeto para fins didáticos.\n\n![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/jfollmann/mpn-chat-api-sample/CI/master)\n[![Coverage Status](https://coveralls.io/repos/github/jfollmann/mpn-chat-api-sample/badge.svg?branch=master\u0026s=g)](https://coveralls.io/github/jfollmann/mpn-chat-api-sample?branch=master)\n![CI](https://github.com/jfollmann/mpn-chat-api-sample/workflows/CI/badge.svg?branch=master)\n\n[![Run in Insomnia}](https://insomnia.rest/images/run.svg)](https://insomnia.rest/run/?label=MPN%20Chat%20API%20Sample\u0026uri=https%3A%2F%2Fraw.githubusercontent.com%2Fjfollmann%2Fmpn-chat-api-sample%2Fmaster%2FInsomniaWorkspace.json)\n## Estrutura do projeto\n\n```\n~/mpn-chat-api\n├── k8s                                   // Diretório com a stack do K8s\n│   ├── deployment.yaml                   // K8s: Definição do deployment\n│   ├── hpa.yaml                          // K8s: Definição do HPA\n│   ├── pod.yaml                          // K8s: Definição de POD (descontinuado)\n│   ├── secrets.yaml                      // K8s: Definição das Secrets\n│   ├── service.yaml                      // K8s: Definição dos Services\n│   └── test_stress.sh                    // Script SH de test de stress\n├── src                                   // Diretório dos fontes do projeto\n│   ├── application                       // Diretório principal da aplicação\n│   │   └── App.ts                        // Definição da classe \"Application\"\n│   ├── controllers                       // Diretório dos controllers do Projeto\n│   │   ├── base                          // Diretório dos controllers Base do Projeto\n│   │   │   └── BaseController.ts         // Controller Base do Projeto\n│   │   ├── HelloController.ts            // Hello Controller\n│   │   ├── MessageController.ts          // Message Controller\n│   │   └── UserController.ts             // User Controller\n│   ├── helpers                           // Diretório dos Helpers do projeto\n│   │   └── Constants.ts                  // Arquivo de definição de constantes\n│   ├── middlewares                       // Diretório de Middlewares\n│   │   ├── LoggerMiddleware.ts           // Logger Middleware\n│   │   └── validators                    // Diretório de middlewares de validação\n│   │       ├── MessageValidator.ts       // Middleware de validação das messagens\n│   │       └── UserValidator.ts          // Middleware de validação de usuário\n│   ├── models                            // Diretório dos Modelos do Projeto (mongo)\n│   │   ├── Database.ts                   // Definição da Classe de Conexão com o banco\n│   │   ├── Message.ts                    // Definição do Modelo de Mensagem\n│   │   └── User.ts                       // Definição do Modelo de Usuário\n│   ├── routes                            // Diretório das Rotas do Projeto\n│   │   ├── HelloRoutes.ts                // Hello Routes\n│   │   ├── MessageRoutes.ts              // Message Routes\n│   │   └── UserRoutes.ts                 // User Routes\n│   └── Server.ts                         // Arquivo principal do projeto\n├── test                                  // Diretório dos testes unitários do Projeto\n│   ├── application                       // Diretório dos testes principais da aplicação\n│   │   └── App.test.ts                   // Testes da classe App\n│   ├── controllers                       // Diretório de testes dos Controllers\n│   │   ├── base                          // Controller Base do Projeto\n│   │   │   └── BaseController.test.ts    // Testes do Base Controller\n│   │   ├── HelloController.test.ts       // Testes do Hello Controller\n│   │   ├── MessageController.test.ts     // Testes do Message Controller\n│   │   └── UserController.test.ts        // Testes do User Controller\n│   ├── middlewares                       // Diretório dos Testes dos middlewares\n│   │   ├── LoggerMiddleware.test.ts      // Testes do Logger Middleware\n│   │   └── validators                    // Diretório dos Testes dos Validators\n│   │       ├── MessageValidator.test.ts  // Testes do Message Validator\n│   │       └── UserValidator.test.ts     // Testes do User Validator\n│   ├── _mocks                            // Diretório dos Mocks dos Testes\n│   │   └── HelperMocks.ts                // Definição do Helper de Mock dos Testes\n│   ├── models                            // Diretório dos Testes dos Modelos\n│   │   └── Database.test.ts              // Testes do Database\n│   ├── routes                            // Diretório dos Testes das Rotas do Projeto\n│   │   ├── HelloRoutes.test.ts           // Testes Hello Routes\n│   │   ├── MessageRoutes.test.ts         // Testes Message Routes\n│   │   └── UserRoutes.test.ts            // Testes User Routes\n│   └── Server.test.ts                    // Testes do Server\n├── docker-compose.yml                    // Arquivo de definição da stack do compose\n├── Dockerfile                            // DockerFile\n├── InsomniaWorkspace.json                // Arquivo Collection Insomnia Workspace (Sample Request's)\n├── nodemon.json                          // Recarregar automáticamente fontes alterados\n├── package.json                          // Configurações e dependências do projeto\n├── package-lock.json                     // Versões instaladas de cada depedência do projeto\n├── README.md                             // Leia-me (este arquivo)\n├── tsconfig.json                         // Configurações TypeScript (GTS based)\n├── jasmine.json                          // Configurações dos testes (Jasmine)\n└── tslint.json                           // Configurações do TSLint\n```\n\n## Dependências do Projeto\n\n  * **cors**: Habilita acesso a diferentes origens\n  * **dotenv**: Loads env files\n  * **express**: Web Framework\n  * **http-status-codes**: Constantes com Códigos de Status HTTP\n  * **mongoose**: Mapeamento objeto-relacional (mongo)\n\n## Dependências de Desenvolvimento\n\n  * **@types/cors**: Definições de tipo para cors\n  * **@types/express**: Definições de tipo para express\n  * **@types/mongoose**: Definições de tipo para mongoose\n  * **@types/node**: Definições de tipo para node\n  * **gts**: Estilo typescript do google\n  * **nodemon**: Automação em recarregar fontes alterados\n  * **ts-node**: Executa typescript diretamente\n  * **typescript**: Linguagem que adiciona recursos ao Javascript\n\n## Rodando a aplicação (docker-compose)\n\nPara rodar a aplicação, basta executar o seguinte comando:\n\n```bash\n$ docker-compose up --build -d\n```\n\nEste comando irá:\n  * criar uma imagem docker a partir do Dockerfile\n  * criar um container chamado \"mpn-chat-api\"\n  * mapear a porta 3333 do host para a mesma porta no container\n\nVocê poderá acessar a aplicação a partir do endereço [http://localhost:3333](http://localhost:3333)\n\n## Rodando a aplicação (docker)\n\nCriar a imagem docker a partir do seguinte comando:\n\n```bash\n$ docker build -t mpn-chat-api .\n```\n\nUma imagem docker será criada com o nome \"mpn-chat-api\".\n\nPara executar a imagem:\n\n```bash\n$ docker run --name mpn-chat-api -p 3333:3333 mpn-chat-api -d\n```\n\nVocê poderá acessar a aplicação a partir do endereço [http://localhost:3333](http://localhost:3333)\n\n## Rodando a aplicação (desenvolvimento)\n\nPara rodar a aplicação em desenvolvimento, primeiro precisamos instalar as dependências:\n\n```bash\n$ npm i\n```\n\nEm seguida, executar:\n\n```bash\n$ npm run start:dev\n```\n\n## Executando os testes\n\n```bash\n$ npm run test\n```\nou\n```bash\n$ npm run test:coverage\n```\n\nVocê poderá acessar a aplicação a partir do endereço [http://localhost:3333](http://localhost:3333)\n\nAinda com dúvidas em relação ao comandos do docker? [Tente consultar este material](https://gist.github.com/jfollmann/f409defd29e2de689963a2edae5172e8)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfollmann%2Fmpn-chat-api-sample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfollmann%2Fmpn-chat-api-sample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfollmann%2Fmpn-chat-api-sample/lists"}