MartinsPaulo / Credit-Transactions-API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Como configurar a aplicação:

Depois de fazer o clone do repositório em sua maquina, pelo prompt vá até o local do projeto e execute:

composer install --no-scripts

Copie o arquivo env.example e renomei para .env:

em linux o comando é cp .env.example .env , mas você pode fazer isto manualmente tanto no linux como no windows.

Dentro do arquivo .env, configure seu banco de dados. Vamos usar as migrações do laravel, por isto você pode ultilizar qualquer banco de dados a sua escolha e o sistema funcionara, basta definir as informações no arquivo .env:

DB_CONNECTION=mysql (tipo do banco de dados)

DB_HOST=127.0.0.1 (url do banco de dados)

DB_DATABASE=caju_base (nome da base de dados)

DB_USERNAME="exemplo" (nome do usuario da base de dados)

DB_PASSWORD="exemplo" (senha do usuario da base de dados, caso não tiver deixe vazio)

Eu deixei pronto comando para realizar as configurações principais, inclusive criar o banco de dados, ultilize:

php artisan StartCajuApi

Caso apareça a mensagem de sucesso esta tudo configurado, basta ultilizar o comando

php artisan serve

E testar a aplicação ultilizando o postman pelas urls

http://127.0.0.1:8000\api\l1

http://127.0.0.1:8000\api\l2

http://127.0.0.1:8000\api\l3

Testes L1

{
	"account": "123",
	"totalAmount": 40000.00,
	"mcc": "5811",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}
{
	"account": "123",
	"totalAmount": 100.00,
	"mcc": "9999",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}
{
	"account": "99999",
	"totalAmount": 100.00,
	"mcc": "5811",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}

Testes L2

--Não tem valor no cartão, feito no cash
{
	"account": "167",
	"totalAmount": 260.00,
	"mcc": "5411",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}

--mcc inesxistente feito no cash

{
	"account": "567",
	"totalAmount": 100.00,
	"mcc": "9999",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}

--Apenas outro teste invalido comum

{
	"account": "99999",
	"totalAmount": 100.00,
	"mcc": "5811",
	"merchant": "PADARIA DO ZE               SAO PAULO BR"
}

L3 - Duvida Teorica

Eu fiquei com uma dúvida teórica bem grande na L3. Então resolvi responder teoricamente o que faria, caso desejem que implemente, também posso fazer.

Se entendi corretamente o problema, eu apresentaria 3 possíveis soluções para discussão:

Primeira: Ter uma tabela com todos estabelecimentos que nós conhecemos mapeada sua real categoria na base de dados, e seguir por esta tabela. Vantagem: Teoricamente rápido dependendo do nível da escalabilidade. Desvantagem: Provavelmente não temos mapeado todos estabelecimentos do Brasil.

Segunda: Esta opção, não consigo prever a eficácia por desconhecer a operação na prática, entretanto seria fazer uma tabela de mapeamento com palavras chaves. Se no nome do estabelecimento contiver as palavras Restaurante, lanchonete, bar ou similares, parece claro se tratar do grupo MEAL, se possui nome como spotify, hbo, cinema ou similares, também podemos encaixar em CULTURE…

Tabela relacional
Cinema CULTURE
HBO CULTURE
Restaurante MEAL
Bar MEAL
Quando recebermos um nome de estabelicimento podemos quebrar a string do nome em diversos totens e fazer esta pesquisa em nossa tabela de mapeamento no banco de dados. Exemplo "Bar da Rosa", contem a palavra Bar, então retornaria MEAL. P.S: Para comparação ser precisa salvamos todos casos como maiúsculo ou minúsculo, e poderíamos verificar necessidade de acentuações.

Terceira: Com base nas categorias que sabemos serem corretas (Provavelmente já existe algo assim salvo no banco de dados da empresa), aplicar um algoritmo preditivo, exemplo de Bayes, para que ele receba um nome desconhecido, e encaixe corretamente na sua categoria de benefício. Pode ser complementar com os outros métodos, ou dependendo de sua acurácia trabalhar sozinho. Desvantagem: Só fazendo testes para entender se o tempo de resposta e a acurácia seriam boas o suficiente para ser utilizado na produção, e o resultado pode ser negativo.

L4 - Resposta

Implataria a estrutura de dados FILA para operação. Sempre que uma solicitação de compra for iniciada, ela entra em uma fila de processamento. Esta fila poderia ser uma tabela no banco de dados. Então o própio servidor executaria a fila constantemente, respeitando a ordem de o primeiro a chegar é o primeiro a ser atendido. Pensei em implementar no laravel usando os JOBS, mas seria mais trabalho configurar a suas maquinas do que a implementação, e como não trabalhamos com Laravel, pensei que talvez seria um pouco desnecessário, visto que a ideia é simples (embora a implementação nem tanto).

About


Languages

Language:PHP 82.4%Language:Blade 16.3%Language:Shell 0.8%Language:JavaScript 0.5%