How hemantmishra-lab/civicplus-microservices works
Purpose and entry points
CivicPlus is a civic grievance platform: citizens submit complaints; staff assign, update, escalate, notify, and analyze them. It is a Java 21/Spring Boot microservice system with a React/Vite client. External traffic enters the gateway; local full-stack startup is defined by docker-compose.yml. Primary runtime entry points are api-gateway/src/main/java/com/hemant/civicplus/apigateway/ApiGatewayApplication.java and frontend/src/main.jsx.
Edge, discovery, and configuration
Spring Cloud Gateway provides the single public REST perimeter, route selection, and CORS handling through api-gateway/src/main/resources/application.yml and api-gateway/src/main/java/com/hemant/civicplus/apigateway/config/CorsConfig.java. Eureka provides dynamic service registration/discovery from discovery-server/src/main/java/com/hemant/civicplus/discoveryserver/DiscoveryServerApplication.java. Central configuration is hosted by config-server/src/main/java/com/hemant/civicplus/configserver/ConfigServerApplication.java; service-local application.yml files remain deployment boundaries.
Identity and authorization
Auth owns registration, login, OTP/password recovery, refresh tokens, users, and roles, exposed by auth-service/src/main/java/com/hemant/civicplus/authservice/controller/AuthController.java and orchestrated in auth-service/src/main/java/com/hemant/civicplus/authservice/application/AuthService.java. Each protected service contains its own JWT filter/security configuration, making token validation decentralized; representative paths are auth-service/src/main/java/com/hemant/civicplus/authservice/security/SecurityConfig.java and complaint-service/src/main/java/com/hemant/civicplus/complaintservice/security/JwtAuthFilter.java.
Core complaint lifecycle
Complaint Service is the transactional system of record for creation, assignment, status changes, escalation, image references, and status history. Its API/application boundary is complaint-service/src/main/java/com/hemant/civicplus/complaintservice/controller/ComplaintController.java and complaint-service/src/main/java/com/hemant/civicplus/complaintservice/application/ComplaintService.java; persisted lifecycle data is modeled in complaint-service/src/main/java/com/hemant/civicplus/complaintservice/domain/Complaint.java and complaint-service/src/main/java/com/hemant/civicplus/complaintservice/domain/StatusHistory.java. It can make synchronous REST calls via its RestTemplate configuration, but downstream updates are primarily asynchronous.
Supporting business ownership
User profiles, including nearest-officer lookup and avatar metadata, belong to User Service: user-service/src/main/java/com/hemant/civicplus/userservice/application/UserService.java and user-service/src/main/java/com/hemant/civicplus/userservice/domain/UserProfile.java. Department Service owns departments and officers (department-service/src/main/java/com/hemant/civicplus/departmentservice/application/DepartmentService.java, department-service/src/main/java/com/hemant/civicplus/departmentservice/domain/Officer.java). Media Service isolates object upload/download behind media-service/src/main/java/com/hemant/civicplus/mediaservice/controller/MediaController.java and MinIO integration in media-service/src/main/java/com/hemant/civicplus/mediaservice/config/MinioConfig.java.
Event, notification, and analytics pipeline
Complaint Service publishes lifecycle events through complaint-service/src/main/java/com/hemant/civicplus/complaintservice/kafka/ComplaintEventPublisher.java to Kafka. Notification Service consumes them in notification-service/src/main/java/com/hemant/civicplus/notificationservice/kafka/ComplaintEventListener.java, persists notifications, and pushes real-time STOMP/WebSocket updates configured in notification-service/src/main/java/com/hemant/civicplus/notificationservice/config/WebSocketConfig.java. Analytics independently consumes the same event stream via analytics-service/src/main/java/com/hemant/civicplus/analyticsservice/kafka/ComplaintEventConsumer.java, maintains complaint statistics, and serves dashboard data through analytics-service/src/main/java/com/hemant/civicplus/analyticsservice/controller/AnalyticsController.java.
Client and infrastructure boundaries
The React SPA handles routes, authenticated views, API access, and Redux state at frontend/src/App.jsx, frontend/src/api/axios.js, and frontend/src/store/index.js. Docker Compose provisions services plus MySQL logical databases, Kafka, Redis, and MinIO; each state-owning backend uses Flyway migrations, e.g. complaint-service/src/main/resources/db/migration/V1__init_complaint_schema.sql. Containers are supplied per service, with a limited Kubernetes gateway manifest at kubernetes/api-gateway.yaml.
Main entry points: ApiGatewayApplication.java API Gateway · ComplaintService.java Complaint Service · docker-compose.yml Docker Compose · ComplaintController.java Complaint API
Components 19
Client & Edge
- React SPA · Authenticated views, API client, and Redux state.
frontend/src/main.jsx - API Gateway · Public REST perimeter, routing, and CORS.
api-gateway/src/main/java/com/hemant/civicplus/apigateway/ApiGatewayApplication.java
Platform Services
- Config Server · Central configuration host.
config-server/src/main/java/com/hemant/civicplus/configserver/ConfigServerApplication.java - Discovery Server · Dynamic service registration and discovery.
discovery-server/src/main/java/com/hemant/civicplus/discoveryserver/DiscoveryServerApplication.java - Auth Service · Registration, login, recovery, refresh tokens, users, and roles.
auth-service/src/main/java/com/hemant/civicplus/authservice/application/AuthService.java - JWT Security · Each protected service validates tokens locally.
complaint-service/src/main/java/com/hemant/civicplus/complaintservice/security/JwtAuthFilter.java - User Service · Profiles, nearest-officer lookup, and avatar metadata.
user-service/src/main/java/com/hemant/civicplus/userservice/application/UserService.java - Department Service · Departments and officers.
department-service/src/main/java/com/hemant/civicplus/departmentservice/application/DepartmentService.java - Media Service · Isolates upload and download operations.
media-service/src/main/java/com/hemant/civicplus/mediaservice/controller/MediaController.java
Complaint Lifecycle
- Complaint API · Complaint lifecycle API boundary.
complaint-service/src/main/java/com/hemant/civicplus/complaintservice/controller/ComplaintController.java - Complaint Service · Creates, assigns, updates, escalates, and records lifecycle changes.
complaint-service/src/main/java/com/hemant/civicplus/complaintservice/application/ComplaintService.java - Complaint Data · Complaints and status history, migrated with Flyway.
complaint-service/src/main/resources/db/migration/V1__init_complaint_schema.sql
Events & Insights
- Kafka · Carries complaint lifecycle events.
- Notification Service · Persists notifications from complaint events.
notification-service/src/main/java/com/hemant/civicplus/notificationservice/kafka/ComplaintEventListener.java - STOMP/WebSocket · Pushes notification updates to clients.
notification-service/src/main/java/com/hemant/civicplus/notificationservice/config/WebSocketConfig.java - Analytics Service · Maintains complaint statistics and dashboard data.
analytics-service/src/main/java/com/hemant/civicplus/analyticsservice/kafka/ComplaintEventConsumer.java - Analytics API
analytics-service/src/main/java/com/hemant/civicplus/analyticsservice/controller/AnalyticsController.java
Runtime Infrastructure
- Docker Compose · Provisions the full local stack.
docker-compose.yml - MinIO
Connections 27
- Docker Compose → API Gateway: starts
- Docker Compose → Kafka: provisions
- Docker Compose → MinIO: provisions
- React SPA → API Gateway: REST API
- React SPA → STOMP/WebSocket: realtime updates
- API Gateway → Auth Service: routes
- API Gateway → Complaint API: routes
- API Gateway → User Service: routes
- API Gateway → Department Service: routes
- API Gateway → Media Service: routes
- API Gateway → Analytics API: routes
- Config Server → API Gateway: central config
- Config Server → Complaint Service: central config
- Discovery Server → API Gateway: service discovery
- Discovery Server → Complaint Service: registers
- Auth Service → JWT Security: issues tokens
- JWT Security → Complaint API: protects
- Complaint API → Complaint Service: lifecycle commands
- Complaint Service → Complaint Data: persists
- Complaint Service → User Service: profile lookup
- Complaint Service → Department Service: officer assignment
- Media Service → MinIO: stores objects
- Complaint Service → Kafka: publishes lifecycle events
- Kafka → Notification Service: consumes events
- Notification Service → STOMP/WebSocket: pushes notifications
- Kafka → Analytics Service: consumes events
- Analytics Service → Analytics API: serves statistics