{"id":25089606,"url":"https://github.com/peulearning/api-picpay","last_synced_at":"2026-05-05T07:32:37.432Z","repository":{"id":276157533,"uuid":"928401171","full_name":"peulearning/api-picpay","owner":"peulearning","description":"Desafio Técnico para vaga de Back-end na equipe PicPay.","archived":false,"fork":false,"pushed_at":"2025-02-06T21:41:58.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T17:27:04.694Z","etag":null,"topics":["h2-database","java","jdk","jpa-hibernate","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peulearning.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-06T15:22:32.000Z","updated_at":"2025-02-06T21:42:01.000Z","dependencies_parsed_at":"2025-02-06T16:36:23.865Z","dependency_job_id":"e3370f7a-afa4-4655-af32-44aafa611fcd","html_url":"https://github.com/peulearning/api-picpay","commit_stats":null,"previous_names":["peulearning/api-picpay"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/peulearning/api-picpay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Fapi-picpay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Fapi-picpay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Fapi-picpay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Fapi-picpay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peulearning","download_url":"https://codeload.github.com/peulearning/api-picpay/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Fapi-picpay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32640533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["h2-database","java","jdk","jpa-hibernate","spring-boot"],"created_at":"2025-02-07T11:18:07.472Z","updated_at":"2026-05-05T07:32:37.417Z","avatar_url":"https://github.com/peulearning.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Desafio Back-end PicPay\n\nPrimeiramente, obrigado pelo seu interesse em trabalhar na melhor plataforma de pagamentos do mundo!\nAbaixo você encontrará todos as informações necessárias para iniciar o seu teste.\n\n## Avisos antes de começar\n\n- Leia com atenção este documento todo e tente seguir ao **máximo** as instruções;\n- Crie um repositório no seu GitHub **sem citar nada relacionado ao PicPay**;\n- Faça seus commits no seu repositório;\n- Envie o link do seu repositório para o email **do recrutador responsável**;\n- Você poderá consultar o Google, Stackoverflow ou algum projeto particular na sua máquina;\n- Dê uma olhada nos [Materiais úteis](#materiais-úteis);\n- Dê uma olhada em como será a [entrevista](#para-o-dia-da-entrevista-técnica);\n- Fique à vontade para perguntar qualquer dúvida aos recrutadores;\n- Fique tranquilo, respire, assim como você, também já passamos por essa etapa. Boa sorte! :)\n\n_Corpo do Email com o link do repositório do desafio_\n\n\u003e Seu Nome\n\u003e\n\u003e Nome do recrutador\n\u003e\n\u003e Link do repositório\n\u003e\n\u003e Link do Linkedin\n\n### Sobre o ambiente da aplicação:\n\n- Escolha qualquer framework que se sinta **confortável** em trabalhar. Esse teste **não faz** nenhuma preferência,\n  portanto decida por aquele com o qual estará mais seguro em apresentar e conversar com a gente na entrevista ;)\n\n- Você pode, inclusive, não optar por framework nenhum. Neste caso, recomendamos a implementação do serviço via script\n  para diminuir a sobrecarga de criar um servidor web;\n\n- Ainda assim, se optar por um framework tente evitar usar muito métodos mágicos ou atalhos já prontos. Sabemos que\n  essas facilidades aumentam a produtividade no dia-a-dia mas aqui queremos ver o **seu** código e a sua forma de\n  resolver problemas;\n\n\u003e Valorizamos uma boa estrutura de containeres criada por você.\n\n## Para o dia da entrevista técnica\n\nNa data marcada pelo recrutador tenha sua aplicação rodando na sua máquina local para execução dos testes e para nos\nmostrar os pontos desenvolvidos e possíveis questionamentos.\nFaremos um code review junto contigo como se você já fosse do nosso time :heart:, você poderá explicar o que você\npensou, como arquitetou e como pode evoluir o projeto.\n\n## Objetivo: PicPay Simplificado\n\nO PicPay Simplificado é uma plataforma de pagamentos simplificada. Nela é possível depositar e realizar transferências\nde dinheiro entre usuários. Temos 2 tipos de usuários, os comuns e lojistas, ambos têm carteira com dinheiro e realizam\ntransferências entre eles.\n\n### Requisitos\n\nA seguir estão algumas regras de negócio que são importantes para o funcionamento do PicPay Simplificado:\n\n- Para ambos tipos de usuário, precisamos do `Nome Completo`, `CPF`, `e-mail` e `Senha`. CPF/CNPJ e e-mails devem ser\n  únicos no sistema. Sendo assim, seu sistema deve permitir apenas um cadastro com o mesmo CPF ou endereço de e-mail;\n\n- Usuários podem enviar dinheiro (efetuar transferência) para lojistas e entre usuários;\n\n- Lojistas **só recebem** transferências, não enviam dinheiro para ninguém;\n\n- Validar se o usuário tem saldo antes da transferência;\n\n- Antes de finalizar a transferência, deve-se consultar um serviço autorizador externo, use este mock\n  [https://util.devi.tools/api/v2/authorize](https://util.devi.tools/api/v2/authorize) para simular o serviço\n  utilizando o verbo `GET`;\n\n- A operação de transferência deve ser uma transação (ou seja, revertida em qualquer caso de inconsistência) e o\n  dinheiro deve voltar para a carteira do usuário que envia;\n\n- No recebimento de pagamento, o usuário ou lojista precisa receber notificação (envio de email, sms) enviada por um\n  serviço de terceiro e eventualmente este serviço pode estar indisponível/instável. Use este mock\n  [https://util.devi.tools/api/v1/notify)](https://util.devi.tools/api/v1/notify)) para simular o envio da notificação\n  utilizando o verbo `POST`;\n\n- Este serviço deve ser RESTFul.\n\n\u003e Tente ser o mais aderente possível ao que foi pedido, mas não se preocupe se não conseguir atender a todos os\n\u003e requisitos. Durante a entrevista vamos conversar sobre o que você conseguiu fazer e o que não conseguiu.\n\n### Endpoint de transferência\n\nVocê pode implementar o que achar conveniente, porém vamos nos atentar **somente** ao fluxo de transferência entre dois\nusuários. A implementação deve seguir o contrato abaixo.\n\n```http request\nPOST /transfer\nContent-Type: application/json\n\n{\n  \"value\": 100.0,\n  \"payer\": 4,\n  \"payee\": 15\n}\n```\n\nCaso ache interessante, faça uma **proposta** de endpoint e apresente para os entrevistadores :heart:\n\n# Avaliação\n\nApresente sua solução utilizando o framework que você desejar, justificando a escolha.\nAtente-se a cumprir a maioria dos requisitos, pois você pode cumprir-los parcialmente e durante a avaliação vamos bater\num papo a respeito do que faltou.\n\n## O que será avaliado e valorizamos :heart:\n\nHabilidades básicas de criação de projetos backend:\n- Conhecimentos sobre REST\n- Uso do Git\n- Capacidade analítica\n- Apresentação de código limpo e organizado\n\nConhecimentos intermediários de construção de projetos manuteníveis:\n- Aderência a recomendações de implementação como as PSRs\n- Aplicação e conhecimentos de SOLID\n- Identificação e aplicação de Design Patterns\n- Noções de funcionamento e uso de Cache\n- Conhecimentos sobre conceitos de containers (Docker, Podman etc)\n- Documentação e descrição de funcionalidades e manuseio do projeto\n- Implementação e conhecimentos sobre testes de unidade e integração\n- Identificar e propor melhorias\n- Boas noções de bancos de dados relacionais\n\nAptidões para criar e manter aplicações de alta qualidade:\n- Aplicação de conhecimentos de observabilidade\n- Utlização de CI para rodar testes e análises estáticas\n- Conhecimentos sobre bancos de dados não-relacionais\n- Aplicação de arquiteturas (CQRS, Event-sourcing, Microsserviços, Monolito modular)\n- Uso e implementação de mensageria\n- Noções de escalabilidade\n- Boas habilidades na aplicação do conhecimento do negócio no software\n- Implementação margeada por ferramentas de qualidade (análise estática, PHPMD, PHPStan, PHP-CS-Fixer etc)\n- Noções de PHP assíncrono\n\n### Boas práticas\n\nCaso use PHP tente seguir as [PSRs](https://www.php-fig.org/psr/psr-12/), caso use outro framework ou linguagem, tente\nseguir as boas práticas da comunidade.\n\nUma sugestão para revisar a qualidade do seu código é usar ferramentas como o PHPMD antes de submeter o seu teste.\nO comando a seguir pode ser usado para rodar o PHPMD no seu projeto localmente, por exemplo:\n```bash\ndocker run -it --rm -v $(pwd):/project -w /project jakzal/phpqa phpmd app text cleancode,codesize,controversial,design,naming,unusedcode\n```\n\n## O que NÃO será avaliado :warning:\n\n- Fluxo de cadastro de usuários e lojistas\n- Frontend (só avaliaremos a (API Restful)[https://www.devmedia.com.br/rest-tutorial/28912])\n- Autenticação\n\n## O que será um Diferencial\n\n- Uso de Docker\n- Uma cobertura de testes consistente\n- Uso de Design Patterns\n- Documentação\n- Proposta de melhoria na arquitetura\n- Ser consistente e saber argumentar suas escolhas\n- Apresentar soluções que domina\n- Modelagem de Dados\n- Manutenibilidade do Código\n- Tratamento de erros\n- Cuidado com itens de segurança\n- Arquitetura (estruturar o pensamento antes de escrever)\n- Carinho em desacoplar componentes (outras camadas, service, repository)\n\n## Materiais úteis\n\n- https://picpay.com/site/sobre-nos\n- https://hub.packtpub.com/why-we-need-design-patterns/\n- https://refactoring.guru/\n- http://br.phptherightway.com/\n- https://www.php-fig.org/psr/psr-12/\n- https://www.atlassian.com/continuous-delivery/software-testing/types-of-software-testing\n- https://github.com/exakat/php-static-analysis-tools\n- https://martinfowler.com/articles/microservices.html\n- https://docs.guzzlephp.org/en/stable/request-options.html\n- https://www.devmedia.com.br/rest-tutorial/28912\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeulearning%2Fapi-picpay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeulearning%2Fapi-picpay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeulearning%2Fapi-picpay/lists"}