Coder Social home page Coder Social logo

picpay-desafio-backend's Introduction

Desafio Back-end PicPay

Primeiramente, obrigado pelo seu interesse em trabalhar na melhor plataforma de pagamentos do mundo! Abaixo você encontrará todos as informações necessárias para iniciar o seu teste.

Avisos antes de começar

  • Leia com atenção este documento todo e tente seguir ao máximo as instruções;
  • Crie um repositório no seu GitHub sem citar nada relacionado ao PicPay;
  • Faça seus commits no seu repositório;
  • Envie o link do seu repositório para o email do recrutador responsável;
  • Você poderá consultar o Google, Stackoverflow ou algum projeto particular na sua máquina;
  • Dê uma olhada nos Materiais úteis;
  • Dê uma olhada em como será a entrevista;
  • Fique à vontade para perguntar qualquer dúvida aos recrutadores;
  • Fique tranquilo, respire, assim como você, também já passamos por essa etapa. Boa sorte! :)

Corpo do Email com o link do repositório do desafio

Seu Nome

Nome do recrutador

Link do repositório

Link do Linkedin

Sobre o ambiente da aplicação:

  • Escolha qualquer framework que se sinta confortável em trabalhar. Esse teste não faz nenhuma preferência, portanto decida por aquele com o qual estará mais seguro em apresentar e conversar com a gente na entrevista ;)

  • Você pode, inclusive, não optar por framework nenhum. Neste caso, recomendamos a implementação do serviço via script para diminuir a sobrecarga de criar um servidor web;

  • Ainda assim, se optar por um framework tente evitar usar muito métodos mágicos ou atalhos já prontos. Sabemos que essas facilidades aumentam a produtividade no dia-a-dia mas aqui queremos ver o seu código e a sua forma de resolver problemas;

Valorizamos uma boa estrutura de containeres criada por você.

Para o dia da entrevista técnica

Na data marcada pelo recrutador tenha sua aplicação rodando na sua máquina local para execução dos testes e para nos mostrar os pontos desenvolvidos e possíveis questionamentos. Faremos um code review junto contigo como se você já fosse do nosso time ❤️, você poderá explicar o que você pensou, como arquitetou e como pode evoluir o projeto.

Objetivo: PicPay Simplificado

O PicPay Simplificado é uma plataforma de pagamentos simplificada. Nela é possível depositar e realizar transferências de dinheiro entre usuários. Temos 2 tipos de usuários, os comuns e lojistas, ambos têm carteira com dinheiro e realizam transferências entre eles.

Requisitos

A seguir estão algumas regras de negócio que são importantes para o funcionamento do PicPay Simplificado:

  • Para ambos tipos de usuário, precisamos do Nome Completo, CPF, e-mail e Senha. CPF/CNPJ e e-mails devem ser únicos no sistema. Sendo assim, seu sistema deve permitir apenas um cadastro com o mesmo CPF ou endereço de e-mail;

  • Usuários podem enviar dinheiro (efetuar transferência) para lojistas e entre usuários;

  • Lojistas só recebem transferências, não enviam dinheiro para ninguém;

  • Validar se o usuário tem saldo antes da transferência;

  • Antes de finalizar a transferência, deve-se consultar um serviço autorizador externo, use este mock https://util.devi.tools/api/v2/authorize para simular o serviço utilizando o verbo GET;

  • A operação de transferência deve ser uma transação (ou seja, revertida em qualquer caso de inconsistência) e o dinheiro deve voltar para a carteira do usuário que envia;

  • No recebimento de pagamento, o usuário ou lojista precisa receber notificação (envio de email, sms) enviada por um serviço de terceiro e eventualmente este serviço pode estar indisponível/instável. Use este mock https://util.devi.tools/api/v1/notify)) para simular o envio da notificação utilizando o verbo POST;

  • Este serviço deve ser RESTFul.

Tente ser o mais aderente possível ao que foi pedido, mas não se preocupe se não conseguir atender a todos os requisitos. Durante a entrevista vamos conversar sobre o que você conseguiu fazer e o que não conseguiu.

Endpoint de transferência

Você pode implementar o que achar conveniente, porém vamos nos atentar somente ao fluxo de transferência entre dois usuários. A implementação deve seguir o contrato abaixo.

POST /transfer
Content-Type: application/json

{
  "value": 100.0,
  "payer": 4,
  "payee": 15
}

Caso ache interessante, faça uma proposta de endpoint e apresente para os entrevistadores ❤️

Avaliação

Apresente sua solução utilizando o framework que você desejar, justificando a escolha. Atente-se a cumprir a maioria dos requisitos, pois você pode cumprir-los parcialmente e durante a avaliação vamos bater um papo a respeito do que faltou.

O que será avaliado e valorizamos ❤️

Habilidades básicas de criação de projetos backend:

  • Conhecimentos sobre REST
  • Uso do Git
  • Capacidade analítica
  • Apresentação de código limpo e organizado

Conhecimentos intermediários de construção de projetos manuteníveis:

  • Aderência a recomendações de implementação como as PSRs
  • Aplicação e conhecimentos de SOLID
  • Identificação e aplicação de Design Patterns
  • Noções de funcionamento e uso de Cache
  • Conhecimentos sobre conceitos de containers (Docker, Podman etc)
  • Documentação e descrição de funcionalidades e manuseio do projeto
  • Implementação e conhecimentos sobre testes de unidade e integração
  • Identificar e propor melhorias
  • Boas noções de bancos de dados relacionais

Aptidões para criar e manter aplicações de alta qualidade:

  • Aplicação de conhecimentos de observabilidade
  • Utlização de CI para rodar testes e análises estáticas
  • Conhecimentos sobre bancos de dados não-relacionais
  • Aplicação de arquiteturas (CQRS, Event-sourcing, Microsserviços, Monolito modular)
  • Uso e implementação de mensageria
  • Noções de escalabilidade
  • Boas habilidades na aplicação do conhecimento do negócio no software
  • Implementação margeada por ferramentas de qualidade (análise estática, PHPMD, PHPStan, PHP-CS-Fixer etc)
  • Noções de PHP assíncrono

Boas práticas

Caso use PHP tente seguir as PSRs, caso use outro framework ou linguagem, tente seguir as boas práticas da comunidade.

Uma sugestão para revisar a qualidade do seu código é usar ferramentas como o PHPMD antes de submeter o seu teste. O comando a seguir pode ser usado para rodar o PHPMD no seu projeto localmente, por exemplo:

docker run -it --rm -v $(pwd):/project -w /project jakzal/phpqa phpmd app text cleancode,codesize,controversial,design,naming,unusedcode

O que NÃO será avaliado ⚠️

O que será um Diferencial

  • Uso de Docker
  • Uma cobertura de testes consistente
  • Uso de Design Patterns
  • Documentação
  • Proposta de melhoria na arquitetura
  • Ser consistente e saber argumentar suas escolhas
  • Apresentar soluções que domina
  • Modelagem de Dados
  • Manutenibilidade do Código
  • Tratamento de erros
  • Cuidado com itens de segurança
  • Arquitetura (estruturar o pensamento antes de escrever)
  • Carinho em desacoplar componentes (outras camadas, service, repository)

Materiais úteis

picpay-desafio-backend's People

Contributors

iamthepoe avatar josemiguelq avatar nicolaspereira avatar vinyvicente avatar wilcorrea avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

picpay-desafio-backend's Issues

[FIX] URL Mock serviço autorizador - 404 Not Found

Oi pessoal do picpay, estava lendo o desafio e cheguei no seguinte tópico dos Requisitos.

Antes de finalizar a transferência, deve-se consultar um serviço autorizador externo, use este mock para simular (https://run.mocky.io/v3/8fafdd68-a090-496f-8c9a-3442cf30dae6).

Notei que a URL apresentada está retornando 404 - Not Found, acho que seria legal vocês atualizarem para que a galera que realize o teste não seja prejudicada :)

Segue link com o print: https://ibb.co/HBPqThb

mock inválido

Poderia disponibilizar o mock funcionando?
Ou pelo menos disponibilizar os dados/código.

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.