https://challenge-magrathea-backend.herokuapp.com/
Nodejs
node: v12.18.1
npm: 6.14.5
API para demonstrar Meetups localizados na região de Joinville.
- Instalação
- Criando as tabelas no DB
- Inserindo dados no DB
- Reinicializando o DB
- Inicializando a aplicação
- Estrutura do Projeto
- Dependências do projeto
- Dependências de desenvolvimento
Para instalar as dependências utilize as linhas de comando do npm
:
npm install
Crie o arquivo .env
de acordo com o arquivo .env.example
.
NODE_ENV= Caso não seja informado, por padrão executará em development
PORT= Caso não seja informado, por padrão executará na porta 3000
DATABASE_URL= Deixar em branco ou preencher apenas quando for utilizado em produção
STAGE_DATABASE_URL= Deve ser preenchido apenas se for executar em um banco PostgreSQL
, por padrão usará o Sqlite
Para esse projeto foi utilizado o banco de dados relacional PostgreSQL, para uso em ambientes de Teste e Produção, e SQLite, para uso em ambiente de desenvolvimento. Caso ainda não tenha o PostgreSQL instalado, siga o passo-a-passo aqui
Para criar as tabelas que serão utilizadas no projeto, execute o comando abaixo:
npx knex migrate:latest
Após a criação das tabelas, execute o comando abaixo para inserção dos dados iniciais no banco de dados:
npx knex seed:run
Caso seja preciso desfazer alguma alteração, execute os comandos abaixo respeitando a ordem:
npx knex migrate:rollback
npx knex migrate:latest
npx knex seed:run
Após instalar e preencher o arquivo .env
, execute o comando abaixo para iniciar a aplicação localmente:
npm start
O projeto rodará localmente na porta especificada no arquivo .env
, de acordo com o exemplo http://localhost:PORT/
. Caso nenhuma porta seja especificada a execução ocorrerá na porta padrão 3000
e você poderá acessar pelo endereço http://localhost:3000/.
├── knexfile.js
├── logos
│ ├── license
│ │ └── license.pdf
│ └── svg
│ ├── agile.svg
│ ├── design-thinking.svg
│ ├── devops.svg
│ ├── elixir.svg
│ ├── golang.svg
│ ├── javascript.svg
│ ├── open-source.svg
│ ├── python.svg
│ ├── react.svg
│ └── software-quality.svg
├── package.json
├── Procfile
├── public
│ └── meetups.json
├── README.md
└── src
├── controllers
│ ├── app.js
│ ├── events.js
│ ├── index.js
│ └── meetups.js
├── db
│ ├── connection.js
│ ├── db.sqlite
│ ├── migrations
│ │ ├── 20200812221250_create_countries.js
│ │ ├── 20200812221326_create_states.js
│ │ ├── 20200812221331_create_cities.js
│ │ ├── 20200812221338_create_addresses.js
│ │ ├── 20200812221347_create_meetups.js
│ │ └── 20200812221354_create_events.js
│ └── seeds
│ ├── 01_countries.js
│ ├── 02_states.js
│ ├── 03_cities.js
│ ├── 04_addresses.js
│ ├── 05_meetups.js
│ └── 06_events.js
├── index.js
├── models
│ ├── events.js
│ ├── index.js
│ └── meetups.js
├── routes.js
├── services
│ ├── events.js
│ ├── index.js
│ └── meetups.js
└── utils
├── formatEvent.js
├── format.js
└── formatMeetup.js
O diretório logos
contém as imagens vetorizadas que serão utilizadas pelos Meetups cadastrados.
O diretório public
contém um arquivo estático .json
com as informações dos Meetups para a região de Joinville.
O diretório DB contém os arquivos necessários para a criação das tabelas e inserção dos dados, de acordo com a bibliotecaknex
.
migrations: Arquivos .js
com a estrutura das tabelas.
seeds: Arquivos .js
que realizam a leitura dos dados do arquivo estático localizado em /public
e insere-os nas tabelas criadas.
O diretório de models
contém as queries que serão executadas no banco de dados para filtrar as informações necessárias.
O diretório de services
disponibiliza os dados retornados pela model
em uma formatação padronizada.
O diretório de controllers
é responsável por controlar a comunicação entre as requisições feitas do cliente para com a aplicação.
Todas as requisições recebidas possuem um service
que será responsável por realizar a conexão com o banco de dados e retornar o dado no formato padrão.
O diretório de utils
contém funções genéricas que podem auxiliar em pequenas formatações de dados na aplicação.
O arquivo de routes.js
contém todas as rotas disponíveis na aplicação:
- Os métodos disponíveis são ( GET )
GET /meetups -> Retorna via .json
todos os meetups cadastrados no banco de dados, de acordo com o seguinte formato:
{
"success" : <type: Boolean>,
"message" : <type: String>,
"data" : [
{
"id" : <type: Integer>,
"name" : <type: String>,
"description": <type: String>,
"url_logo" : <type: String>,
"next_event": {
"id" : <type: Integer>,
"title" : <type: String>,
"datetime_init" : <type: DateTime_TZ>,
"datetime_end" : <type: DateTime_TZ>
}
}
]
}
GET /events/past/:meetupId -> Retorna via .json
os eventos já realizados de um determinado meetup, de acordo com o seguinte formato:
{
"success" : <type: Boolean>,
"message" : <type: String>,
"data" : [
{
"id" : <type: Integer>,
"title" : <type: String>,
"datetime_init" : <type: DateTime_TZ>,
"datetime_end" : <type: DateTime_TZ>,
"participants" : <type: Integer>,
"meetup_id" : <type: Integer>,
"address" {
"place" : <type: String>,
"neighborhood" : <type: String>,
"street" : <type: String>,
"number" : <type: Integer>,
"code" : <type: String>,
"city" : <type: String>,
"uf" : <type: String>,
"country" : <type: String>
}
}
]
}
GET /events/current/:meetupId -> Retorna via .json
os próximos eventos de um determinado meetup, de acordo com o seguinte formato:
{
"success" : <type: Boolean>,
"message" : <type: String>,
"data" : [
{
"id" : <type: Integer>,
"title" : <type: String>,
"datetime_init" : <type: DateTime_TZ>,
"datetime_end" : <type: DateTime_TZ>,
"participants" : <type: Integer>,
"meetup_id" : <type: Integer>,
"address" {
"place" : <type: String>,
"neighborhood" : <type: String>,
"street" : <type: String>,
"number" : <type: Integer>,
"code" : <type: String>,
"city" : <type: String>,
"uf" : <type: String>,
"country" : <type: String>
}
}
]
}
- dotenv: Carrega variáveis de ambiente a partir de um arquivo
.env
dentro deprocess.env
. - express: Framework para servidor web.
- cors: CORS é um pacote
node.js
que pode ser utilizado para habilitar conexões para o servidorexpress
. - moment: Biblioteca responsável por validar e manipular datas.
- pg: Cliente PostgreSQL para NodeJS.
- knex: Biblioteca para criação de queries SQL.