Giter Club home page Giter Club logo

amaro-challenge's Introduction

Desafio back-end AMARO

Sobre o desafio

O desafio consiste em fazer dois exercícios de lógica e a criação de uma API. Você pode criar a aplicação como bem entender e a única regra é: usar a linguagem PHP7 (preferencialmente com um framework moderno) com banco de dados MySQL.

Desafio 1 - Caixa eletrônico

Desenvolva um programa que simule a entrega de notas quando um cliente efetuar um saque em um caixa eletrônico. Os requisitos básicos são os seguintes:
- Entregar o menor número de notas;
- É possível sacar o valor solicitado com as notas disponíveis;
- Saldo do cliente infinito;
- Quantidade de notas finito;
- Notas disponíveis de R$ 100,00; R$ 50,00; R$ 20,00, R$ 10,00, R$ 5,00, R$ 2,00, R$ 1,00

Exemplos:

Valor do Saque: R$ 30,00 – Resultado Esperado: Entregar 1 nota de R$20,00 e 1 nota de R$ 10,00.
Valor do Saque: R$ 80,00 – Resultado Esperado: Entregar 1 nota de R$50,00 1 nota de R$ 20,00 e 1 nota de R$ 10,00.

Desafio 2 - Explosão de string

Desenvolva uma classe que receba a string e divida essa string a partir de um delimitador, é proibido utilizar a função 'explode()'.
Exemplo:
    A entrada 'aaa,bbb,ccc,ddd' terá como saída ['aaa', 'bbb', 'ccc', 'ddd']

Desafio 3 - Construção de API

A seguir temos o link para o banco de dados e o diagrama ER.

Banco de dados

API REST

Regras gerais da API

  • A API deve permitir cadastrar, editar e listar todos os produtos ou um produto específico (products/variants)
  • A API deve permitir recuperar todas os pedidos de um usuário (orders), onde:
    • A partir de cada pedido, deve ser possível listar os produtos, preços e imagens de cada produto
    • Deve ser possível filtrar todos os pedidos que foram finalizados com sucesso e também aqueles que estão aguardando pagamento
  • Criar um pedido para um usuário
  • A API de produtos deve retornar uma array com os três produtos mais similares, de acordo com a definição de similaridade abaixo (dica: crie um job batch que calcula as similaridades entre dois produtos, salvando-os em uma tabela separada).

Definição de Similaridade

  • As categorias e tags estão na tabela products
  • Note que o valor de S é sempre entre 0.2 e 1, sendo que quanto mais próximo de 1 maior a similaridade.
  • A similaridade entre dois produtos é definida por:

Equação

- N = número de tags em comum entre os dois produtos (N >= 0)
- M = número de categorias em comum entre os dois produtos (M >= 0)
- e = número de euler

Endpoints API

  • GET /products : lista todos os produtos
  • POST /products : cria um novo produto
  • PUT /products/{ID do produto} : atualiza as informações do produto com esta ID
  • GET /products/{ID do produto} : lista as informações do produto com esta ID, - inclusive os três produtos mais similares
  • GET /orders : lista todos os pedidos
  • GET /orders/{ID do pedido} : lista as informações do pedido com esta ID
  • GET /orders?status={status_code} : lista todos os pedidos com um determinado - código de status
  • GET /orders/{ID do pedido}/products : lista os itens do pedido com esta ID
  • POST /orders : cria um novo pedido ; deve ser informado o ID do usuário

Documentação da API

Crie uma documentação com as rotas, respostas das rotas e instruções de uso da aplicação.

Critérios de Avaliação

O projeto será avaliado pela equipe de desenvolvimento da AMARO, que irá basear-se nos seguintes critérios:

  • Organização : Estrutura de pastas e arquivos, separation of concerns;
  • Manutenibilidade : Legibilidade, comentários, simplicidade, modularidade;
  • Implementação : Implementação da lógica, uso de orientação a objetos e design patterns;
  • Desempenho : Tempo de execução e/ou de resposta;
  • Qualidade : Elaboração e execução de testes (TDD);
  • Documentação : Instruções de instalação e execução; descrições de funcionamento interno;

amaro-challenge's People

Contributors

lira avatar michaelfrandin avatar

Stargazers

 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.