How ngntiendat/unsaid-social-media-application works
UNSAID is a social-media backend for short posts, media sharing, follows, feeds, and conversation. The principal workflow accepts a post and optional media, stores the post, uploads media, then publishes a post-created event; feed services build and retrieve user feeds using Redis and follow data. Authentication and profile/follow operations are separate user-facing flows, while action, notification, and WebSocket components support social interaction. The README describes real-time conversation but gives no textual subsystem details; the frontend source is a Vite starter. Some messaging links are omitted because their wiring was not sampled.
Main entry points: PostService.java Post service · UserService.java User service · UserRepository.java User repository · AuthenticationService.java Authentication service
Components 24
API and identity
- Authentication API
unsaid-backend/src/main/java/com/ntd/unsaid/presentation/controller/AuthenticationController.java - Authentication service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/AuthenticationService.java - User API
unsaid-backend/src/main/java/com/ntd/unsaid/presentation/controller/UserController.java - User service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/UserService.java
Posts and social
- Post API
unsaid-backend/src/main/java/com/ntd/unsaid/presentation/controller/PostController.java - Post service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/PostService.java - Action service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/ActionService.java - Social feed API
unsaid-backend/src/main/java/com/ntd/unsaid/presentation/controller/SocialFeedController.java - Feed service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/FeedService.java - Media upload
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/CloudinaryUploadService.java
Async and realtime
- Message publisher
unsaid-backend/src/main/java/com/ntd/unsaid/infrastructure/messaging/producer/RabbitMQPublisher.java - Post-created event
unsaid-backend/src/main/java/com/ntd/unsaid/domain/event/PostCreatedEvent.java - Notification service
unsaid-backend/src/main/java/com/ntd/unsaid/application/service/NotificationService.java
Persistence and cache
- Post repository
unsaid-backend/src/main/java/com/ntd/unsaid/domain/repository/PostRepository.java - User repository
unsaid-backend/src/main/java/com/ntd/unsaid/domain/repository/UserRepository.java - Follow repository
unsaid-backend/src/main/java/com/ntd/unsaid/domain/repository/FollowRepository.java - Token repository
unsaid-backend/src/main/java/com/ntd/unsaid/domain/repository/InvalidatedTokenRepository.java - Relational database
- Redis cache
- Redis repository
unsaid-backend/src/main/java/com/ntd/unsaid/infrastructure/caching/RedisRepository.java
Other components
- User
- Cloudinary
- RabbitMQ
- WebSocket clients
Connections 30
- User → Authentication API: submits credentials
- Authentication API → Authentication service: delegates auth
- Authentication service → User repository: loads user
- Authentication service → Token repository: checks token state
- User → User API: manages profile
- User API → User service: delegates profile
- User service → User repository: reads/writes users
- User service → Follow repository: manages follows
- User service → Cloudinary: uploads avatar
- User → Post API: creates post
- Post API → Post service: delegates creation
- Post service → User repository: loads author
- Post service → Post repository: stores post
- Post service → Media upload: uploads attachments
- Media upload → Cloudinary: uploads media
- Post service → Post-created event: creates event
- Post service → Message publisher: publishes event
- Message publisher → RabbitMQ: dispatches message
- User → Social feed API: requests feed
- Social feed API → Feed service: delegates retrieval
- Feed service → Redis repository: reads feed cache
- Feed service → Follow repository: loads followers
- Redis repository → Redis cache: reads/writes feeds
- User → Action service: interacts with posts
- Action service → Redis repository: uses cache
- Notification service → WebSocket clients: delivers updates
- Post repository → Relational database: reads/writes posts
- User repository → Relational database: reads/writes users
- Follow repository → Relational database: reads/writes follows
- Token repository → Relational database: stores invalidations