Giter VIP home page Giter VIP logo

xy-inc's Introduction

Leonardo Delfino / xy-inc

Teste Desenvolvedor 3 - Backend as a Service

Arquitetura

  • Nodejs 6+
  • Express
  • MongoDB 3.2
  • Mongoose
  • Mocha + Chai para testes
  • Instalbul para cobertura de código

Análise da Solução

A linguagem escolhida para desenvovimento foi nodejs, devido a facilidade, domínio e necessidade de pouco código para desenvolver a solução deste problema.

A escolha do MongoDB se deve ao fato de ser um banco não relacional, sem obrigatóriedade de ter esquemas definidos. Essas caractersticas auxiliam na solução de montar uma api que fornece serviço para persistência de dados de entidades genéricas, facilitando a criação e alteração dos modelos.

A solução pode ser escalada utilizando um gerenciador de processos como o PM2 e adicionando shards e/ou replicas sets ao MongoDB.

Instalação

O primeiro passo é clonar o projeto na sua máquina:

git clone https://github.com/leonardodelfino/xy-inc.git

Os pré-requisitos necessários para rodar o projeto é a instalação do nodejs 6+ e o banco de dados MongoDB. O banco foi disponibilizado via docker, sendo necessário executar o comando abaixo para iniciar:

docker-compose up -d

Execução

Navegue até a pasta criada e execute o comando abaixo para instalar as dependências.

npm install

Para inciar o servidor execute o seguinte comando:

npm start

Para executar os testes e exibir o relatório de cobertura de código execute o seguinte comando:

npm test

Documentação

As rotas listadas abaixo são utilizadas para criação e exibição dos modelos:

Método Rota Descrição
POST /api/entity Criação de uma nova entidade
GET /api/entity Retorna todas as entidades criadas
GET /api/entity/:id Retorna uma entidade específica

Exemplo: POST /api/entity - Criação de uma nova entidade

curl -X POST \
  http://localhost:3000/api/entity \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
  "name" : "pessoa",
  "attributes": [
    {
      "name": "nome",
      "type": "string",
       "required" : true
    },
    {
       "name" : "sobrenome",
       "type" : "string"
    },
    {
       "name" : "data_nascimento",
       "type" : "date"
    },
    {
       "name" : "nro_filhos",
       "type" : "number"
    },
    {
       "name" : "usa_oculos",
       "type" : "boolean"
    }
  ]
}'

Exemplo: GET /api/entity - Retorna todas as entidades criadas

curl -X GET \
  http://localhost:3000/api/entity \
  -H 'cache-control: no-cache' \

Exemplo: GET /api/entity/:id - Retorna uma entidade com um determinado id

curl -X GET \
  http://localhost:3000/api/entity/xpto \
  -H 'cache-control: no-cache' \

As rotas listadas abaixo são utilizadas para realizar operações de CRUD nos modelos criados.

Método Rota Descrição
POST /api/:entidade Insere um novo registro
GET /api/:entidade Retorna todos os registros
GET /api/:entidade/:id Retorna um registro específico
PUT /api/:entidade/:id Atualiza um registro
DELETE /api/:entidade/:id Exclui um registro

Exemplo: POST /api/:entidade - Insere um novo registro

curl -X POST \
  http://localhost:3000/api/pessoa \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{"nome": "Leonardo", "sobrenome" : "Delfino", "data_nascimento" : "1989-06-04", "usa_oculos" : false, "filhos" : 0}'

Exemplo: GET /api/:entidade - Retorna todos os registros

curl -X GET \
  http://localhost:3000/api/pessoa \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \

Exemplo: GET /api/:entidade/:id - Retorna um registro específico

curl -X GET \
  http://localhost:3000/api/pessoa/xpto \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \

Exemplo: PUT /api/:entidade/:id - Atualiza um registro

curl -X PUT \
  http://localhost:3000/api/pessoa/xpto \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{ "nome": "João da Silva", "nro_filhos" : 2}'

Exemplo: DELETE /api/:entidade/:id - Exclui um registro

curl -X DELETE \
  http://localhost:3000/api/pessoa/xpto \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \

xy-inc's People

Contributors

leonardodelfino avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.