# wentao2024/feed-syetem architecture

> Architecture diagram of the GitHub repository wentao2024/feed-syetem, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wentao2024/feed-syetem
- Repository: https://github.com/wentao2024/feed-syetem

## Overview

Feed System is a JWT-authenticated social-feed backend. Users register, follow accounts, and create or interact with posts; post and follow events drive asynchronous feed maintenance, while reads combine pushed timelines with pulls from large accounts and return cursor-paginated results. The README documents the hybrid push/pull strategy and caching; sampled source confirms service responsibilities, Feign lookups, persistence operations and event publishing. Feed listener wiring and storage/configuration details are only represented where supported by the tree or README.

Main entry points: [`api-gateway/src/main/java/com/feedsystem/gateway/GatewayApplication.java`](https://github.com/wentao2024/feed-syetem/blob/master/api-gateway/src/main/java/com/feedsystem/gateway/GatewayApplication.java) (API Gateway), [`post-service/src/main/java/com/feedsystem/post/service/PostService.java`](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/service/PostService.java) (Post service), [`user-service/src/main/java/com/feedsystem/user/service/UserService.java`](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/service/UserService.java) (User service), [`feed-service/src/main/java/com/feedsystem/feed/service/FeedService.java`](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/service/FeedService.java) (Hybrid feed engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["API access"]
  node_gateway["API Gateway"]
  node_jwtfilter["JWT validation<br/>[JwtAuthFilter.java]"]
end

subgraph group_accounts["Accounts"]
  node_userapi["User API"]
  node_usersvc["User service<br/>[UserService.java]"]
  node_internaluser["Internal user API"]
  node_userdb[("User database<br/>[UserMapper.java]")]
  node_followdb[("Follow database<br/>[FollowMapper.java]")]
end

subgraph group_content["Posts"]
  node_postapi["Post API"]
  node_postsvc["Post service<br/>[PostService.java]"]
  node_internalpost["Internal post API"]
  node_postdb[("Post database<br/>[PostMapper.java]")]
  node_likedb[("Like database<br/>[LikeMapper.java]")]
  node_files["Image storage"]
end

subgraph group_timeline["Personalized feeds"]
  node_feedapi["Feed API"]
  node_feedsvc["Hybrid feed engine<br/>[FeedService.java]"]
  node_listener["Feed event listener"]
  node_redis[("Redis timelines and caches")]
  node_postclient["Post service client"]
  node_userclient["User service client"]
end

subgraph group_platform["Shared messaging"]
  node_rabbit["RabbitMQ"]
  node_eureka["Eureka discovery"]
end

node_client(("Client"))

node_client -->|"sends requests"| node_gateway
node_gateway -->|"validates JWT"| node_jwtfilter
node_gateway -->|"routes requests"| node_userapi
node_gateway -->|"routes requests"| node_postapi
node_gateway -->|"routes requests"| node_feedapi
node_userapi -->|"handles account actions"| node_usersvc
node_usersvc -->|"reads and writes users"| node_userdb
node_usersvc -->|"reads and writes follows"| node_followdb
node_usersvc -->|"publishes follow events"| node_rabbit
node_internaluser -->|"serves feed lookups"| node_usersvc
node_postapi -->|"handles post actions"| node_postsvc
node_postsvc -->|"reads and writes posts"| node_postdb
node_postsvc -->|"reads and writes likes"| node_likedb
node_postsvc -->|"stores post images"| node_files
node_postsvc -->|"publishes post events"| node_rabbit
node_internalpost -->|"serves feed queries"| node_postsvc
node_feedapi -->|"retrieves feed page"| node_feedsvc
node_rabbit -->|"delivers events"| node_listener
node_listener -->|"dispatches feed updates"| node_feedsvc
node_feedsvc -->|"reads and updates timelines and caches"| node_redis
node_feedsvc -->|"requests follower data"| node_userclient
node_userclient -->|"fetches feed metadata"| node_internaluser
node_feedsvc -->|"requests post data"| node_postclient
node_postclient -->|"fetches posts"| node_internalpost
node_gateway -.->|"discovers services"| node_eureka

click node_gateway "https://github.com/wentao2024/feed-syetem/blob/master/api-gateway/src/main/java/com/feedsystem/gateway/GatewayApplication.java"
click node_jwtfilter "https://github.com/wentao2024/feed-syetem/blob/master/api-gateway/src/main/java/com/feedsystem/gateway/filter/JwtAuthFilter.java"
click node_userapi "https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/controller/UserController.java"
click node_usersvc "https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/service/UserService.java"
click node_internaluser "https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/controller/InternalUserController.java"
click node_userdb "https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/mapper/UserMapper.java"
click node_followdb "https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/mapper/FollowMapper.java"
click node_postapi "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/controller/PostController.java"
click node_postsvc "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/service/PostService.java"
click node_internalpost "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/controller/InternalPostController.java"
click node_postdb "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/mapper/PostMapper.java"
click node_likedb "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/mapper/LikeMapper.java"
click node_files "https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/service/FileStorageService.java"
click node_feedapi "https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/controller/FeedController.java"
click node_feedsvc "https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/service/FeedService.java"
click node_listener "https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/listener/FeedEventListener.java"
click node_postclient "https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/client/PostServiceClient.java"
click node_userclient "https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/client/UserServiceClient.java"
click node_eureka "https://github.com/wentao2024/feed-syetem/blob/master/eureka-server/src/main/java/com/feedsystem/eureka/EurekaServerApplication.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gateway,node_jwtfilter,node_client toneBlue
class node_userapi,node_usersvc,node_internaluser,node_userdb,node_followdb toneAmber
class node_postapi,node_postsvc,node_internalpost,node_postdb,node_likedb,node_files toneMint
class node_feedapi,node_feedsvc,node_listener,node_redis,node_postclient,node_userclient toneRose
class node_rabbit,node_eureka toneIndigo
```

## Components

### API access

- [API Gateway](https://github.com/wentao2024/feed-syetem/blob/master/api-gateway/src/main/java/com/feedsystem/gateway/GatewayApplication.java): `api-gateway/src/main/java/com/feedsystem/gateway/GatewayApplication.java`
- [JWT validation](https://github.com/wentao2024/feed-syetem/blob/master/api-gateway/src/main/java/com/feedsystem/gateway/filter/JwtAuthFilter.java): `api-gateway/src/main/java/com/feedsystem/gateway/filter/JwtAuthFilter.java`

### Accounts

- [User API](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/controller/UserController.java): `user-service/src/main/java/com/feedsystem/user/controller/UserController.java`
- [User service](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/service/UserService.java): `user-service/src/main/java/com/feedsystem/user/service/UserService.java`
- [Internal user API](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/controller/InternalUserController.java): `user-service/src/main/java/com/feedsystem/user/controller/InternalUserController.java`
- [User database](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/mapper/UserMapper.java): `user-service/src/main/java/com/feedsystem/user/mapper/UserMapper.java`
- [Follow database](https://github.com/wentao2024/feed-syetem/blob/master/user-service/src/main/java/com/feedsystem/user/mapper/FollowMapper.java): `user-service/src/main/java/com/feedsystem/user/mapper/FollowMapper.java`

### Posts

- [Post API](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/controller/PostController.java): `post-service/src/main/java/com/feedsystem/post/controller/PostController.java`
- [Post service](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/service/PostService.java): `post-service/src/main/java/com/feedsystem/post/service/PostService.java`
- [Internal post API](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/controller/InternalPostController.java): `post-service/src/main/java/com/feedsystem/post/controller/InternalPostController.java`
- [Post database](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/mapper/PostMapper.java): `post-service/src/main/java/com/feedsystem/post/mapper/PostMapper.java`
- [Like database](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/mapper/LikeMapper.java): `post-service/src/main/java/com/feedsystem/post/mapper/LikeMapper.java`
- [Image storage](https://github.com/wentao2024/feed-syetem/blob/master/post-service/src/main/java/com/feedsystem/post/service/FileStorageService.java): `post-service/src/main/java/com/feedsystem/post/service/FileStorageService.java`

### Personalized feeds

- [Feed API](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/controller/FeedController.java): `feed-service/src/main/java/com/feedsystem/feed/controller/FeedController.java`
- [Hybrid feed engine](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/service/FeedService.java): `feed-service/src/main/java/com/feedsystem/feed/service/FeedService.java`
- [Feed event listener](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/listener/FeedEventListener.java): `feed-service/src/main/java/com/feedsystem/feed/listener/FeedEventListener.java`
- **Redis timelines and caches**
- [Post service client](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/client/PostServiceClient.java): `feed-service/src/main/java/com/feedsystem/feed/client/PostServiceClient.java`
- [User service client](https://github.com/wentao2024/feed-syetem/blob/master/feed-service/src/main/java/com/feedsystem/feed/client/UserServiceClient.java): `feed-service/src/main/java/com/feedsystem/feed/client/UserServiceClient.java`

### Shared messaging

- **RabbitMQ**
- [Eureka discovery](https://github.com/wentao2024/feed-syetem/blob/master/eureka-server/src/main/java/com/feedsystem/eureka/EurekaServerApplication.java): `eureka-server/src/main/java/com/feedsystem/eureka/EurekaServerApplication.java`

### Other components

- **Client**

## Connections

- Client → API Gateway: sends requests
- API Gateway → JWT validation: validates JWT
- API Gateway → User API: routes requests
- API Gateway → Post API: routes requests
- API Gateway → Feed API: routes requests
- User API → User service: handles account actions
- User service → User database: reads and writes users
- User service → Follow database: reads and writes follows
- User service → RabbitMQ: publishes follow events
- Internal user API → User service: serves feed lookups
- Post API → Post service: handles post actions
- Post service → Post database: reads and writes posts
- Post service → Like database: reads and writes likes
- Post service → Image storage: stores post images
- Post service → RabbitMQ: publishes post events
- Internal post API → Post service: serves feed queries
- Feed API → Hybrid feed engine: retrieves feed page
- RabbitMQ → Feed event listener: delivers events
- Feed event listener → Hybrid feed engine: dispatches feed updates
- Hybrid feed engine → Redis timelines and caches: reads and updates timelines and caches
- Hybrid feed engine → User service client: requests follower data
- User service client → Internal user API: fetches feed metadata
- Hybrid feed engine → Post service client: requests post data
- Post service client → Internal post API: fetches posts
- API Gateway → Eureka discovery: discovers services
