API de Serviço de kart para coleta de resultados.
Com base em um arquivo de log, contendo a volta de cada piloto, descobrir o resultado da corrida.
Solução do problema descrito em interview-test
- O arquivo de log contendo as corridas deve estar separados por
tab
e com o seguinte layout
|Hora |Piloto |NºVolta|TempoVolta|VelocidadeMediaVolta|
|------------|-----------|-------|----------|--------------------|
|10:50:00.850|032 - Senna| 1| 1:09.009| 50,60|
- A corrida deve começar e terminar no mesmo dia
- O vencedor é o piloto que completar primeiro a 4ª volta
- O piloto com mesmo código, mas com nome diferente, não é considerado um outro piloto
Para executar no ambiente de desenvolvimento utilizar comando sbt
e abrir no navegador o endereço http://localhost:9000
$ sbt run
# ...
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
$ sbt test
Retorna informações sobre a api.
{
"builtAtMillis": "1570304458577",
"name": "kart-service",
"scalaVersion": "2.13.0",
"version": "1.0-SNAPSHOT",
"builtAtString": "2019-10-05 19:40:58.577"
}
Cria uma nova corrida e retorna informações sobre cada volta de cada piloto.
Request:
Enviar um arquivo .log
através através do formato multipart/form-data
:
<form action="/races" method="POST" enctype="multipart/form-data">
<input type="file" name="laps.log" />
<button>Submit</button>
</form>
Response:
{
"id": "7cead28b-db99-4e6d-882a-c3f2de312dad",
"drivers": [
{
"id": "015",
"name": "F.ALONSO",
"laps": [
{
"timestamp": "23:49:30.976",
"driverId": "015",
"driverName": "F.ALONSO",
"lapNumber": 1,
"lapTime": "00:01:18.456",
"averageSpeed": 35.47
}
]
}
]
}
Retorna o resultado de uma corrida.
{
"id": "7cead28b-db99-4e6d-882a-c3f2de312dad",
"results": [
{
"position": 0,
"driverId": "038",
"driverName": "F.MASSA",
"lapNumber": 4,
"duration": "00:04:11.578",
"gapTime": "-"
},
{
"position": 1,
"driverId": "002",
"driverName": "K.RAIKKONEN",
"lapNumber": 4,
"duration": "00:04:15.153",
"gapTime": "00:00:05.117"
}
]
}
Retorna a melhor volta de uma corrida.
{
"timestamp": "23:51:14.216",
"driverId": "038",
"driverName": "F.MASSA",
"lapNumber": 3,
"lapTime": "00:01:02.769",
"averageSpeed": 44.334
}
Retorna a melhor volta de cada piloto de uma corrida.
{
"fastestLaps": [
{
"timestamp": "23:50:37.987",
"driverId": "015",
"driverName": "F.ALONSO",
"lapNumber": 2,
"lapTime": "00:01:07.011",
"averageSpeed": 41.528
},
{
"timestamp": "23:51:18.576",
"driverId": "033",
"driverName": "R.BARRICHELLO",
"lapNumber": 3,
"lapTime": "00:01:03.716",
"averageSpeed": 43.675
}
]
}
Retorna a velocidade média de cada piloto de uma corrida.
{
"averageSpeed": [
{
"driverId": "015",
"driverName": "F.ALONSO",
"averageSpeed": 38.06625
},
{
"driverId": "033",
"driverName": "R.BARRICHELLO",
"averageSpeed": 43.467999999999996
}
]
}