Git Product home page Git Product logo

travels-api's Introduction

travels-api

Uma API em Java e Spring Framework para gerenciamento de viagens.

Como a API deve funcionar?

Nossa API deve criar, atualizar, deletar e listar viagens. Além disso, deve calcular estatísticas sobre as viagens criadas. A API terá os seguintes endpoints:

POST/api-travels/travels: cria uma viagem. 

Body:

{ "id": 1, "orderNumber": "220788", "amount": "22.88", "startDate": "2019-09-11T09:59:51.312Z", "endDate": "2019-09-21T21:05:06.500Z", "type": "RETURN" }

Where:

id: número único da viagem; orderNumber: número de identificação da viagem no sistema. amount: valor da transação; deve ser uma String de tamanho arbitrário que pode ser parseada como um BigDecimal; startDate: data de início da viagem no formato ISO 8601 YYYY-MM-DDThh:mm:ss.sssZ no timezone local. endDate: data de fim da viagem no formato ISO 8601 YYYY-MM-DDThh:mm:ss.sssZ no timezone local. Pode ser nulo se a viagem é só de ida. type: se a viagem é somente de ida (ONE-WAY), ida e volta (RETURN) ou múltiplos destinos (MULTI-CITY).

Deve retornar com body vazio com um dos códigos a seguir:

  • 201: caso a viagem seja criada com sucesso.
  • 400: caso o JSON seja inválido.
  • 422: se qualquer um dos campos não for parseável ou se a data de início for mais ao futuro que a data final.
  • 500: erro no servidor (são raros)

PUT/api-travels/travels/{id}: atualiza uma viagem.

Body:

{ "orderNumber": "220788", "amount": "50.50", "startDate": "2019-09-11T09:59:51.312Z", "endDate": "2019-09-21T21:05:06.500Z", "type": "RETURN" }

Deve ser enviado o objeto que será modificado. O retorno deve ser o próprio objeto modificado.

{ "id": 1, "orderNumber": "220788", "amount": "50.50", "startDate": "2019-09-11T09:59:51.312Z", "endDate": "2019-09-21T21:05:06.500Z", "type": "RETURN" }

A resposta deve conter os códigos a seguir:

  • 200: em caso de sucesso.
  • 400: caso o JSON seja inválido.
  • 404: caso tentem atualizar um registro que não existe.
  • 422: se qualquer um dos campos não for parseável (JSON mal formatado).

GET/api-travels/travels: retorna todas as viagens criadas.

Deve retornar uma lista de viagens.

{ "id": 1, "orderCode": "220788", "amount": "22.88", "initialDate": "2019-09-11T09:59:51.312Z", "finalDate": "2019-09-21T21:05:06.500Z", "type": "RETURN" }, { "id": 2, "orderCode": "300691", "amount": "120.0", "initialDate": "2019–10–25T16:18:30.541Z", "type": "ONE-WAY" }

A resposta deve conter os códigos a seguir:

  • 200: caso exista viagens cadastradas
  • 404: caso não exista viagens criadas.

DELETE/api-travels/travels: remove todas as viagens.

Deve aceitar uma requisição com body vazio e retornar 204.

GET/api-travels/statistics: retorna estatísticas básicas sobre as viagens criadas.

{ "sum": "142.88", "avg": "71.44", "max": "120.0", "min": "22.88", "count": "2" }

Em que: sum: um BigDecimal especificando a soma total das viagens criadas. avg: um BigDecimal especificando a média dos valores das viagens criadas. max: um BigDecimal especificando o maior valor dentre as viagens criadas. min: um BigDecimal especificando o menor valor dentre as viagens criadas. count: um long especificando o número total de viagens.

Todos os campos que são BigDecimal devem ter apenas duas casas decimais, por exemplo: 15.385 deve ser retornado como 15.39.

Testes

  • Para executar o teste unitário, o comando executado deve ser:
mvn test
  • Para executar todos os testes (incluindo o de integração), o comando executado deve ser:
mvn integration-test

Execução

Para rodar a API via .jar:

java -jar travels-api-2.0.1.jar --spring.profiles.active=dev

ou

mvn spring-boot:run -Dspring.profiles.active=dev

Por default, a API está disponível no endereço http://localhost:8080/

travels-api's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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