Code Monkey home page Code Monkey logo

tech.challenge.parking.meter.api's Introduction

tech.challenge.energy.consumption


Este projeto foi feito com base no Tech Challenge da Fase 3 do curso de Arquitetura e Desenvolvimento em Java da FIAP


Sessões:


Ideia por trás do desafio

O desafio desta fase se baseia no desenvolvimento de uma nova solução para o Parquimetro, equipamento de controle de fluxo de alocações de veículos em lugares públicos. Apesar do simples conceito de implementação CRUD, a real dificuldade se apresenta nas palavras chave: Escalabilidade, Alta Disponibilidade e Rápido Processamento.

Para desenvolver então esse projeto, foram pensadas em Quatro entidades principais: o Parquimetro, o Estacionamento, o Extrato e o Veiculo.

O Parquimetro: Possui informações referentes a quantidade total de vagas disponíveis pela cidade, e o preço inicial da alocação.
O Estacionamento: Possui informações referentes ao total de vagas alocadas pela cidade em tempo real, total de vagas disponíveis pela cidade em tempo real e total de carros e motos alocados em tempo real.
O Extrato: Possui informações referentes ao momento de entrada e saída do veículo do local de estacionamento, tempo de estacionamento contratado e valor a pagar
O Veiculo: Possui informações referentes a identificação do veículo e de seu dono.


Relatório Técnico

Com o auxílo de migrations através da biblioteca Flyway, as entidades foram construídas e refatoradas múltiplas vezes no banco de dados sem nenhuma necessidade de ação manual. Isso combinado com a configuração da aplicação num DockerFile, mais um arquivo docker-compose.yml, tornaram a aplicação N vezes mais prática e rápida de ser construída.

Outra biblioteca utilizada foi o Caelum Stella Validator, de forma muito prática, auxiliou na contrução de validações para o registro de CPFs e CNPJs na aplicação.

Levando em consideração as palavras chave mencionadas na seção anterior, a inovação nessa aplicação se veio pelo uso do RabbitMQ. Com fácil implementação e ótima compatibilidade com o Spring, essa ferramenta de mensageria foi utilizada para a geração do Extrato a partir das informações de alocação e veículo. O uso dessa ferramenta, poderia, em uma continuação deste projeto por exemplo, executar diversas features de acordo com a necessidade, como o Envio de Email com o Extrato para o Dono do Veículo, Pagamento Automático, etc.

Neste projeto, as únicas entidade que tiveram um relacionamento direto construído no banco de dados foram o Estacionamento e o Extrato. Apesar disso, a Placa do Veículo serve como atributo que une as três entidades.

Nota: Todos os endpoints "findAll()" possuem suporte para filtro de qualquer um dos campos da entidade requerida, mas se optar por testá-lo sem filtros, é só chamá-lo sem passar nenhum parâmetro!

Para testar a API, decidi utilizar o Insomnia ao invés do Postman apenas pelo costume, sinto que é uma ferramenta mais leve e simples de configurar. A coleção de testes utilizados na aplicação se encontra presente neste repositório, no arquivo insomnia-collection.json

Para rodar a aplicação localmente, foi criado um docker-compose, que se encontra neste mesmo repositório.
Ao iniciar a aplicação, acesse o link http://localhost:8080/swagger-ui/index.html#/ para visualizar o Swagger, contendo a documentação dos endpoints desenvolvidos

tech.challenge.parking.meter.api's People

Contributors

henriquemt13 avatar henriquemt1312 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.