GithubHelp home page GithubHelp logo

leandroeguimaraes-zz / microtef-hire-me Goto Github PK

View Code? Open in Web Editor NEW

This project forked from stone-payments/microtef-hire-me

0.0 1.0 0.0 28.08 MB

C# 24.52% PowerShell 13.31% CSS 0.27% ASP 0.01% HTML 0.73% JavaScript 47.13% Pascal 13.93% Puppet 0.10%

microtef-hire-me's Introduction

Hire me

Desafio para avaliar as suas habilidades como desenvolvedor.

Instruções

Você deve:

  1. Clonar esse repositório
  2. Em seu fork, atenda os requisitos descritos abaixo:
  • Para aprendizes de padawan: tópicos que tiverem 🐣
  • Para padawans: tópicos que tiverem 🐣 e 🐥
  • Para jedis: tópicos que tiverem 🐣, 🐥 e 🐤
  • Para mestres jedi: tópicos que tiverem 🐣, 🐥, 🐤 e 🐔
  1. Nos envie um e-mail com seu nome e link do repositório

O desafio

O projeto consiste na implementação de duas aplicações (cliente-servidor) que simulem o processo de uma transação financeira.

🐣 O cliente (dê um nome legal pra ele)

Deve ser uma aplicação desktop simples utilizando WPF. O layout não será avaliado, mas a escolha de componentes e estrutura do XAML serão.

Deve haver duas telas principais:

  • Tela de transação: input dos dados da transação e envio da transação para o servidor.
  • Tela de consulta das transações efetuadas: lista das transações efetuadas.

⚠️ Apenas para 🐣: como você não precisa fazer o servidor, faça mock dos dados da transação.

🐔 Catálogo de cartões virtuais

Criar um catálogo de cartões virtuais (o número que você achar razoável para testar diferentes cenários), que estarão disponíveis quando o cliente for fazer uma compra. Esses cartões deverão ter propriedades a mais do que o cartão "básico" descrito abaixo.

  • A senha de cada cartão do catálogo deve estar criptografada de algum jeito
  • Com esse catálogo, a verificação da senha do cartão deve ser feita apenas pelo servidor

🐥 O servidor (dê um nome legal pra ele)

O servidor irá simular justamente o que a Stone é, uma adquirente.

No mundo real, uma adquirente se comunica com o banco (emissor do cartão de crédito/débito) e com a bandeira (Visa, MasterCard, American Express, etc). O servidor não precisará se preocupar com isso, apenas irá simular uma transação financeira de acordo com alguns parâmetros.

Sinta-se livre para utilizar a tecnologia que quiser, desde que cumpra os requisitos abaixo. õ/

O servidor deve esperar por uma transação. Assim que o cliente enviar uma requisição (como demonstrado no esquema a seguir), o servidor deve usar parâmetros de validação dos dados da transação e parâmetros randômicos (você pode usar outro parâmetro, mas documente em algum canto!) para retornar sucesso ou erro na transação.

Códigos de retorno

Código Explicação
Aprovado Transação aprovada
Transação negada Transação negada
Saldo insuficiente Portador do cartão não possui saldo
Valor inválido Mínimo de 10 centavos
Cartão bloqueado Quando o cartão está bloqueado (dãa!)
Erro no tamanho da senha Senha deve ter entre 4 e 6 dítigos
🐤 Senha inválida A senha enviada é inválida

🐤 Você pode (e deve!) adicionar novos códigos de retorno.

🐤 Cadastro dos clientes

Deverá ser capaz de cadastrar clientes que possam passar transações no seu servidor. O limite de crédito de cada cliente deve ser considerado.

Comunicação entre cliente e servidor

A comunicação pode acontecer em JSON ou XML.

Autorização

Relação cliente-servidor

🐤 Sondagem das transações

Relação cliente-servidor com sonda

O modelo de dados

🐤 O modelo descrito aqui pode (e deve!) ser incrementado.

Card

Propriedade Descrição
CardholderName Nome do portador do cartão
Number Os números que são impressos no cartão, podendo variar entre 12 à 19 dígitos
ExpirationDate Data de expiração do cartão
CardBrand Bandeira do cartão
Password Senha do cartão
Type Chip ou tarja magnética
HasPassword Se o cartão possui senha. Apenas cartões de tarja magnética podem ter essa propriedade como True

Transaction

Propriedade Descrição
Amount Valor da transação
Type Tipo da transação
Card Propriedades do cartão
Number Número de parcelas, se for uma transação de crédito parcelado

O que será avaliado?

  1. Desenho e arquitetura da solução
  2. Padrões do projeto utilizados
  3. Organização, documentação e legibilidade do código
  4. 🐤 Mapeamento ORM
  5. Uso de biblioteca de terceiros
  6. Criatividade
  7. 🐤 Testes de unidade e mocking

Inspiração

Esse desafio foi inspirado no layout maravilhoso do projeto hire.me feito pela Bemobi.

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.