/duff

Aplicacao para indicacao de melhor estilo de cerveja e playlist para acompanhamento, de acordo com temperatura desejada

Primary LanguageTypeScript

Duff šŸŗ

AplicaĆ§Ć£o para indicaĆ§Ć£o de estilos de cerveja


Tabela de conteĆŗdos

Features

  • Cadastro de estilos de cerveja
  • Busca de estilo por temperatura
  • Na buscar por estilo traz uma playlist do spotify relacionada

Tecnologias

Esta AplicaĆ§Ć£o foi desenvolvida usando as seguintes tecnologias:

  • Node.JS
  • Typescript
  • Express
  • TypeOrm
  • Postgres
  • Jest
  • Docker
  • Joi
  • Axios

ApresentaĆ§Ć£o

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

Resumo

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%.

Rotas:

Buscar Todos os Estilos de Cerveja

Buscar Um Estilo de Cerveja

Deletar Um Estilo de Cerveja

Adicionar Um Estilo de Cerveja

{
   name: string,
   minTemperature: string,
   maxTemperature: string
}

Atualizar Um Estilo de Cerveja

{
   name: string,
   minTemperature: string,
   maxTemperature: string
}

Buscar Um Estilo de Cerveja e Uma Playlist de Acordo Com Temperatura Fornecida

key value
temperature number

InstalaĆ§Ć£o

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 dados
    • DB_PORT - porta do banco de dados (5432 padrĆ£o postgres)
    • DB_USERNAME - usuĆ”rio do banco de dados
    • DB_PASSWORD - senha de acesso do banco de dados
    • DB_NAME - nome do banco de dados
    • DB_TEST_NAME - nome do banco de dados para teste
    • APP_PORT - porta em qual a aplicaĆ§Ć£o irĆ” rodar
    • SPOTIFY_USER - usuario do SpotifyApi
    • SPOTIFY_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
  • Ɖ possivel subir a aplicaĆ§Ć£o sem subir o banco utilizando docker, apenas basta configurar as vĆ”riaveis de ambiente corretamente

ObservaĆ§Ć£o:

Utilizando o banco de desenvolvimento pg:up, ele jĆ” rodas as migrations e popula o banco.

Deploy

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.

ObservaĆ§Ć£o:

As vĆ”riaveis de ambiente jĆ” estĆ£o setadas no AppService.

Scripts:

  • 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

ObservaĆ§Ć£o:

Utilize o npm run antes dos scripts.