# b-yte/comeback-room-backend architecture

> Architecture diagram of the GitHub repository b-yte/comeback-room-backend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/b-yte/comeback-room-backend
- Repository: https://github.com/b-yte/comeback-room-backend

## Overview

COMEBACK ROOM is a fan-focused backend for scheduled, synchronized group video viewing, with chat, reactions, polls, and other participation features. The principal documented journey is fans joining a scheduled room and participating together; authentication is the clearest sampled HTTP workflow: login or refresh requests pass through the auth controller and service to issue access and refresh tokens. Kafka is documented as the shared internal event channel for chat, reactions, and room reports. Several product areas are represented only by the tree and README, so their implementation links are left unverified rather than inferred.

Main entry points: [`src/main/java/com/comebackroom/domain/auth/service/AuthService.java`](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/service/AuthService.java) (Auth service), [`src/main/java/com/comebackroom/domain/watchingroom/entity/WatchingRoom.java`](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/entity/WatchingRoom.java) (Room lifecycle), [`src/main/java/com/comebackroom/global/kafka/RoomActivityProducer.java`](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityProducer.java) (Activity producer), [`src/main/java/com/comebackroom/domain/auth/controller/AuthController.java`](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/controller/AuthController.java) (Auth API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity &amp; access"]
  node_auth_api["Auth API"]
  node_auth_service["Auth service<br/>[AuthService.java]"]
  node_members[("Member accounts<br/>[Member.java]")]
  node_refresh_store[("Refresh tokens")]
  node_jwt["JWT security"]
end

subgraph group_rooms["Viewing rooms"]
  node_room_entity["Room lifecycle<br/>[WatchingRoom.java]"]
  node_room_store[("Room persistence")]
  node_participants[("Room participants")]
  node_room_tags[("Room discovery tags<br/>[TagRepository.java]")]
end

subgraph group_engagement["Fan participation"]
  node_chat["Chat"]
  node_reactions["Reactions"]
  node_polls[("Room polls")]
  node_notifications[("Notifications")]
end

subgraph group_activity["Activity &amp; reporting"]
  node_reports["Room reports"]
  node_report_data[("Report data")]
end

subgraph group_platform["Persistence &amp; messaging"]
  node_activity_producer["Activity producer"]
  node_activity_topic["Room activity topic"]
  node_activity_consumer["Activity consumer"]
  node_dispatcher["Activity dispatcher"]
  node_activity_handlers["Typed handlers"]
end

node_fan(("Fan"))

node_fan -.->|"requests tokens"| node_auth_api
node_auth_api -->|"calls"| node_auth_service
node_auth_service -->|"looks up"| node_members
node_auth_service -->|"reads and saves"| node_refresh_store
node_auth_service -->|"issues access token"| node_jwt
node_fan -.->|"joins scheduled viewing"| node_room_entity
node_room_entity -.->|"persists lifecycle"| node_room_store
node_room_entity -.->|"tracks attendance"| node_participants
node_room_entity -.->|"supports discovery"| node_room_tags
node_fan -.->|"chats in room"| node_chat
node_fan -.->|"reacts in room"| node_reactions
node_fan -.->|"votes in room"| node_polls
node_chat -.->|"publishes events"| node_activity_producer
node_reactions -.->|"publishes events"| node_activity_producer
node_activity_producer -.->|"sends messages"| node_activity_topic
node_activity_topic -.->|"delivers messages"| node_activity_consumer
node_activity_consumer -.->|"dispatches"| node_dispatcher
node_dispatcher -.->|"routes by type"| node_activity_handlers
node_activity_handlers -->|"handles room closure"| node_reports
node_reports -.->|"creates report"| node_report_data

click node_auth_api "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/controller/AuthController.java"
click node_auth_service "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/service/AuthService.java"
click node_members "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/member/entity/Member.java"
click node_refresh_store "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/repository/RefreshTokenRepository.java"
click node_jwt "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/security/jwt/JwtTokenProvider.java"
click node_room_entity "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/entity/WatchingRoom.java"
click node_room_store "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/repository/WatchingRoomRepository.java"
click node_participants "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/repository/RoomParticipantRepository.java"
click node_room_tags "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/tag/repository/TagRepository.java"
click node_chat "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/chat/handler/ChatActivityHandler.java"
click node_reactions "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/reaction/handler/ReactionActivityHandler.java"
click node_polls "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/poll/repository/PollRepository.java"
click node_notifications "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/notification/repository/NotificationRepository.java"
click node_activity_producer "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityProducer.java"
click node_activity_consumer "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityConsumer.java"
click node_dispatcher "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityDispatcher.java"
click node_activity_handlers "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityHandler.java"
click node_reports "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/report/handler/RoomClosedActivityHandler.java"
click node_report_data "https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/report/repository/ReportRepository.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_auth_api,node_auth_service,node_members,node_refresh_store,node_jwt toneBlue
class node_room_entity,node_room_store,node_participants,node_room_tags toneAmber
class node_chat,node_reactions,node_polls,node_notifications toneMint
class node_reports,node_report_data toneRose
class node_activity_producer,node_activity_topic,node_activity_consumer,node_dispatcher,node_activity_handlers,node_fan toneIndigo
```

## Components

### Identity & access

- [Auth API](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/controller/AuthController.java): `src/main/java/com/comebackroom/domain/auth/controller/AuthController.java`
- [Auth service](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/service/AuthService.java): `src/main/java/com/comebackroom/domain/auth/service/AuthService.java`
- [Member accounts](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/member/entity/Member.java): `src/main/java/com/comebackroom/domain/member/entity/Member.java`
- [Refresh tokens](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/auth/repository/RefreshTokenRepository.java): `src/main/java/com/comebackroom/domain/auth/repository/RefreshTokenRepository.java`
- [JWT security](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/security/jwt/JwtTokenProvider.java): `src/main/java/com/comebackroom/global/security/jwt/JwtTokenProvider.java`

### Viewing rooms

- [Room lifecycle](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/entity/WatchingRoom.java): `src/main/java/com/comebackroom/domain/watchingroom/entity/WatchingRoom.java`
- [Room persistence](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/repository/WatchingRoomRepository.java): `src/main/java/com/comebackroom/domain/watchingroom/repository/WatchingRoomRepository.java`
- [Room participants](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/watchingroom/repository/RoomParticipantRepository.java): `src/main/java/com/comebackroom/domain/watchingroom/repository/RoomParticipantRepository.java`
- [Room discovery tags](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/tag/repository/TagRepository.java): `src/main/java/com/comebackroom/domain/tag/repository/TagRepository.java`

### Fan participation

- [Chat](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/chat/handler/ChatActivityHandler.java): `src/main/java/com/comebackroom/domain/chat/handler/ChatActivityHandler.java`
- [Reactions](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/reaction/handler/ReactionActivityHandler.java): `src/main/java/com/comebackroom/domain/reaction/handler/ReactionActivityHandler.java`
- [Room polls](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/poll/repository/PollRepository.java): `src/main/java/com/comebackroom/domain/poll/repository/PollRepository.java`
- [Notifications](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/notification/repository/NotificationRepository.java): `src/main/java/com/comebackroom/domain/notification/repository/NotificationRepository.java`

### Activity & reporting

- [Room reports](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/report/handler/RoomClosedActivityHandler.java): `src/main/java/com/comebackroom/domain/report/handler/RoomClosedActivityHandler.java`
- [Report data](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/domain/report/repository/ReportRepository.java): `src/main/java/com/comebackroom/domain/report/repository/ReportRepository.java`

### Persistence & messaging

- [Activity producer](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityProducer.java): `src/main/java/com/comebackroom/global/kafka/RoomActivityProducer.java`
- **Room activity topic**
- [Activity consumer](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityConsumer.java): `src/main/java/com/comebackroom/global/kafka/RoomActivityConsumer.java`
- [Activity dispatcher](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityDispatcher.java): `src/main/java/com/comebackroom/global/kafka/RoomActivityDispatcher.java`
- [Typed handlers](https://github.com/b-yte/comeback-room-backend/blob/develop/src/main/java/com/comebackroom/global/kafka/RoomActivityHandler.java): `src/main/java/com/comebackroom/global/kafka/RoomActivityHandler.java`

### Other components

- **Fan**

## Connections

- Fan → Auth API: requests tokens
- Auth API → Auth service: calls (evidence: `src/main/java/com/comebackroom/domain/auth/controller/AuthController.java`)
- Auth service → Member accounts: looks up (evidence: `src/main/java/com/comebackroom/domain/auth/service/AuthService.java`)
- Auth service → Refresh tokens: reads and saves (evidence: `src/main/java/com/comebackroom/domain/auth/service/AuthService.java`)
- Auth service → JWT security: issues access token (evidence: `src/main/java/com/comebackroom/domain/auth/service/AuthService.java`)
- Fan → Room lifecycle: joins scheduled viewing
- Room lifecycle → Room persistence: persists lifecycle (evidence: `src/main/java/com/comebackroom/domain/watchingroom/repository/WatchingRoomRepository.java`)
- Room lifecycle → Room participants: tracks attendance
- Room lifecycle → Room discovery tags: supports discovery
- Fan → Chat: chats in room
- Fan → Reactions: reacts in room
- Fan → Room polls: votes in room
- Chat → Activity producer: publishes events
- Reactions → Activity producer: publishes events
- Activity producer → Room activity topic: sends messages
- Room activity topic → Activity consumer: delivers messages
- Activity consumer → Activity dispatcher: dispatches
- Activity dispatcher → Typed handlers: routes by type
- Typed handlers → Room reports: handles room closure (evidence: `src/main/java/com/comebackroom/domain/report/handler/RoomClosedActivityHandler.java`)
- Room reports → Report data: creates report
