Este aplicativo consiste em disponibilizar apis para ilustrar um projeto de exemplo utilizando express e mongoose. Para a versão 1 não foi abordado webSockets (socket.io), com o objetivo de simplificar o projeto para fins didáticos.
~/mpn-chat-api
├── k8s // Diretório com a stack do K8s
│ ├── deployment.yaml // K8s: Definição do deployment
│ ├── hpa.yaml // K8s: Definição do HPA
│ ├── pod.yaml // K8s: Definição de POD (descontinuado)
│ ├── secrets.yaml // K8s: Definição das Secrets
│ ├── service.yaml // K8s: Definição dos Services
│ └── test_stress.sh // Script SH de test de stress
├── src // Diretório dos fontes do projeto
│ ├── application // Diretório principal da aplicação
│ │ └── App.ts // Definição da classe "Application"
│ ├── controllers // Diretório dos controllers do Projeto
│ │ ├── base // Diretório dos controllers Base do Projeto
│ │ │ └── BaseController.ts // Controller Base do Projeto
│ │ ├── HelloController.ts // Hello Controller
│ │ ├── MessageController.ts // Message Controller
│ │ └── UserController.ts // User Controller
│ ├── helpers // Diretório dos Helpers do projeto
│ │ └── Constants.ts // Arquivo de definição de constantes
│ ├── middlewares // Diretório de Middlewares
│ │ ├── LoggerMiddleware.ts // Logger Middleware
│ │ └── validators // Diretório de middlewares de validação
│ │ ├── MessageValidator.ts // Middleware de validação das messagens
│ │ └── UserValidator.ts // Middleware de validação de usuário
│ ├── models // Diretório dos Modelos do Projeto (mongo)
│ │ ├── Database.ts // Definição da Classe de Conexão com o banco
│ │ ├── Message.ts // Definição do Modelo de Mensagem
│ │ └── User.ts // Definição do Modelo de Usuário
│ ├── routes // Diretório das Rotas do Projeto
│ │ ├── HelloRoutes.ts // Hello Routes
│ │ ├── MessageRoutes.ts // Message Routes
│ │ └── UserRoutes.ts // User Routes
│ └── Server.ts // Arquivo principal do projeto
├── test // Diretório dos testes unitários do Projeto
│ ├── application // Diretório dos testes principais da aplicação
│ │ └── App.test.ts // Testes da classe App
│ ├── controllers // Diretório de testes dos Controllers
│ │ ├── base // Controller Base do Projeto
│ │ │ └── BaseController.test.ts // Testes do Base Controller
│ │ ├── HelloController.test.ts // Testes do Hello Controller
│ │ ├── MessageController.test.ts // Testes do Message Controller
│ │ └── UserController.test.ts // Testes do User Controller
│ ├── middlewares // Diretório dos Testes dos middlewares
│ │ ├── LoggerMiddleware.test.ts // Testes do Logger Middleware
│ │ └── validators // Diretório dos Testes dos Validators
│ │ ├── MessageValidator.test.ts // Testes do Message Validator
│ │ └── UserValidator.test.ts // Testes do User Validator
│ ├── _mocks // Diretório dos Mocks dos Testes
│ │ └── HelperMocks.ts // Definição do Helper de Mock dos Testes
│ ├── models // Diretório dos Testes dos Modelos
│ │ └── Database.test.ts // Testes do Database
│ ├── routes // Diretório dos Testes das Rotas do Projeto
│ │ ├── HelloRoutes.test.ts // Testes Hello Routes
│ │ ├── MessageRoutes.test.ts // Testes Message Routes
│ │ └── UserRoutes.test.ts // Testes User Routes
│ └── Server.test.ts // Testes do Server
├── docker-compose.yml // Arquivo de definição da stack do compose
├── Dockerfile // DockerFile
├── InsomniaWorkspace.json // Arquivo Collection Insomnia Workspace (Sample Request's)
├── nodemon.json // Recarregar automáticamente fontes alterados
├── package.json // Configurações e dependências do projeto
├── package-lock.json // Versões instaladas de cada depedência do projeto
├── README.md // Leia-me (este arquivo)
├── tsconfig.json // Configurações TypeScript (GTS based)
├── jasmine.json // Configurações dos testes (Jasmine)
└── tslint.json // Configurações do TSLint
- cors: Habilita acesso a diferentes origens
- dotenv: Loads env files
- express: Web Framework
- http-status-codes: Constantes com Códigos de Status HTTP
- mongoose: Mapeamento objeto-relacional (mongo)
- @types/cors: Definições de tipo para cors
- @types/express: Definições de tipo para express
- @types/mongoose: Definições de tipo para mongoose
- @types/node: Definições de tipo para node
- gts: Estilo typescript do google
- nodemon: Automação em recarregar fontes alterados
- ts-node: Executa typescript diretamente
- typescript: Linguagem que adiciona recursos ao Javascript
Para rodar a aplicação, basta executar o seguinte comando:
$ docker-compose up --build -d
Este comando irá:
- criar uma imagem docker a partir do Dockerfile
- criar um container chamado "mpn-chat-api"
- mapear a porta 3333 do host para a mesma porta no container
Você poderá acessar a aplicação a partir do endereço http://localhost:3333
Criar a imagem docker a partir do seguinte comando:
$ docker build -t mpn-chat-api .
Uma imagem docker será criada com o nome "mpn-chat-api".
Para executar a imagem:
$ docker run --name mpn-chat-api -p 3333:3333 mpn-chat-api -d
Você poderá acessar a aplicação a partir do endereço http://localhost:3333
Para rodar a aplicação em desenvolvimento, primeiro precisamos instalar as dependências:
$ npm i
Em seguida, executar:
$ npm run start:dev
$ npm run test
ou
$ npm run test:coverage
Você poderá acessar a aplicação a partir do endereço http://localhost:3333
Ainda com dúvidas em relação ao comandos do docker? Tente consultar este material