How nikolaiunknown/socialmedia works
Purpose and Runtime
SocialMedia is a containerized Java 23/Spring Boot backend for social networking: identity, profiles, friendship, posts/images/likes, user search, and real-time chat. The application entry point is src/main/java/com/media/socialmedia/SocialMediaApplication.java; HTTP APIs, static assets, and Swagger/OpenAPI are served by the Spring process.
• src/main/resources/static/api-docs.yaml
• Dockerfile
• docker-compose.yaml
API and Application Boundary
REST controllers are the external HTTP boundary. They accept request DTOs, invoke domain services, and return response DTOs. Major endpoint groups cover authentication, profiles/social graph, posts/media, administration, search, and chat. ChatHandler is a separate real-time message ingress alongside conventional controllers.
• src/main/java/com/media/socialmedia/Controllers/AuthController.java
• src/main/java/com/media/socialmedia/Controllers/PostController.java
• src/main/java/com/media/socialmedia/Controllers/ChatHandler.java
Authentication and Authorization
Registration and login flow through registration/user services and issue JWT access tokens plus refresh-token state. Refresh tokens are persisted and exposed through an HTTP-only cookie. Spring Security config and a token filter establish authenticated request context; authorization distinguishes Admin and regular users.
• src/main/java/com/media/socialmedia/Configs/SecurityConfig.java
• src/main/java/com/media/socialmedia/Security/TokenFilter.java
• src/main/java/com/media/socialmedia/Services/RefreshTokenService.java
Core Social Domain
JPA entities model durable users, posts, chats/messages, and refresh tokens. Services implement higher-level social operations: profile changes, friend invitations/relationships, blacklist enforcement, likes, posts, and admin actions. Controllers should not directly own persistence logic; repositories form the relational persistence boundary.
• src/main/java/com/media/socialmedia/Entity/User.java
• src/main/java/com/media/socialmedia/Entity/Post.java
• src/main/java/com/media/socialmedia/Services/FriendService.java
Chat and WebSocket Flow
WebSocket/STOMP configuration exposes real-time chat transport. Incoming messages are handled through chat-facing controller/handler code, then chat services validate access/blacklist conditions, apply the stated per-user Bucket4J rate limit, persist chats/messages, and produce message DTOs. Chat access failures have domain-specific exceptions.
• src/main/java/com/media/socialmedia/Configs/WebSocketConfig.java
• src/main/java/com/media/socialmedia/Services/ChatService.java
• src/main/java/com/media/socialmedia/Entity/Message.java
Data, Cache, and Search Infrastructure
PostgreSQL is the system of record, initialized with schema SQL. Redis supports caching through a dedicated configuration/service layer. Elasticsearch holds UserSearchDocument records, queried through a separate search repository/service for RU/EN full-text user search. These are distinct storage concerns rather than interchangeable repositories.
• init/postgres/tables.sql
• src/main/java/com/media/socialmedia/Services/CacheService.java
• src/main/java/com/media/socialmedia/Services/SearchService.java
Media and Deployment
Image upload is handled at the HTTP layer and is intended for static serving from a Docker-mounted volume. Docker Compose runs four services: Spring backend, PostgreSQL 17, Redis 7.2.5, and Elasticsearch 7.17.28; Elasticsearch users are initialized from repository-provided data.
• src/main/java/com/media/socialmedia/Controllers/ImageController.java
• init/elasticsearch/users.json
• docker-compose.yaml
Main entry points: AuthController.java REST controllers · tables.sql PostgreSQL 17 · docker-compose.yaml Docker Compose · FriendService.java Social services
Components 19
Spring application
- SocialMedia application · Serves HTTP APIs, static assets, and OpenAPI.
src/main/java/com/media/socialmedia/SocialMediaApplication.java - REST controllers · Authentication, profiles, posts, admin, search, and media APIs.
src/main/java/com/media/socialmedia/Controllers/AuthController.java - Image controller · Accepts image uploads for static serving.
src/main/java/com/media/socialmedia/Controllers/ImageController.java - OpenAPI specification
src/main/resources/static/api-docs.yaml
Security
- Security configuration · Defines authenticated and Admin/user authorization rules.
src/main/java/com/media/socialmedia/Configs/SecurityConfig.java - JWT token filter · Establishes authenticated request context.
src/main/java/com/media/socialmedia/Security/TokenFilter.java - Refresh token service · Persists refresh-token state; tokens are returned in HTTP-only cookies.
src/main/java/com/media/socialmedia/Services/RefreshTokenService.java
Social domain
- Social services · Owns profiles, friendships, blacklist, likes, posts, and admin operations.
src/main/java/com/media/socialmedia/Services/FriendService.java - JPA social entities · Durable users, posts, chats, messages, and refresh tokens.
src/main/java/com/media/socialmedia/Entity/User.java - Post entity
src/main/java/com/media/socialmedia/Entity/Post.java
Real-time chat
- WebSocket/STOMP config · Exposes the chat messaging transport.
src/main/java/com/media/socialmedia/Configs/WebSocketConfig.java - Chat handler · Handles incoming real-time chat messages.
src/main/java/com/media/socialmedia/Controllers/ChatHandler.java - Chat service · Validates access and blacklist rules, rate-limits users, and persists messages.
src/main/java/com/media/socialmedia/Services/ChatService.java - Message entity
src/main/java/com/media/socialmedia/Entity/Message.java
Data infrastructure
- PostgreSQL 17 · Relational persistence initialized with schema SQL.
init/postgres/tables.sql - Redis 7.2.5 · Used by the dedicated cache layer.
src/main/java/com/media/socialmedia/Services/CacheService.java - User search service · Performs RU/EN full-text user search.
src/main/java/com/media/socialmedia/Services/SearchService.java - Elasticsearch 7.17.28 · Stores UserSearchDocument records.
init/elasticsearch/users.json
Other components
- Docker Compose · Runs backend, PostgreSQL, Redis, and Elasticsearch.
docker-compose.yaml
Connections 24
- SocialMedia application → REST controllers: serves
- SocialMedia application → OpenAPI specification: serves
- REST controllers → Security configuration: secured by
- Security configuration → JWT token filter: installs
- REST controllers → Refresh token service: login and refresh
- Refresh token service → PostgreSQL 17: persists state
- REST controllers → Social services: invokes
- REST controllers → Image controller: routes media upload
- Social services → JPA social entities: manages
- Social services → Post entity: manages
- JPA social entities → PostgreSQL 17: persists to
- Post entity → PostgreSQL 17: persists to
- Social services → Redis 7.2.5: uses cache
- REST controllers → User search service: queries users
- User search service → Elasticsearch 7.17.28: queries index
- WebSocket/STOMP config → Chat handler: routes messages
- Chat handler → Chat service: invokes
- Chat service → Message entity: creates
- Message entity → PostgreSQL 17: persists to
- Chat service → Redis 7.2.5: rate-limit state
- Docker Compose → SocialMedia application: runs backend
- Docker Compose → PostgreSQL 17: runs
- Docker Compose → Redis 7.2.5: runs
- Docker Compose → Elasticsearch 7.17.28: runs