Code Monkey home page Code Monkey logo

tayron / servico-auto-complete Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 1002 KB

Serviço para cadastro de vendas de produtos por lojas, onde haverá um serviço para cadastro das vendas via api, outro que exibe a timeline das compras e um último serviço capaz de sincronizar com outra api, buscando as compras já realizadas e trazendo para base de dados;

Shell 3.09% PHP 91.10% TSQL 5.81%
autocomplete-search container docker elasticsearch mysql-database php7 slim-framework php-pdo-mysql

servico-auto-complete's Introduction

Serviço de Autocomplete

Serviço para cadastro de vendas de produtos por lojas, onde haverá um serviço para cadastro das vendas via api, outro que exibe a timeline das compras e um último serviço capaz de sincronizar com outra api, buscando as compras já realizadas e trazendo para base de dados;

Serviço de inserção de dados

Compreende os serguintes serviços:

  • GET (http://172.22.0.5/sales/sincronizacao): /sales/sincronizacao serviço que consome api com dados das compras e repassa as informações a api (http://172.22.0.5/sales) para armazenamento dos dados, servindo como uma interface de comunicação, intermediando dois serviços destintos e que pode ser configurado em um cron para ser executado de tempos em tempos.

  • POST (http://172.22.0.5/sales): /sales serviço que é usado para cadastrar vendas realizadas, pode ser informado para clientes que queiram se comunicar diretamente com a api ao invés de fornecer uma api com dados da compra.

  • GET (http://172.22.0.5/sales/timeline): /sales/timeline serviço que é usado para recuperar todo histórico de vendas por ordem de compra do mais novo para o mais velho.

Os serviços descritos acima rodam sobre um container PHP (autocomplete_sistema) que comunica com container do banco de dados MySQL (autocomplete_banco_dados) e grava os dados no serviço do Elasticsearch que se encontra no container (autocomplete_elasticsearch);

Serviço para consulta usado para criação de autocomplete

Comprende em uma única api: http://172.22.0.4/autocomplete?event=comprou (/autocomplete?event=comprou) onde após a query string (event=) pode ser passar o nome do evento da compra, podendo passar apenas parte do nome como co, com ou comprou-produto. O serviço só permitirá consulta de dados caso número de caracteres passados como parametros sejam maior que 1.

Instalação

Deve-se startar os container docker com comando "docker-compose up --build -d", os seguintes containers devem ser startados

CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
23a469569c1a        autocomplete_php_sistema                              "docker-php-entrypoi…"   3 seconds ago       Up 2 seconds        80/tcp, 9000/tcp         autocomplete_sistema
aeea1879a440        autocomplete_php_consulta                             "docker-php-entrypoi…"   5 minutes ago       Up 3 seconds        80/tcp, 9000/tcp         autocomplete_consulta_dados
ba6822ceb4ac        docker.elastic.co/elasticsearch/elasticsearch:6.5.4   "/usr/local/bin/dock…"   5 minutes ago       Up 3 seconds        9200/tcp, 9300/tcp       autocomplete_elasticsearch
7dcc14529b46        mysql:5.6                                             "docker-entrypoint.s…"   2 days ago          Up 4 seconds        3306/tcp                 autocomplete_banco_dados

Alt text

Deve-se acessar o container do mysql docker exec -it autocomplete_banco_dados bash

Acessar diretório database cd /database & mysql -u root -p projeto < script_criacao_banco.sql

Senha do banco de dados: root

Variavel de ambiente

Nos diretórios sistema e microservico_autocomplete deve-se alerar o arquivo .env com ip do container do elasticsearch, exemplo:

Local onde deve ser criado o arquivo .env:

microservico/.env
microservico_autocomplete/.env

Conteúdo do arquivo .env:

ELASTICSEARCH_ADDRESS=172.22.0.3
ELASTICSEARCH_PORT=9200

Testando aplicação

Inserindo dados através da api: POST http://172.22.0.5/sales enviando os dados como json

Alt text

{
    "events": [
        {
            "event": "comprou-produto",
            "timestamp": "2016-09-22T13:57:32.2311892-03:00",
            "custom_data": [
                {
                    "key": "product_name",
                    "value": "Camisa Azul"
                },
                {
                    "key": "transaction_id",
                    "value": "3029384"
                },
                {
                    "key": "product_price",
                    "value": 100
                }
            ]
        },
        {
            "event": "comprou",
            "timestamp": "2016-09-22T13:57:31.2311892-03:00",
            "revenue": 250,
            "custom_data": [
                {
                    "key": "store_name",
                    "value": "Patio Savassi"
                },
                {
                    "key": "transaction_id",
                    "value": "3029384"
                }
            ]
        },
        {
            "event": "comprou-produto",
            "timestamp": "2016-09-22T13:57:33.2311892-03:00",
            "custom_data": [
                {
                    "key": "product_price",
                    "value": 150
                },
                {
                    "key": "transaction_id",
                    "value": "3029384"
                },
                {
                    "key": "product_name",
                    "value": "Calça Rosa"
                }
            ]
        },
        {
            "event": "comprou-produto",
            "timestamp": "2016-10-02T11:37:35.2300892-03:00",
            "custom_data": [
                {
                    "key": "transaction_id",
                    "value": "3409340"
                },
                {
                    "key": "product_name",
                    "value": "Tenis Preto"
                },
                {
                    "key": "product_price",
                    "value": 120
                }
            ]
        },
        {
            "event": "comprou",
            "timestamp": "2016-10-02T11:37:31.2300892-03:00",
            "revenue": 120,
            "custom_data": [
                {
                    "key": "transaction_id",
                    "value": "3409340"
                },
                {
                    "key": "store_name",
                    "value": "BH Shopping"
                }
            ]
        }
    ]
}

A saída deverá ser {"flash":{},"message":"success"}

Registro inserido no banco de dados Alt text

Usando api de consulta usando filtro por evento: GET http://172.22.0.4/autocomplete?event=comprou-

Alt text

A saída deverá ser

{
    "flash": {},
    "message": [
        {
            "event": "comprou-produto",
            "timestamp": "2016-09-22T13:57:33.2311892-03:00",
            "product_price": 150,
            "transaction_id": 3029384,
            "product_name": "Calça Rosa"
        },
        {
            "event": "comprou-produto",
            "timestamp": "2016-10-02T11:37:35.2300892-03:00",
            "product_price": 120,
            "transaction_id": 3409340,
            "product_name": "Tenis Preto"
        },
        {
            "event": "comprou-produto",
            "timestamp": "2016-09-22T13:57:32.2311892-03:00",
            "product_price": 100,
            "transaction_id": 3029384,
            "product_name": "Camisa Azul"
        }
    ]
}

Usando a API para recuperar pipeline GET http://172.22.0.5/sales/timeline

Alt text

A saída deverá ser

{
    "flash": {},
    "message": {
        "timeline": [
            {
                "timestamp": "2016-10-02 11:37:35",
                "revenue": "120.00",
                "transaction_id": "3409340",
                "store_name": "BH Shopping",
                "products": [
                    {
                        "name": "Tenis Preto",
                        "price": "120.00"
                    }
                ]
            },
            {
                "timestamp": "2016-09-22 13:57:33",
                "revenue": "250.00",
                "transaction_id": "3029384",
                "store_name": "Patio Savassi",
                "products": [
                    {
                        "name": "Camisa Azul",
                        "price": "100.00"
                    },
                    {
                        "name": "Calça Rosa",
                        "price": "150.00"
                    }
                ]
            }
        ]
    }
}

URL para sincronização de informações onde se consulta dados de compra de uma outra api e cadastra localmente

GET http://172.22.0.5/sales/sincronizacao

A saída deverá ser

{"flash":{},"message":"success"}

Considerações

Para mais detalhes há um arquivo chamdao documentacao-api.json na raiz do projeto que trás mais detalhe de como fazer cada requisição.

Há um diretório chamado evidência com alguns prints dos testes realizados, como print de tabela de banco, testes realizados na api com Postman.

  • Requisito de segurança como autenticação para se usar as apis não foram considerados nesta stack

servico-auto-complete's People

Contributors

tayron avatar

Stargazers

 avatar

Watchers

 avatar

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.