Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/emirtotic/aviation-app

Aviation App
https://github.com/emirtotic/aviation-app

cache caffeine docker eureka flyway hibernate integrations jasperreports kafka mapstruct microservices mongodb mysql spring-boot

Last synced: about 2 months ago
JSON representation

Aviation App

Awesome Lists containing this project

README

        

Flight Management System

This project is a microservice application for managing flight data, including details on aircraft, airports, airlines, and historical aviation events for a specific date. It uses modern Java backend technologies to offer high flexibility and scalability.

Technologies and Skills Applied




  • Java 17: The primary programming language for implementing all services.


  • Spring Boot 2.7.4: The backbone of the microservice architecture with supporting modules:


    • Spring Data JPA for working with the MySQL database.


    • Spring Web for creating RESTful API endpoints.




  • MySQL and MongoDB: MySQL is used for storing data about aircraft and companies, while MongoDB stores airport information.


  • Kafka: Asynchronous communication between services for exchanging data across different microservices (flight-service, airport-service, plane-service, company-service, and aviation-events-service).


  • Eureka Server: For registering and discovering microservices.


  • Spring Cloud Gateway: Gateway server for centralized management of access to various services.


  • MapStruct: Used for object mapping within the code.


  • Flyway: Used for initializing data in the MySQL database at application startup.


  • Swagger (Springfox and Springdoc): API documentation for each microservice.


  • Unit Testing: JUnit 5 was used for test management, and Mockito was used for mocking dependencies.


  • Jsoup: Used for parsing HTML content and extracting historical events for a given date.


  • Jackson: For JSON data serialization and deserialization, with additional @JsonFormat configurations for date formats.


  • Email: Mailtrap is used for testing email functionality. Inbox link: https://mailtrap.io/inboxes/3047360/messages/4541834293


  • Lombok: Reduces boilerplate code in DTO classes by automatically generating getters and setters.

Microservice Structure




  • Plane Service: Collects and stores information about aircraft, including average plane speed, in a MySQL database.


  • Airport Service: Contains airport information, implemented with MongoDB, and allows for country-based searching. Data is integrated from an existing third-party API.


  • Company Service: Stores details about airlines and uses MySQL. It communicates asynchronously with the plane service to retrieve the company fleet’s aircraft.


  • Flight Service: Manages flight data and includes asynchronous calls to aviation-event-service to fetch historical events on the flight date, plane-service for aircraft data, company-service for company data, airport-service for departure and arrival airport information, and report-service to generate a PDF report on the created flight.


  • Aviation Event Service: Parses HTML from a specified website to obtain relevant aviation events for a particular date and sends information to a Kafka topic.


  • Report Service: Asynchronously collects the necessary data from the flight-service to create a Jasper report for the desired flight.

Key Features




  • Asynchronous Communication: Utilizes Kafka for efficient data exchange between various microservices.


  • Caffeine Cache: Optimizes performance and reduces database load.


  • Data Validation: Implemented format validation for dates in the FlightRequest DTO to prevent errors from incorrect dates.


  • Logging and Monitoring: Through Slf4j logging and Spring Boot Actuator to monitor service status.


  • Automated API Documentation: Swagger allows easy viewing and testing of all API endpoints.


  • Reporting: Generates customized reports on flights using JasperReports, including details on passengers, aircraft, airlines, and relevant historical events.

Conclusion


This project is a robust example of a microservice application focusing on performance, scalability, and ease of maintenance. Using modern technologies and best practices, the application is built to work with complex aviation industry data and provides a stable foundation for further development and customization according to specific business needs.