How hgiang01/realtime-crowd-gis works
Realtime Crowd GIS is a WebGIS for updated civil infrastructure and community incident reporting in Thu Duc City. Citizens browse map data, submit geolocated reports with images, and track outcomes; administrators review, assign, resolve, and update reports with real-time notifications. The sampled backend confirms authentication, report validation, image storage, persistence, map access, Redis invalidation, and Kafka events. Some frontend API wiring and notification dispatch are inferred from named modules and documented capabilities rather than fully sampled source.
Components 27
Users
- Citizen
- Administrator
- OAuth Provider
Web Client
- Web App
frontend/src/App.tsx - Route Shell
frontend/src/router/AppRouter.tsx - Auth Screens
frontend/src/feature/auth - Report Screens
frontend/src/feature/report - Map Views
frontend/src/component/Map.tsx - API Client
frontend/src/api/axiosClient.ts - Realtime Client
frontend/src/api/websocket/WebSocketProvider.tsx
API and Security
- Auth API
backend/src/main/java/me/gianghn/realtimecrowdgis/controller/AuthController.java - Report API
backend/src/main/java/me/gianghn/realtimecrowdgis/controller/ReportController.java - Map API
backend/src/main/java/me/gianghn/realtimecrowdgis/controller/MapController.java - Feedback API
backend/src/main/java/me/gianghn/realtimecrowdgis/controller/FeedbackController.java - Auth Service
backend/src/main/java/me/gianghn/realtimecrowdgis/service/AuthService.java - OAuth Service
backend/src/main/java/me/gianghn/realtimecrowdgis/security/oauth2/OAuth2Service.java
Reporting and Maps
- Report Service
backend/src/main/java/me/gianghn/realtimecrowdgis/service/ReportService.java - Map Service
backend/src/main/java/me/gianghn/realtimecrowdgis/service/MapService.java - Content Filter
backend/src/main/java/me/gianghn/realtimecrowdgis/service/ContentFilterService.java - Image Storage
backend/src/main/java/me/gianghn/realtimecrowdgis/service/FileStorageService.java
Data and Events
- Report Repositories
backend/src/main/java/me/gianghn/realtimecrowdgis/repository - Redis Cache
- Kafka Topics
- Incident Consumer
backend/src/main/java/me/gianghn/realtimecrowdgis/kafka/consumer/IncidentEventConsumer.java - Incident Producer
backend/src/main/java/me/gianghn/realtimecrowdgis/kafka/producer/IncidentEventProducer.java - Google Storage
- Map Tile Service
backend/src/main/java/me/gianghn/realtimecrowdgis/client/MartinClient.java
Connections 31
- Citizen → Web App: uses
- Administrator → Web App: uses
- Web App → Route Shell: starts
- Web App → Realtime Client: provides context
- Route Shell → Auth Screens: routes
- Route Shell → Report Screens: routes
- Route Shell → Map Views: routes
- Auth Screens → API Client: requests
- Report Screens → API Client: requests
- Map Views → API Client: requests
- API Client → Auth API: calls
- API Client → Report API: calls
- API Client → Map API: calls
- API Client → Feedback API: calls
- Auth API → Auth Service: delegates
- OAuth Provider → OAuth Service: authenticates
- Auth Service → Report Repositories: reads users
- Auth Service → OAuth Service: supports OAuth
- Report API → Report Service: delegates
- Report Service → Content Filter: validates text
- Report Service → Image Storage: uploads images
- Report Service → Report Repositories: reads writes reports
- Report Service → Redis Cache: invalidates tiles
- Report Service → Incident Producer: publishes events
- Incident Producer → Kafka Topics: publishes
- Kafka Topics → Incident Consumer: delivers events
- Incident Consumer → Realtime Client: notifies users
- Image Storage → Google Storage: stores images
- Map API → Map Service: delegates
- Map Service → Map Tile Service: requests map data
- Map Service → Redis Cache: uses cache