desafio-backend

0.0.1 • Public • Published

Grunt

  • npm run build: Executa a limpeza dos arquivos e diretorios.
  • npm run debug-test: Executa os testes unitários com o DEBUG ativo.
  • npm run test: Executa os testes unitários.
  • npm run debug-dev: Executa os testes unitários e espera por alterações com o DEBUG ativo.
  • npm run dev: Executa os testes unitários e espera por alterçãoes.
  • npm run prod: Executa o código com NODE_ENV=production.
  • npm run coverage: Executa os testes unitários e retorna a cobertura dos códigos através do nyc
  • npm run release: Inicia uma nova release de versão incrementando o patch, git flow release start.
  • npm run release:minor: Inicia uma nova release de versão incrementando o minor, git flow release start.
  • npm run release:major: Inicia uma nova release de versão incrementando o major, git flow release start.
  • npm run release:finish: Finaliza a release, ou seja, realiza o git flow release finish.

Rodando Servidor

$> git clone https://github.com/salespaulo/desafio-backend.git
$> cd desafio-backend
$> npm install
$> grunt

ou

$> git clone https://github.com/salespaulo/desafio-backend.git
$> cd desafio-backend
$> npm install
$> NODE_ENV=development node app/index

Acessando Servidor

Modo Desenvolvimento

$> git clone https://github.com/salespaulo/desafio-backend.git
$> git flow init
$> cd desafio-backend
$> npm install
$> npm run dev

Debug

$> git clone https://github.com/salespaulo/desafio-backend.git
$> git flow init
$> cd desafio-backend
$> npm install
$> npm run debug-dev

Rodando os Testes

$> git clone https://github.com/salespaulo/desafio-backend.git
$> cd desafio-backend
$> npm install
$> npm run test

Debug

$> git clone https://github.com/salespaulo/desafio-backend.git
$> cd desafio-backend
$> npm install
$> npm run debug-test

Parâmetros ou Variáveis de Ambiente

Os parâmetros podem ser setados no momento da execução do servidor, e.g. node app/index --http-server-name=desafio-nome-servidor. As variáveis de amb. podem ser setadas diretamente no sistema operacional e estão representadas abaixo pelas palavras compostas por letras maíusculas.

Gerais

  • NODE_ENV: development ou test, padrão development.
  • DEBUG: desafio-backend ou *, mostra todos os debugjs.

Servidor

  • --http-server-name || HTTP_SERVER_NAME: Nome do servidor.
  • --http-server-port || HTTP_SERVER_PORT: Porta do servidor.
  • --http-server-version || HTTP_SERVER_VERSION: Versão do servidor.

Banco de Dados

  • --database-name || DATABASE_NAME: Nome do banco.
  • --database-user || DATABASE_USER: Usuário do banco.
  • --database-password || DATABASE_PASSWORD: Senha do banco.
  • --database-dialect || DATABASE_DIALECT: Dialeto do Sequelize p/ o banco.

Logger

  • --logger-level || LOGGER_LEVEL: Nível de Log.

Módulos

Dev. Back-End

Sua tarefa é construir uma API e banco de dados para a aplicação VUTTR (Very Useful Tools to Remember). A aplicação é um simples repositório para gerenciar ferramentas com seus respectivos nomes, links, descrições e tags. Utilize um repositório Git (público, de preferência) para versionamento e disponibilização do código.

A aplicação deve ser construída utilizando qualquer linguagem de programação backend. Qualquer banco de dados, libraries e ferramentas de sua preferência.

A API deverá ser documentada utilizando o formato API Blueprint ou Swagger.

O que será avaliado

Queremos avaliar sua capacidade de desenvolver e documentar um back-end para uma aplicação. Serão avaliados:

  • Código bem escrito e limpo;
  • Quais ferramentas foram usadas, como e porquê, além do seu conhecimento das mesmas;
  • Seu conhecimento em banco de dados, requisições HTTP, APIs REST, etc;
  • Sua capacidade de se comprometer com o que foi fornecido;
  • Sua capacidade de documentação da sua parte da aplicação.

O mínimo necessário

  • Uma aplicação contendo uma API real simples, sem autenticação, que atenda os requisitos descritos abaixo, fazendo requisições à um banco de dados para persistência;
  • README.md contendo informações básicas do projeto e como executá-lo;
  • API Blueprint ou Swagger da aplicação.

Bônus

Os seguintes itens não são obrigatórios, mas darão mais valor ao seu trabalho (os em negrito são mais significativos para nós)

  • Uso de ferramentas externas que facilitem o seu trabalho;
  • Cuidados especiais com otimização, padrões, entre outros;
  • Migrations ou script para configuração do banco de dados utilizado;
  • Testes;
  • Conteinerização da aplicação;
  • Autenticação e autorização (OAuth, JWT);
  • Pipelines de CI/CD (GitLab, CircleCI, TravisCI, etc);
  • Deploy em ambientes reais, utilizando serviços de cloud externos (AWS, Heroku, GCP, etc);
  • Sugestões sobre o challenge embasadas em alguma argumentação.

Requisitos

0: A API deve responder na porta 3000

1: Deve haver uma rota para listar todas as ferramentas cadastradas

GET /tools

Resposta:

[
    {
        id: 1, // ou qualquer outro identificador
        title: "Notion",
        link: "https://notion.so",
        description: "All in one tool to organize teams and ideas. Write, plan, collaborate, and get organized. ",
        tags: [
            "organization",
            "planning",
            "collaboration",
            "writing",
            "calendar"
        ]
    },
    {
        id: 2,
        title: "json-server",
        link: "https://github.com/typicode/json-server",
        description: "Fake REST API based on a json schema. Useful for mocking and creating APIs for front-end devs to consume in coding challenges.",
        tags: [
            "api",
            "json",
            "schema",
            "node",
            "github",
            "rest"
        ]
    },
    {
        id: 3,
        title: "fastify",
        link: "https://www.fastify.io/",
        description: "Extremely fast and simple, low-overhead web framework for NodeJS. Supports HTTP2.",
        tags: [
            "web",
            "framework",
            "node",
            "http2",
            "https",
            "localhost"
        ]
    }
]

2: Deve ser possível filtrar ferramentas utilizando uma busca por tag

GET /tools?tag=node (node é a tag sendo buscada neste exemplo)

Resposta:

[
    {
        id: 2, // ou qualquer outro identificador
        title: "json-server",
        link: "https://github.com/typicode/json-server",
        description: "Fake REST API based on a json schema. Useful for mocking and creating APIs for front-end devs to consume in coding challenges.",
        tags: [
            "api",
            "json",
            "schema",
            "node",
            "github",
            "rest"
        ]
    },
    {
        id: 3,
        title: "fastify",
        link: "https://www.fastify.io/",
        description: "Extremely fast and simple, low-overhead web framework for NodeJS. Supports HTTP2.",
        tags: [
            "web",
            "framework",
            "node",
            "http2",
            "https",
            "localhost"
        ]
    }
]

3: Deve haver uma rota para cadastrar uma nova ferramenta

O corpo da requisição deve conter as informações da ferramenta a ser cadastrada, sem o ID (gerado automaticamente pelo servidor). A resposta, em caso de sucesso, deve ser o mesmo objeto, com seu novo ID gerado.

POST /tools Content-Type: application/json

{
    "title": "hotel",
    "link": "https://github.com/typicode/hotel",
    "description": "Local app manager. Start apps within your browser, developer tool with local .localhost domain and https out of the box.",
    "tags":["node", "organizing", "webapps", "domain", "developer", "https", "proxy"]
}

Resposta:

Status: 201 Created

Content-Type: application/json

{
    "title": "hotel",
    "link": "https://github.com/typicode/hotel",
    "description": "Local app manager. Start apps within your browser, developer tool with local .localhost domain and https out of the box.",
    "tags":["node", "organizing", "webapps", "domain", "developer", "https", "proxy"],
    "id":5 // ou qualquer outro identificador
}

4: O usuário deve poder remover uma ferramenta por ID

DELETE /tools/:id

Resposta:

Status: 204 No Content

Critérios de Aceitação

  • A API deve ser real e escrita por você. Ferramentas que criam APIs automaticamente (Loopback, json-server, etc) não são aceitas;
  • Todos os requisitos acima devem ser cumpridos, seguindo o padrão de rotas estabelecido;
  • Deve haver um documento de API Blueprint ou OpenAPI (antigo Swagger) descrevendo sua API;
  • Se você julgar necessário, adequado ou quiser deixar a aplicação mais completa (bônus!) você pode adicionar outras rotas, métodos, meios de autenticação com usuários, etc.

Readme

Keywords

Package Sidebar

Install

npm i desafio-backend

Weekly Downloads

13

Version

0.0.1

License

MIT

Unpacked Size

87.5 kB

Total Files

58

Last publish

Collaborators

  • salespaulo