RouteMind is an intermediate delivery integration microservice designed for e-commerce web applications. It provides a unified API to interact with multiple delivery providers (BlueDart, DTDC, FedEx), enabling seamless order creation, tracking, serviceability checks, and cost estimation. This service acts as a middleware layer, abstracting the complexities of different provider APIs and offering a consistent interface for e-commerce platforms.
As a computer science graduate seeking an internship, this project demonstrates proficiency in Java, Spring Boot, microservices architecture, API integration, database management, and software design patterns.
- ๐ฆ Order Management: Create and retrieve orders with external order IDs for integration with e-commerce platforms.
- ๐ Shipment Tracking: Real-time tracking of shipments across multiple providers with historical event logging.
- ๐ Serviceability Checks: Verify if delivery is possible between pickup and delivery locations, providing available options.
- ๐ฐ Cost Estimation: Calculate shipping costs based on weight, distance, service type, and COD charges using provider rate cards.
- ๐ข Multi-Provider Support: Integrated adapters for BlueDart, DTDC, and FedEx with extensible architecture for additional providers.
- ๐ Webhook Integration: Receive real-time status updates from providers via webhooks and update internal tracking events.
- ๐ RESTful API: Well-structured REST endpoints with consistent response formats.
- ๐ API Documentation: Swagger/OpenAPI documentation for easy API exploration and testing.
- ๐๏ธ Database Integration: JPA-based persistence with MySQL for orders, shipments, tracking events, and rate cards.
- ๐ Object Mapping: MapStruct for type-safe and performant object-to-object mapping.
- ๐ก๏ธ Error Handling: Comprehensive exception handling with custom error responses.
- ๐ Logging: Structured logging throughout the application for debugging and monitoring.
- โ Validation: Input validation using Bean Validation annotations.
- ๐ Transaction Management: Proper transaction handling for data consistency.
- โ Language: Java 21
- ๐ฑ Framework: Spring Boot 4.0.1
- ๐๏ธ Database: MySQL
- ๐จ Build Tool: Maven
- ๐ Documentation: SpringDoc OpenAPI (Swagger)
- ๐ Object Mapping: MapStruct
- ๐ HTTP Client: Retrofit with OkHttp
- โ๏ธ Reactive Programming: Spring WebFlux (WebClient)
- ๐ Other Libraries:
- Lombok (for reducing boilerplate code)
- Spring Boot Starter Web (for REST APIs)
- Spring Boot Starter Data JPA (for database operations)
- Spring Boot Starter Validation (for input validation)
- Spring Boot Starter Actuator (for monitoring and health checks)
graph TB
subgraph Language["Language & Runtime"]
Java["Java 21"]
end
subgraph Framework["Framework & Web"]
SpringBoot["Spring Boot 4.0.1"]
SpringWeb["Spring Web"]
SpringJPA["Spring Data JPA"]
SpringValidation["Spring Validation"]
SpringActuator["Spring Actuator"]
end
subgraph Database["Database"]
MySQL["MySQL Database"]
JPA["JPA ORM"]
end
subgraph ApiIntegration["API Integration"]
Retrofit["Retrofit HTTP Client"]
OkHttp["OkHttp"]
WebClient["Spring WebClient"]
end
subgraph Utilities["Utilities & Libraries"]
Lombok["Lombok"]
MapStruct["MapStruct"]
Swagger["SpringDoc OpenAPI<br/>Swagger UI"]
end
Java -->|runs| SpringBoot
SpringBoot -->|uses| SpringWeb
SpringBoot -->|uses| SpringJPA
SpringBoot -->|uses| SpringValidation
SpringBoot -->|uses| SpringActuator
SpringJPA -->|access| JPA
JPA -->|connect| MySQL
SpringBoot -->|uses| Retrofit
Retrofit -->|uses| OkHttp
SpringBoot -->|uses| WebClient
SpringBoot -->|uses| Lombok
SpringBoot -->|uses| MapStruct
SpringBoot -->|documents| Swagger
src/
โโโ main/
โ โโโ java/
โ โ โโโ com/example/RouteMind/
โ โ โโโ RouteMindApplication.java # Main Spring Boot application class
โ โ โโโ adapter/ # Adapter pattern for provider integrations
โ โ โ โโโ DeliveryProviderAdapter.java # Interface for provider adapters
โ โ โ โโโ implementation/ # Concrete adapter implementations
โ โ โ โโโ BlueDartAdapter.java
โ โ โ โโโ DtdcAdapter.java
โ โ โ โโโ FedexAdapter.java
โ โ โโโ client/ # External API clients
โ โ โ โโโ fedex/
โ โ โ โโโ FedexApiClient.java # Retrofit-based FedEx API client
โ โ โ โโโ dto/ # Data transfer objects for FedEx API
โ โ โโโ config/ # Configuration classes
โ โ โ โโโ ClientConfiguration.java
โ โ โ โโโ FedexProperties.java
โ โ โโโ constants/ # Application constants
โ โ โ โโโ ApiConstants.java
โ โ โ โโโ MapperConstants.java
โ โ โโโ controller/ # REST controllers
โ โ โ โโโ OrderController.java
โ โ โ โโโ ServiceabilityController.java
โ โ โ โโโ TrackingController.java
โ โ โ โโโ WebhookController.java
โ โ โโโ dto/ # Data transfer objects
โ โ โ โโโ Request/ # Request DTOs
โ โ โ โโโ Response/ # Response DTOs
โ โ โโโ entity/ # JPA entities
โ โ โ โโโ DeliveryProvider.java
โ โ โ โโโ Order.java
โ โ โ โโโ OrderDimensions.java
โ โ โ โโโ RateCard.java
โ โ โ โโโ Serviceability.java
โ โ โ โโโ Shipment.java
โ โ โ โโโ TrackingEvent.java
โ โ โโโ enums/ # Enumeration classes
โ โ โ โโโ DeliveryStatus.java
โ โ โ โโโ PaymentMode.java
โ โ โ โโโ ProductCategory.java
โ โ โ โโโ ProviderCode.java
โ โ โ โโโ ProviderTag.java
โ โ โ โโโ ServiceType.java
โ โ โ โโโ TransportMode.java
โ โ โ โโโ WeightUnit.java
โ โ โโโ exception/ # Custom exceptions
โ โ โ โโโ GlobalExceptionHandling.java
โ โ โ โโโ OrderNotFoundException.java
โ โ โ โโโ ProviderException.java
โ โ โ โโโ RouteMindException.java
โ โ โโโ factory/ # Factory pattern for adapters
โ โ โ โโโ ProviderFactory.java
โ โ โโโ mapper/ # Object mapping utilities using MapStruct
โ โ โ โโโ AppModelMapper.java
โ โ โโโ repository/ # JPA repositories
โ โ โ โโโ DeliveryProviderRepository.java
โ โ โ โโโ OrderRepository.java
โ โ โ โโโ RateCardRepository.java
โ โ โ โโโ ServiceabilityRepository.java
โ โ โ โโโ ShipmentRepository.java
โ โ โ โโโ TrackingEventRepository.java
โ โ โโโ service/ # Business logic services
โ โ โโโ EstimationService.java
โ โ โโโ OrderDataAccessService.java
โ โ โโโ OrderService.java
โ โ โโโ ServiceabilityService.java
โ โ โโโ TrackingService.java
โ โโโ resources/
โ โโโ application.yml # Application configuration
โโโ test/
โโโ java/
โโโ com/example/RouteMind/
โโโ RouteMindApplicationTests.java # Basic test class
RouteMind follows a layered architecture with clear separation of concerns:
- Controller Layer: Handles HTTP requests and responses, delegates to services.
- Service Layer: Contains business logic, orchestrates operations across multiple components.
- Repository Layer: Manages data persistence using Spring Data JPA.
- Adapter Layer: Implements the Adapter pattern for integrating with different delivery providers.
- Client Layer: Contains HTTP clients for external API integrations (e.g., FedEx API).
- Adapter Pattern: For provider-specific integrations
- Factory Pattern: For creating provider adapters dynamically
- Repository Pattern: For data access abstraction
- DTO Pattern: For data transfer between layers
- Builder Pattern: For constructing complex objects
graph TB
subgraph Client["Client Layer"]
WebApp["E-Commerce Web Application"]
end
subgraph API["API Gateway Layer"]
REST["REST API Endpoints"]
end
subgraph Controllers["Controller Layer"]
OrderCtrl["OrderController"]
ServiceCtrl["ServiceabilityController"]
TrackCtrl["TrackingController"]
WebhookCtrl["WebhookController"]
end
subgraph Services["Business Logic Layer"]
OrderSvc["OrderService"]
ServiceabilitySvc["ServiceabilityService"]
TrackingSvc["TrackingService"]
EstimationSvc["EstimationService"]
DataAccessSvc["OrderDataAccessService"]
end
subgraph Adapters["Adapter Pattern Layer"]
AdapterInterface["DeliveryProviderAdapter<br/>Interface"]
BlueDartImpl["BlueDartAdapter"]
DtdcImpl["DtdcAdapter"]
FedexImpl["FedexAdapter"]
end
subgraph ExternalAPIs["External APIs"]
BlueDartAPI["BlueDart API"]
DtdcAPI["DTDC API"]
FedexAPI["FedEx API"]
end
subgraph Persistence["Data Persistence Layer"]
Repos["Repository Layer<br/>JPA Repositories"]
MySQL["MySQL Database"]
end
WebApp -->|HTTP| REST
REST --> Controllers
OrderCtrl --> OrderSvc
ServiceCtrl --> ServiceabilitySvc
TrackCtrl --> TrackingSvc
WebhookCtrl --> TrackingSvc
OrderSvc --> AdapterInterface
ServiceabilitySvc --> AdapterInterface
TrackingSvc --> AdapterInterface
EstimationSvc --> Repos
DataAccessSvc --> Repos
AdapterInterface --> BlueDartImpl
AdapterInterface --> DtdcImpl
AdapterInterface --> FedexImpl
BlueDartImpl --> BlueDartAPI
DtdcImpl --> DtdcAPI
FedexImpl --> FedexAPI
OrderSvc --> DataAccessSvc
TrackingSvc --> DataAccessSvc
Repos --> MySQL
graph TB
subgraph Client["Service Layer"]
OrderService["OrderService<br/>ServiceabilityService<br/>TrackingService"]
end
subgraph AdapterPattern["Adapter Pattern Implementation"]
AdapterInterface["<<Interface>><br/>DeliveryProviderAdapter<br/>---<br/>+ checkServiceability()<br/>+ calculateRate()<br/>+ createShipment()<br/>+ trackShipment()<br/>+ cancelShipment()"]
subgraph Implementations["Concrete Implementations"]
BlueDart["BlueDartAdapter<br/>---<br/>+ getProviderCode()<br/>+ checkServiceability()<br/>+ calculateRate()<br/>+ createShipment()<br/>+ trackShipment()"]
Dtdc["DtdcAdapter<br/>---<br/>+ getProviderCode()<br/>+ checkServiceability()<br/>+ calculateRate()<br/>+ createShipment()<br/>+ trackShipment()"]
Fedex["FedexAdapter<br/>---<br/>+ getProviderCode()<br/>+ checkServiceability()<br/>+ calculateRate()<br/>+ createShipment()<br/>+ trackShipment()"]
end
end
subgraph Factory["Factory Pattern"]
ProviderFactory["ProviderFactory<br/>---<br/>+ getAdapter(ProviderCode)<br/>Returns appropriate adapter<br/>based on provider code"]
end
OrderService -->|uses| ProviderFactory
ProviderFactory -->|instantiates| AdapterInterface
AdapterInterface -->|implements| BlueDart
AdapterInterface -->|implements| Dtdc
AdapterInterface -->|implements| Fedex
BlueDart -.->|calls| BlueDartAPI["BlueDart API"]
Dtdc -.->|calls| DtdcAPI["DTDC API"]
Fedex -.->|calls| FedexAPI["FedEx API"]
graph TB
Orders["ORDERS<br/>---<br/>id (PK)<br/>external_order_id<br/>status<br/>pickup_address<br/>delivery_address<br/>created_at<br/>updated_at"]
Shipments["SHIPMENTS<br/>---<br/>id (PK)<br/>order_id (FK)<br/>provider_id (FK)<br/>tracking_id<br/>status<br/>estimated_delivery<br/>actual_delivery"]
TrackingEvents["TRACKING_EVENTS<br/>---<br/>id (PK)<br/>shipment_id (FK)<br/>status<br/>location<br/>description<br/>timestamp<br/>source"]
Providers["DELIVERY_PROVIDERS<br/>---<br/>id (PK)<br/>provider_code<br/>provider_tag<br/>name<br/>api_key<br/>api_secret"]
RateCards["RATE_CARDS<br/>---<br/>id (PK)<br/>provider_id (FK)<br/>service_type<br/>origin<br/>destination<br/>base_price<br/>weight_slab<br/>price_per_kg"]
Serviceability["SERVICEABILITY<br/>---<br/>id (PK)<br/>provider_id (FK)<br/>origin<br/>destination<br/>is_serviceable<br/>service_types"]
OrderDimensions["ORDER_DIMENSIONS<br/>---<br/>id (PK)<br/>order_id (FK)<br/>length<br/>width<br/>height<br/>weight<br/>weight_unit"]
Orders -->|1:N| Shipments
Shipments -->|N:1| Providers
Shipments -->|1:N| TrackingEvents
Providers -->|1:N| RateCards
Providers -->|1:N| Serviceability
Orders -->|1:1| OrderDimensions
POST /api/v1/orders- Create a new orderGET /api/v1/orders/{id}- Get order by internal IDGET /api/v1/orders/external/{externalOrderId}- Get order by external ID
GET /api/v1/tracking/{trackingId}- Track shipment by tracking ID
POST /api/v1/serviceability- Check delivery serviceability and get options
POST /api/v1/webhooks/bluedart- Receive BlueDart status updatesPOST /api/v1/webhooks/delhivery- Receive Delhivery status updatesPOST /api/v1/webhooks/dtdc- Receive DTDC status updatesPOST /api/v1/webhooks/fedex- Receive FedEx status updates
graph TB
subgraph Container["RouteMind API v1"]
subgraph Orders["Orders API<br/>/api/v1/orders"]
Create["POST /<br/>Create Order"]
GetById["GET /{id}<br/>Get by ID"]
GetByExtId["GET /external/{extId}<br/>Get by External ID"]
end
subgraph Serviceability["Serviceability API<br/>/api/v1/serviceability"]
CheckService["POST /check<br/>Check if serviceable"]
end
subgraph Tracking["Tracking API<br/>/api/v1/tracking"]
Track["GET /{trackingId}<br/>Track Shipment"]
end
subgraph Webhooks["Webhooks<br/>/api/v1/webhooks"]
ShipmentStatus["POST /shipment-status<br/>Handle Status Update"]
Delivery["POST /delivery<br/>Handle Delivery Update"]
end
end
Client["E-Commerce App"] -->|REST| Container
Providers["Delivery Providers"] -->|Webhooks| Webhooks
- โ Java 21 or higher
- ๐จ Maven 3.6+
- ๐๏ธ MySQL 8.0+
-
๐ฅ Clone the repository:
git clone https://github.com/amanxdeep/route-mind.git cd route-mind -
โ๏ธ Configure the database:
- Create a MySQL database named
routemind_db - Update
src/main/resources/application.ymlwith your database credentials
- Create a MySQL database named
-
๐ง Configure FedEx API (optional):
- Obtain FedEx API credentials
- Update the
fedexsection inapplication.yml
-
๐จ Build the application:
./mvnw clean compile
Note: The project uses MapStruct for object mapping, which requires annotation processing during compilation. The Maven compiler plugin is configured to include Lombok and MapStruct processors.
-
โถ๏ธ Run the application:./mvnw spring-boot:run
-
๐ Access the application:
- API Base URL:
http://localhost:8080/route-mind - Swagger Documentation:
http://localhost:8080/route-mind/swagger-ui.html
- API Base URL:
Key configuration properties in application.yml:
- Server: Port 8080, context path
/route-mind - Database: MySQL connection details
- JPA: Hibernate settings with SQL logging
- FedEx: API credentials and endpoints
The application uses the following main entities:
- Order: Represents customer orders
- Shipment: Links orders to provider shipments
- TrackingEvent: Stores tracking history
- RateCard: Provider pricing information
- Serviceability: Delivery availability by pincode
- DeliveryProvider: Provider configuration
The application includes Spring Boot Actuator for monitoring:
- Health checks:
/actuator/health - Metrics:
/actuator/metrics - Info:
/actuator/info
- Complete implementation of BlueDart and DTDC API integrations
- Add more delivery providers
- Implement rate limiting and circuit breakers
- Add comprehensive unit and integration tests
- Implement authentication and authorization
- Add message queuing for better webhook handling
- Implement caching strategies for improved performance
This project demonstrates key software engineering concepts suitable for internship applications:
- Clean architecture and separation of concerns
- Design patterns implementation
- RESTful API design
- Database design and ORM usage
- External API integration
- Error handling and logging
- Configuration management
This project is for educational and portfolio purposes.
Amandeep Kumar
Computer Science Graduate | Backend Developer | Microservices Enthusiast
For questions or issues, please:
- Check the troubleshooting section
- Review application logs
- Create an issue on GitHub
Last Updated: April 2026
Current Version: 0.0.1-SNAPSHOT