How furkaanasik/courier-tracking-system works
Courier Tracking System accepts courier GPS updates, persists them, then asynchronously calculates travel distance and detects nearby-store entries with a re-entry cooldown. Its query APIs expose distance, location history, and store-entry logs; store data is loaded into Redis geospatial indexing. Event and query wiring is based on the README and sampled code; listener and startup-loader internals were not sampled, so uncertain implementation links are omitted.
Main entry points: CourierService.java Courier Service · CourierController.java Courier API · TrackingService.java Tracking Service · LocationReceivedEvent.java Location Event
Components 20
API and Queries
- Courier API
src/main/java/com/furkanasikdev/courier/tracking/controller/CourierController.java - Store API
src/main/java/com/furkanasikdev/courier/tracking/controller/StoreController.java - Courier Service
src/main/java/com/furkanasikdev/courier/tracking/service/CourierService.java - Store Service
src/main/java/com/furkanasikdev/courier/tracking/service/StoreService.java
Location Processing
- Tracking Service
src/main/java/com/furkanasikdev/courier/tracking/service/TrackingService.java - Location Event
src/main/java/com/furkanasikdev/courier/tracking/event/location/LocationReceivedEvent.java - Distance Listener
src/main/java/com/furkanasikdev/courier/tracking/event/location/listener/LocationDistanceListener.java - Distance Strategies
src/main/java/com/furkanasikdev/courier/tracking/calculation/distance/DistanceCalculationStrategy.java
Store Proximity
- Proximity Listener
src/main/java/com/furkanasikdev/courier/tracking/event/location/listener/LocationProximityListener.java - Proximity Service
src/main/java/com/furkanasikdev/courier/tracking/service/StoreProximityService.java - Entry Event
src/main/java/com/furkanasikdev/courier/tracking/event/store/StoreEntryEvent.java - Entry Listener
src/main/java/com/furkanasikdev/courier/tracking/event/store/listener/StoreEntryListener.java - Store Loader
src/main/java/com/furkanasikdev/courier/tracking/service/StoreLoaderService.java - Store Dataset
src/main/resources/stores.json
Persistence and Indexing
- Location Repository
src/main/java/com/furkanasikdev/courier/tracking/repository/CourierLocationRepository.java - Courier Repository
src/main/java/com/furkanasikdev/courier/tracking/repository/CourierRepository.java - Entry Repository
src/main/java/com/furkanasikdev/courier/tracking/repository/StoreEntryRepository.java - PostgreSQL
- Redis
Other components
- API Client
Connections 26
- API Client → Courier API: submits locations
- API Client → Store API: requests entries
- Courier API → Tracking Service: processes locations
- Courier API → Courier Service: queries courier
- Courier API → Store Service: queries entries
- Store API → Store Service: queries entries
- Tracking Service → Courier Service: creates courier
- Tracking Service → Location Repository: saves location
- Tracking Service → Location Event: publishes event
- Location Event → Distance Listener: dispatches
- Location Event → Proximity Listener: dispatches
- Distance Listener → Distance Strategies: calculates distance
- Distance Listener → Courier Service: adds distance
- Proximity Listener → Proximity Service: checks nearby stores
- Proximity Service → Redis: searches and checks cooldown
- Proximity Listener → Entry Event: publishes entry
- Entry Event → Entry Listener: dispatches
- Entry Listener → Entry Repository: saves entry
- Courier Service → Courier Repository: reads and saves courier
- Courier Service → Location Repository: reads history
- Store Service → Entry Repository: reads entries
- Location Repository → PostgreSQL: persists locations
- Courier Repository → PostgreSQL: persists couriers
- Entry Repository → PostgreSQL: persists entries
- Store Loader → Store Dataset: reads stores
- Store Loader → Redis: indexes stores