Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rapter1990/couriertracking
Case Study - Courier Tracking (Kotlin, Spring Boot, Mapstruct, JUnit Tests, Integration Tests, Docker, CI/CD - Github Actions, Gradle)
https://github.com/rapter1990/couriertracking
docker docker-compose dockerfile github-actions gradle integration-test junit kotlin mapstruct mysql openapi postman spring-boot testcontainer
Last synced: about 1 month ago
JSON representation
Case Study - Courier Tracking (Kotlin, Spring Boot, Mapstruct, JUnit Tests, Integration Tests, Docker, CI/CD - Github Actions, Gradle)
- Host: GitHub
- URL: https://github.com/rapter1990/couriertracking
- Owner: Rapter1990
- Created: 2024-07-26T07:37:59.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-07-31T05:30:21.000Z (6 months ago)
- Last Synced: 2024-12-17T09:24:29.486Z (about 1 month ago)
- Topics: docker, docker-compose, dockerfile, github-actions, gradle, integration-test, junit, kotlin, mapstruct, mysql, openapi, postman, spring-boot, testcontainer
- Language: Kotlin
- Homepage:
- Size: 3.75 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Case Study - Courier Tracking (Spring Boot - Kotlin)
### 📖 Information
- This project demonstrates a Spring Boot application for managing courier travel data. It logs courier locations, tracks travel distances, and manages interactions with stores within a specific radius.
- The application incorporates various design patterns including Facade, Builder, and Strategy patterns, and provides endpoints for logging locations, retrieving travel data, and querying total travel distances.
- Logging Courier Locations:
- The application logs a courier's location details (time, latitude, longitude) whenever they enter within a 100-meter radius of a Store.
- Reentries within one minute to the same store are not counted.
- Querying Travel Data:
- It provides endpoints to retrieve past travel data of couriers.
- Includes filtering by store name and time range.
- Calculating Travel Distances:
- The application can calculate and return the total travel distance covered by a courier.
### Explore Rest APIs
Endpoints Summary
Method
Url
Description
Request Body
Path Variable
Response
POST
/api/couriers/log-location
Log courier's location.
LogCourierLocationRequest
None
CustomResponse<String>
GET
/api/couriers/travels/{courierId}
Get past travels of a courier by courier ID.
None
courierId (UUID)
CustomResponse<List<CourierResponse>>
GET
/api/couriers/travels
Get travels of a courier by courier ID, store name, and time range.
TravelQueryRequest
None
CustomResponse<List<CourierResponse>>
GET
/api/couriers/travels/{courierId}/total-distance
Get total travel distance of a courier by courier ID.
None
courierId (UUID)
CustomResponse<String>
### Technologies
---
- Kotlin
- Spring Boot 3.0
- Restful API
- Mapstruct
- Open Api (Swagger)
- Gradle
- Junit5
- Mockito
- Integration Tests
- Docker
- Docker Compose
- CI/CD (Github Actions)
- Postman
- TestContainer
- MySQL
### Postman
```
Import postman collection under postman_collection folder
```
### Prerequisites
#### Define Variable in .env file for product service and user service
```
DATABASE_USERNAME={DATABASE_USERNAME}
DATABASE_PASSWORD={DATABASE_PASSWORD}
```
### Open Api (Swagger)
```
http://localhost:1231/swagger-ui/index.html
```
---
- Gradle or Docker
---
### Docker Run
The application can be built and run by the `Docker` engine. The `Dockerfile` has multistage build, so you do not need to build and run separately.
Please follow directions shown below in order to build and run the application with Docker Compose file;
```sh
$ cd couriertracking
$ docker-compose up -d
```
If you change anything in the project and run it on Docker, you can also use this command shown below
```sh
$ cd couriertracking
$ docker-compose up --build
```
---
### Gradle Run
To build and run the application with `Gradle`, please follow the directions shown below;
```sh
$ cd couriertracking
$ ./gradlew clean build
$ ./gradlew bootRun
```
---
### Docker Image Location
```
https://hub.docker.com/repository/docker/noyandocker/couriertracking/general
```
### Screenshots
Click here to show the screenshots of project
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
Figure 7
Figure 8
Figure 9
Figure 10
### Contributors
- [Sercan Noyan GermiyanoÄŸlu](https://github.com/Rapter1990)