Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gbzarelli/kart-race-importer

[JAVA] The 'Kart Race Importer' is a project to import data held in log files - Gympass technical challenge (approved)
https://github.com/gbzarelli/kart-race-importer

clean-architecture gradle java jdk13 kart kart-race-importer without-framework

Last synced: 9 days ago
JSON representation

[JAVA] The 'Kart Race Importer' is a project to import data held in log files - Gympass technical challenge (approved)

Awesome Lists containing this project

README

        

![Issues](https://img.shields.io/github/issues/gbzarelli/kart-race-importer.svg)
![Forks](https://img.shields.io/github/forks/gbzarelli/kart-race-importer.svg)
![Stars](https://img.shields.io/github/stars/gbzarelli/kart-race-importer.svg)
![Release Version](https://img.shields.io/github/release/gbzarelli/kart-race-importer.svg)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/36d0fe93fa554cca9a32561482d64a7b)](https://app.codacy.com/manual/gbzarelli/kart-race-importer?utm_source=github.com&utm_medium=referral&utm_content=gbzarelli/kart-race-importer&utm_campaign=Badge_Grade_Settings)
[![Coverage Status](https://coveralls.io/repos/github/gbzarelli/kart-race-importer/badge.svg?branch=master)](https://coveralls.io/github/gbzarelli/kart-race-importer?branch=master)

# Kart Race Importer [![CircleCI](https://circleci.com/gh/gbzarelli/kart-race-importer.svg?style=svg)](https://circleci.com/gh/gbzarelli/kart-race-importer)



The 'Kart Race Importer' is a project to import data held
in log files. These files contain information about a race
of kart, kept in a structural format of 'laps', where each lap
contains pilot information, time, lap and speed. The idea of the
project is to transcribe this information into complex data and
statistical information about a race. Java has been used as the
programming language with as few external dependencies as possible.

## Technologies

- [`Java/OpenJDK 13`](https://openjdk.java.net/projects/jdk/13/) - Java Development Kit 13
- [`jUnit5`](https://junit.org/junit5/) - Tests execution

### Note

The project has several points that could use resources such as libraries that however,
the project was developed with the idea of using the language's own resources
with the **minimum possible external dependencies**.

## Architecture

In this project the concept of Clean Architecture was used without modular separation;
The barriers are defined by the following packages in the order of least isolation for the most isolation;

- infrastructure
- application
- domain



## Data for import

The data folder to be imported is configured in the
`application.properties` that is stored in the project resources folder
`(src / main / resources)`, every Race file must follow a pattern
name so that the import recognizes the files, starting with year, month
and day all together.

Here's an example of a file to import:

```text
Hour Pilot No. Lap Lap Time Average lap speed
23:49:08.277 038 – F.MASSA 1 1:02.852 44,275
23:49:10.858 033 – R.BARRICHELLO 1 1:04.352 43,243
23:49:11.075 002 – K.RAIKKONEN 1 1:04.108 43,408
23:49:12.667 023 – M.WEBBER 1 1:04.414 43,202
23:49:30.976 015 – F.ALONSO 1 1:18.456 35,47
23:50:11.447 038 – F.MASSA 2 1:03.170 44,053
23:50:14.860 033 – R.BARRICHELLO 2 1:04.002 43,48
23:50:15.057 002 – K.RAIKKONEN 2 1:03.982 43,493
23:50:17.472 023 – M.WEBBER 2 1:04.805 42,941
23:50:37.987 015 – F.ALONSO 2 1:07.011 41,528
23:51:14.216 038 – F.MASSA 3 1:02.769 44,334
23:51:18.576 033 – R.BARRICHELLO 3 1:03.716 43,675
23:51:19.044 002 – K.RAIKKONEN 3 1:03.987 43,49
23:51:21.759 023 – M.WEBBER 3 1:04.287 43,287
23:51:46.691 015 – F.ALONSO 3 1:08.704 40,504
23:52:01.796 011 – S.VETTEL 1 3:31.315 13,169
23:52:17.003 038 – F.MASS 4 1:02.787 44,321
23:52:22.586 033 – R.BARRICHELLO 4 1:04.010 43,474
23:52:22.120 002 – K.RAIKKONEN 4 1:03.076 44,118
23:52:25.975 023 – M.WEBBER 4 1:04.216 43,335
23:53:06.741 015 – F.ALONSO 4 1:20.050 34,763
23:53:39.660 011 – S.VETTEL 2 1:37.864 28,435
23:54:57.757 011 – S.VETTEL 3 1:18.097 35,633
```

## Import

In the current import model, we can pass a specific date (Day, Month, Year)
and the system will fetch the edited folder the races of that date and
return a list of imported races.

## Import Model

When importing the file, a race model will be generated, through this
model we can extract various information such as:

- Classification by a driver:
- Best lap.
- Average speed.
- Time for the first.

- List of laps of the race:
- Number of the lap.
- Classification of the lap by pilot:
- Placement on lap
- Lap Information:
- Time.
- Lap time.
- Average speed.
- List the time difference for each rider ahead of you on the lap.
- Pilot
- Placement on lap
- Time
- Faster lap pilot:
- Placement on lap
- Time
- Average speed.

## Entry Point

Currently, I have not created a clear entry point for this project,
such as a REST or something like that. For test execution,
I have created a `Main.java` in the root of the `package ('br.com.helpdev.race')`
of the project so that execution can be done.

The `Main` class creates an instance of `ImporterService` and
executes `importRaces(date)`, the result is converted to JSON to verify it as an API.

```java
public class Main {

public static void main(final String[] args) {
final var main = new Main();
main.showRacesFrom(LocalDate.of(2019, Month.JUNE, 1));
}

private final ImporterFacade facade;

public Main() {
final var repository = new RaceLogFileRepository();
final var importer = new Importer(repository);
facade = new ImporterServiceImpl(importer);
}

private void showRacesFrom(final LocalDate localDate) {
RacesImported races = facade.importRaces(new ImportRaceByDate(localDate));
System.out.println(new Gson().toJson(races));
}
}
```

## Licence

[MIT](https://choosealicense.com/licenses/mit/)