PrototypeAcademic microservices platform / 2025
Problem
An event platform needs separately managed auth, event publishing, registrations, participant flows, notifications, media, and statistics.
Solution
Split the system into an Angular app plus Eureka, Spring Cloud Gateway, user/registration, event, and notification services, all wired with Docker Compose.
Key Features
Role-based Angular routes for organizers and participants with auth and role guards
JWT registration/login flow with gateway validation and downstream user headers
Spring Cloud Gateway routes for auth, events, registrations, users, and notifications
User service for authentication, participant registrations, confirmation/rejection, and cancellation workflows
Event service for event CRUD, search, publishing, cancellation, statistics, view counts, and optional Cloudinary image/video uploads
Notification service for email-backed notifications, unread counts, mark-as-read, event lookup, and deletion
OpenFeign event lookup from the user service plus notification client fallbacks through service, local, and gateway URLs
Docker Compose setup for service discovery, gateway, three Spring Boot services, three PostgreSQL databases, Redis, health checks, and shared network
Architecture Map
Mermaid
flowchart TB
Actor["Organizer or participant"] --> Angular["Angular event-management-ui"]
Angular --> Gateway["Spring Cloud Gateway"]
Gateway --> Auth["Public auth routes"]
Gateway --> Jwt["Protected API routes with JWT filter"]
Jwt --> UserSvc["User service"]
Jwt --> EventSvc["Event service"]
Jwt --> NotificationSvc["Notification service"]
Gateway --> Eureka["Eureka service discovery"]
UserSvc --> Eureka
EventSvc --> Eureka
NotificationSvc --> Eureka
UserSvc --> UserDb[("PostgreSQL user_db")]
UserSvc --> Feign["OpenFeign event lookup"]
Feign --> EventSvc
UserSvc --> NotifyClient["Notification client fallback targets"]
NotifyClient --> NotificationSvc
EventSvc --> EventDb[("PostgreSQL event_db")]
EventSvc --> Redis[("Redis cache")]
EventSvc --> Cloudinary["Cloudinary media uploads"]
NotificationSvc --> NotificationDb[("PostgreSQL notification_db")]
NotificationSvc --> Mail["SMTP email delivery"]
Docker["Docker Compose network and health checks"] --> Gateway
Docker --> UserSvc
Docker --> EventSvc
Docker --> NotificationSvc