Skip to content

BrunoHenriqueSouza/uoltest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

Plano de publicacao

Sobre o projeto:
Todo o procedimento foi feito considerando uma máquina rodando o Ubuntu como sistema operacional.
O serviço foi desenvolvido na linguagem JAVA e utilizando o SpringBoot.
Para armazenar os dados, utilizamos o MySql. Optei por ele por ser um banco de dados muito utilizado, com uma grande comunidade e muita documentação disponível.

Pre-requisitos:
    Ter o Java 8 instalado
    Ter o git instalado: 
        - Comando: sudo apt-get install git

    Ter o maven instalado:
        - Comando: sudo apt-get install maven

    Ter o mysql 5 instalado:
        - Para instalar: sudo apt-get install mysql-server
        - Para configurar: sudo mysql_secure_installation
        - Para iniciar o serviço caso já não esteja: sudo systemctl start mysql

Configurações da publicação:
    Banco:
    Executar os scripts abaixo:
        - Criar o database: CREATE DATABASE client_admin;
        - Criar o usuario: CREATE USER 'appClientRegister'@'localhost' IDENTIFIED BY 'passAppClient2132';
        - Dar as permissões: GRANT ALL ON client_admin.* TO 'appClientRegister'@'localhost';

    Estrutura de pastas
        - Executar o comando sudo mkdir /projects/log/clientRegister
        - Dar permissão full para a pasta: sudo chmod 777 -R /projects

    Aplicação:

        O projeto se encontra em : https://github.com/BrunoHenriqueSouza/uoltest.git

        - Baixar o projeto do git em /home/<user>/projects
        - Acessar o diretório /home/<user>/projects/uoltest/clientRegister
        - Executar o comando do maven: mvn clean install
        - Após o build, executar: java -jar /home/<user>/projects/uoltest/clientRegister/target/clientRegister-0.0.1-SNAPSHOT.jar

Informações sobre os retornos dos serviços:

    /new :
        201 caso o servico de tudo certo
        422 caso tenhamos algum problema na criacao do cliente
        400 se o json for invalido

    /update
        200 caso a atualizacao ocorra com sucesso
        422 caso ocorra algum problema na atualizacao
        400 se o json for invalido

    /{id}
        200 caso encontre o cliente solicitado
        422 caso nao encontre

    /all
        200 caso encontre o cliente solicitado
        422 caso nao encontre

    /delete
        200 caso delete o cliente com sucesso
        422 caso ocorra algum erro

Testando a Aplicação
    Nesse ponto deixarei abaixo um conjuto de chamadas que podem ser executadas no console, mas também há um projeto do postman nos diretórios do projeto para facilitar os testes e deixa-los mais visuais.

    Teste 1 -   Consultando todos os clientes cadastrados:
    
                Chamada:    curl  -X GET \
                                http://localhost:8080/client/all \
                                -H 'cache-control: no-cache' \
                                -H 'postman-token: 993bcf69-c781-52c8-4484-2ed7ea56d98e'

                Resultado esperado: O status 201 com o json conforme abaixo:
                            {"errorCode":null,"message":null,"clients":[]}


    Teste 2 -   Vamos inserir o cliente João da Silva tendo 25 anos de idade:

                Chamada:    curl -X POST \
                                http://localhost:8080/client/new \
                                -H 'cache-control: no-cache' \
                                -H 'content-type: application/json' \
                                -H 'postman-token: d2954d6b-1f24-b7d7-f55f-90a37c020bc1' \
                                -H 'x-forwarded-for: 8.8.8.8' \
                                -d '{
                                    "client": {
                                        "name": "Joao da Silva",
                                        "age": 25
                                    }
                                }'

                Resultado esperado: O status 200 com o json conforme abaixo:
                            {"errorCode":null,"message":null,"client":{"clientId":1,"name":"Joao da Silva","age":25,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}}}

    Teste 3 -   Vamos consultar novamente todos os clientes cadastrados.

                Chamada:    curl -X GET \
                                http://localhost:8080/client/all \
                                -H 'cache-control: no-cache' \
                                -H 'postman-token: ef51ec00-337f-7245-0743-7b5a06f93546'

                Resultado esperado: O status 200 com o json conforme abaixo:
                            {"errorCode":null,"message":null,"clients":[{"clientId":1,"name":"Joao da Silva","age":25,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}}]}

    Teste 4 -   Vamos executar a api que busca por id do cliente.

                Chamada:    curl -X GET \
                                http://localhost:8080/client/1 \
                                -H 'cache-control: no-cache' \
                                -H 'postman-token: f3bf143a-4a9f-eec6-4874-b98b221ed3eb'

                Resultado esperado: O status 200 com o json conforme abaixo:
                            {"errorCode":null,"message":null,"client":{"clientId":1,"name":"Joao da Silva","age":25,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}}}

    Teste 5 -   Vamos cadastrar a Maria Aparecida com 19 anos de idade.

                Chamada:    curl -X POST \
                                http://localhost:8080/client/new \
                                -H 'cache-control: no-cache' \
                                -H 'content-type: application/json' \
                                -H 'postman-token: d2954d6b-1f24-b7d7-f55f-90a37c020bc1' \
                                -H 'x-forwarded-for: 8.8.8.8' \
                                -d '{
                                    "client": {
                                        "name": "Maria Aparecida",
                                        "age": 19
                                    }
                                }'

                Resultado esperado: O status 201 com o json conforme abaixo:
                            {"errorCode":null,"message":null,"client":{"clientId":3,"name":"Maria Aparecida","age":19,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}}}

    Teste 6 -   Vamos consultar novamente todos os clientes cadastrados.

                Chamada:    curl -X GET \
                                http://localhost:8080/client/all \
                                -H 'cache-control: no-cache' \
                                -H 'postman-token: ef51ec00-337f-7245-0743-7b5a06f93546'

                Resultado esperado: Um json conforme o abaixo:
                            {"errorCode":null,"message":null,"clients":[{"clientId":1,"name":"Joao da Silva","age":25,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}},{"clientId":3,"name":"Maria Aparecida","age":19,"weather":{"minTemp":"8.796666666666667","maxTemp":"15.729999999999999"}}]}

    Teste 7 -   Vamos deletar o João da Silva.

                Chamada:    curl -X DELETE \
                                http://localhost:8080/client/remove/1 \
                                -H 'cache-control: no-cache' \
                                -H 'postman-token: 65ef47b3-1aca-9d6e-7ba7-1d80d0f58f5d'

                Resultado esperado: O status 200 com o json conforme abaixo:
                            {"errorCode": null,"message": null,"client": null}
    
Rollback da publicação

    Banco de dados:
        - Conectar no banco e executar o script que irá excluir o novo database:
            DROP DATABASES client_admin.

    Aplicação:
        - Para parar sua execução basta encerrar o processo do java.
        


Instruções para publicação no ambiente de produção:

    Disponibilizar inicialmente, três dockers com sistema operacional Ubuntu.
        - Uma máquina terá a configuração de 4gb de memória e 20gb de espaço em disco.
            - Esta máquina deverá conter o mysql 5.7 instalado e já deve ter a configuração de backup dos dados.
            - Deverá estar configurada toda a rede para que as aplicações consigam acessar o banco.

        - Duas máquinas terão uma configuração de 2gb de memória e 6gb de espaço em disco.
            - Esta máquina será onde publicaremos o nosso serviço, então já deve ter instalado o java 8 e o maven.
            - Também deve-se mapear os ips que proverão o acesso aos serviços da aplicação.
            - Deve conter o mapeamento do banco de dados.
            - Essas máquinas deverão ser registradas em um load balancer e caso a quantidade de acessos seja muito alta, deveremos subir mais instâncias do nosso serviço para subir a demanda. 
              Quando os acessos foram normalizados, voltamos ao estado inicial de dois conteiners.

Próximos passos:
    - Implementar os testes automatizados dos serviços do cliente.
    - Alterar o serviço que busca todos os clientes para retornar o resultado paginado.
    - Melhorar os logs da aplicação.

About

Client registry project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages