└── README.md /README.md: -------------------------------------------------------------------------------- 1 | ![CredPago](http://cp-arquivos-publicos.s3-website-sa-east-1.amazonaws.com/imagens/credpago.png) 2 | 3 | # Desafio Backend 4 | 5 | Este desafio consiste em criar uma API REST para um marketplace de Discos que será consumida por um aplicativo mobile e uma aplicação web. 6 | Todos os itens serão colocados em um carrinho de compras e passados para a API para realizar uma transação e-commerce. 7 | 8 | Faça o **fork** neste repositório e quando concluir o desafio faça um **pull request** para iniciar a nossa análise. 9 | 10 | Escolha a tecnologia que achar melhor, contudo, deverá informar quais tecnologias foram usadas, como instalar, rodar e efetuar os acessos no arquivo para análise do desafio. 11 | 12 | ### POST `/store/api/v1/product` 13 | Esse método deve receber um item novo e persistir no banco de dados. 14 | ```json 15 | { 16 | "product_id":"d2eda25e-9757-11e9-bc42-526af7764f64", 17 | "artist":"Pink Floyd", 18 | "year":1973, 19 | "album":"Dask Side of The Moon", 20 | "price":250, 21 | "store":"Minha Loja de Discos", 22 | "thumb":"https://images-na.ssl-images-amazon.com/images/I/61R7gJadP7L._SX355_.jpg", 23 | "date":"26/11/2018" 24 | } 25 | ``` 26 | + Product 27 | 28 | | Campo | Tipo | 29 | |-------------|---------| 30 | | product_id | String | 31 | | artist | String | 32 | | year | Integer | 33 | | album | String | 34 | | price | Integer | 35 | | store | String | 36 | | thumb | String | 37 | | date | String | 38 | 39 | ### GET `/store/api/v1/products` 40 | Retornar uma lista de produtos no seguinte formato JSON 41 | ```json 42 | [ 43 | { 44 | "product_id":"d2eda25e-9757-11e9-bc42-526af7764f64", 45 | "artist":"Pink Floyd", 46 | "year":1973, 47 | "album":"Dask Side of The Moon", 48 | "price":250, 49 | "store":"Minha Loja de Discos", 50 | "thumb":"https://images-na.ssl-images-amazon.com/images/I/61R7gJadP7L._SX355_.jpg", 51 | "date":"26/11/2018" 52 | }, 53 | { 54 | "product_id":"4a149a9a-9758-11e9-bc42-526af7764f64", 55 | "artist":"U2", 56 | "year":1993, 57 | "album":"Zooropa", 58 | "price":100, 59 | "store":"Super Discos", 60 | "thumb":"https://images-na.ssl-images-amazon.com/images/I/81ZmhD2lO8L._SL1200_.jpg", 61 | "date":"01/02/2019" 62 | }, 63 | { 64 | "product_id":"53f2b33a-9758-11e9-bc42-526af7764f64", 65 | "artist":"The Beatles", 66 | "year":1969, 67 | "album":"Abbey Road", 68 | "price":180, 69 | "store":"Old School Discos", 70 | "thumb":"https://images-na.ssl-images-amazon.com/images/I/919WO8q-nnL._SL1500_.jpg", 71 | "date":"13/06/2019" 72 | } 73 | ] 74 | ``` 75 | 76 | + Product 77 | 78 | | Campo | Tipo | 79 | |-------------|---------| 80 | | product_id | String | 81 | | artist | String | 82 | | year | Integer | 83 | | album | String | 84 | | price | Integer | 85 | | store | String | 86 | | thumb | String | 87 | | date | String | 88 | 89 | ### POST `/store/api/v1/add_to_cart` 90 | Adicionar item ao carrinho. 91 | ```json 92 | { 93 | "cart_id":"c5b6c552-9757-11e9-bc42-526af7764f64", 94 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 95 | "product_id":"d2eda25e-9757-11e9-bc42-526af7764f64", 96 | "date":"26/11/2018" 97 | "time":"18:33:12" 98 | } 99 | ``` 100 | + Cart 101 | 102 | | Campo | Tipo | 103 | |-------------|---------| 104 | | cart_id | String | 105 | | client_id | Integer | 106 | | product_id | String | 107 | | date | String | 108 | | time | String | 109 | 110 | Após o cliente incluir todos itens no carrinho, a compra será finalizada, invocando o método `buy` na sua API. 111 | 112 | ### POST `/store/api/v1/buy` 113 | Finalizar a compra. 114 | ```json 115 | { 116 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 117 | "cart_id":"c5b6c552-9757-11e9-bc42-526af7764f64", 118 | "client_name":"John Snow", 119 | "value_to_pay":280, 120 | "credit_card":{ 121 | "number":"1234123412341234", 122 | "cvv":111, 123 | "exp_date":"06/22", 124 | "card_holder_name":"John S", 125 | } 126 | } 127 | ``` 128 | 129 | + Transaction 130 | 131 | | Campo | Tipo | 132 | |--------------|------------| 133 | | client_id | String | 134 | | client_name | String | 135 | | total_to_pay | Integer | 136 | | credit_card | CreditCard | 137 | 138 | + CreditCard 139 | 140 | | Campo | Tipo | 141 | |------------------|---------| 142 | | card_number | String | 143 | | card_holder_name | String | 144 | | cvv | Integer | 145 | | exp_date | String | 146 | 147 | 148 | ### GET `/store/api/v1/history` 149 | Esse método deve retornar todos as compras realizadas na API 150 | ```json 151 | [ 152 | { 153 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 154 | "order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a1", 155 | "card_number":"**** **** **** 1234", 156 | "value":100, 157 | "date":"21/08/2018" 158 | }, 159 | { 160 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 161 | "order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a2", 162 | "card_number":"**** **** **** 1234", 163 | "value":280, 164 | "date":"20/02/2019" 165 | }, 166 | { 167 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 168 | "order_id":"569c30dc-6bdb-407a-b18b-3794f9b206aa", 169 | "card_number":"**** **** **** 1234", 170 | "value":500, 171 | "date":"29/06/2019" 172 | } 173 | ] 174 | ``` 175 | 176 | + History 177 | 178 | | Campo | Tipo | 179 | |------------------|---------| 180 | | card_number | String | 181 | | cliend_id | String | 182 | | value | Integer | 183 | | order_id | String | 184 | 185 | ### GET `/store/api/v1/history/{clientId}` 186 | Chamada da API deve retornar todos as compras realizadas por um cliente específico 187 | ```json 188 | [ 189 | { 190 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 191 | "order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a1", 192 | "value":180, 193 | "date":"19/01/2019", 194 | "card_number":"**** **** **** 1234" 195 | }, 196 | { 197 | "client_id":"fac3591c-9785-11e9-bc42-526af7764f64", 198 | "order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a2", 199 | "value":100, 200 | "date":"20/06/2019", 201 | "card_number":"**** **** **** 1234" 202 | } 203 | ] 204 | ``` 205 | 206 | ### Premissas 207 | - A solução deve ser escalável, preparada para receber um grande volume de requisições; 208 | - Os endpoints do serviço devem responder num tempo satisfatório, que não comprometa a experiência dos usuários, mesmo com um grande volume de dados; 209 | - O desenvolvimento pode ser feito utilizando qualquer linguagem de programação e qualquer sistema de banco de dados, cabendo ao desenvolvedor escolher o que for melhor para a situação; 210 | - Serão avaliados a arquitetura, os padrões utilizados para o desenvolvimento, documentação, arquitetura da solução e a entrega no prazo; 211 | --------------------------------------------------------------------------------