- Cadastro de estilos de cerveja
- Busca de estilo por temperatura
- Na buscar por estilo traz uma playlist do spotify relacionada
Esta AplicaĆ§Ć£o foi desenvolvida usando as seguintes tecnologias:
- Node.JS
- Typescript
- Express
- TypeOrm
- Postgres
- Jest
- Docker
- Joi
- Axios
HĆ” uma versĆ£o da aplicaĆ§Ć£o rodando nos servidores da Azure no endereƧo: https://rodrigo-duff.azurewebsites.net
DocumentaĆ§Ć£o Postman: https://documenter.getpostman.com/view/16662719/2s8YzZQzHS
AplicaĆ§Ć£o criada utilizando como base um serviƧo de cadastro de estilos de cerveja, e sistema de indicaĆ§Ć£o de melhores estilos e um playlist relacionada do Spotify, dada uma temperatura.
Foi escolhido Node.js para desenvolvimento, utilizando Typescript, framework Express e TypeOrm para conexĆ£o com banco de dados Postgres.
Para o desenvolvimento utilizei docker para subir o banco de dados, assim como para rodar os testes de integraĆ§Ć£o.
AplicaĆ§Ć£o desenvolvida utilizando prĆ”ticas de Clean Code e Clean Architeture, a aplicaĆ§Ć£o possui testes de unidade e integraĆ§Ć£o, possui 100% de cobertura na grande maioria dos testes, em alguns ainda nĆ£o possui 100% mas estĆ£o acima de 80%.
Buscar Todos os Estilos de Cerveja
- Metodo: get
- Url: https://rodrigo-duff.azurewebsites.net/api/beer
Buscar Um Estilo de Cerveja
- Metodo: get
- Url: https://rodrigo-duff.azurewebsites.net/api/beer/{id_estilo}
Deletar Um Estilo de Cerveja
- Metodo: delete
- Url: https://rodrigo-duff.azurewebsites.net/api/beer/{id_estilo}
Adicionar Um Estilo de Cerveja
- Metodo: post
- Url: https://rodrigo-duff.azurewebsites.net/api/beer
- Body:
{
name: string,
minTemperature: string,
maxTemperature: string
}
Atualizar Um Estilo de Cerveja
- Metodo: patch
- Url: https://rodrigo-duff.azurewebsites.net/api/beer/{id_estilo}
- Body:
{
name: string,
minTemperature: string,
maxTemperature: string
}
Buscar Um Estilo de Cerveja e Uma Playlist de Acordo Com Temperatura Fornecida
- Metodo: get
- Url: https://rodrigo-duff.azurewebsites.net/api/playlist?temperature
- query:
key | value |
---|---|
temperature | number |
Para instalaĆ§Ć£o:
- Instalar as depĆŖndiencias com o comando
npm install
. - Criar um arquivo .env na raiz do projeto conforme o exemplo que estĆ” em .env.example.
- Setar as variƔveis de ambiente:
DB_HOST
- endereƧo do banco de dadosDB_PORT
- porta do banco de dados (5432 padrĆ£o postgres)DB_USERNAME
- usuƔrio do banco de dadosDB_PASSWORD
- senha de acesso do banco de dadosDB_NAME
- nome do banco de dadosDB_TEST_NAME
- nome do banco de dados para testeAPP_PORT
- porta em qual a aplicaĆ§Ć£o irĆ” rodarSPOTIFY_USER
- usuario do SpotifyApiSPOTIFY_SECRET
- senha do SpotifyApi
- Recomendo usar docker para subir a aplicaĆ§Ć£o fazendo os seguintes procedimentos:
- setar as variaveis da seguinte maneira:
-
DB_HOST=localhost
-
DB_PORT=5432
-
DB_USERNAME=postgres
-
DB_PASSWORD=postgres
-
DB_NAME=duff
-
DB_TEST_NAME=duff-test
-
- Efetuar o comando
npm run pg:up
: vai subir um contĆ¢iner com uma imagem postgres, utilizando os parĆ¢metros contidos em docker-compose.postgres.yml - Efetura o comando
npm run dev
- setar as variaveis da seguinte maneira:
- Ć possivel subir a aplicaĆ§Ć£o sem subir o banco utilizando docker, apenas basta configurar as vĆ”riaveis de ambiente corretamente
Utilizando o banco de desenvolvimento pg:up
, ele jĆ” rodas as migrations e popula o banco.
Utilizei o AppServices da Azure para hospedar um contĆ¢iner docker da imagem da aplicaĆ§Ć£o.
Utilizei os seguintes serviƧos da Azure:
- AppService - para hospedagem da aplicaĆ§Ć£o
- Azure Database for PostgresSql - para subir um banco de dados
- Container Registry - para armazenar uma imagem docker da aplicaĆ§Ć£o
Para deploy realizei os seguintes passos:
- Rodei o comando
npm run build
para gerar a build da aplicaĆ§Ć£o. - Rodei o comando
npm run docker:build
para gerar uma imagem da aplicaĆ§Ć£o, passando o parĆ¢metro--tag=
com a tag da imagem - Realizei o comando docker login duffs.azurecr.io para logar no serviƧo Container Registry
- Realizei o comando
docker push duffs.azurecr.io/duff:<tag>
para enviar a imagem para o container Registry. - A partir desse momento irĆ” disparar um webhook onde o App Service vai baixar a imagem e subir novamente um container a partir dela.
As vĆ”riaveis de ambiente jĆ” estĆ£o setadas no AppService.
- start - Roda a aplicaĆ§Ć£o em Javascript (apenas para produĆ§Ć£o).
- build - Realiza a build da aplicaĆ§Ć£o e cria uma pasta dist para os arquivos.
- dev - Realiza a build e roda a aplicaĆ§Ć£o.
- lint - Formata a aplicaĆ§Ć£o de acordo com o Prettier e Eslint
- test - Roda todos os testes unitƔrios.
- test:staged - Roda os testes que sofrerĆ£o modificaĆ§Ć£o (utilizado pelo lintsatged)
- test:watch - Roda os testes com --watch ativado
- test:integ - Roda todos os testes de integraĆ§Ć£o
- test:cover - Roda todos os testes unitĆ”rios e de integraĆ§Ć£o e gera coverage sobre eles
- migration:create - Cria uma migration vazia em
.src/infra/database/migrations
. Necessario parametro --nameMigration= - migration:generate - Gera uma migration de acordo com modificaƧƵes efetuadas nas entidades. Necessario parametro --nameMigration=
- migration:up - Roda as migrations.
- migration:down - Reverte a Ćŗltima migration.
- docker:build - Cria uma imagem docker da aplicaĆ§Ć£o, conforme o arquivo dockerfile. NecessĆ”rio parĆ¢metro --tag=
- pg:up - Sobe um contĆ¢iner com banco Postgres, faz a migration para popular o banco
- pg:down - Finaliza o contĆ¢iner com banco Postgres _ pgtest:up - Sobe um contĆ¢iner com banco Postgres para teste, utilizado pelos testes de integraĆ§Ć£o, nĆ£o popula o banco _ pgtest:down - Finaliza contĆ¢iner com banco Postgres para teste, utilizado pelos testes de integraĆ§Ć£o
Utilize o npm run
antes dos scripts.