How jayjayloven/karaoke works
Karaoke is an Express backend for users, shared rooms, and per-room song queues, with PostgreSQL persistence and WebSocket room broadcasts. The main workflow is an API request routed through a controller to a use case, which validates domain state, changes room/user/queue data through repositories, and may broadcast an update. The README also documents MinIO as a deployed service, but the supplied source index shows no application integration for it; the graph therefore leaves it unconnected. Edges reflect the supplied excerpts, source-index references, or README statements.
Main entry points: dependencies.ts Dependency wiring · room/application Room use cases · song-queue/application Queue use cases · UserRepository.ts User repository
Components 24
API entry
- HTTP server
src/server.ts - Express app
src/app.ts - User routes
src/modules/user/presentation/UserRoutes.ts - User controller
src/modules/user/presentation/UserController.ts - Room routes
src/modules/room/presentation/RoomRoutes.ts - Room controller
src/modules/room/presentation/RoomController.ts - Queue routes
src/modules/song-queue/presentation/SongQueueRoutes.ts - Queue controller
src/modules/song-queue/presentation/SongQueueController.ts
Users
- User use cases
src/modules/user/application - User model
src/modules/user/domain/User.ts - User repository
src/modules/user/infrastructure/UserRepository.ts
Rooms
- Room use cases
src/modules/room/application - Room model
src/modules/room/domain/Room.ts - Room repository
src/modules/room/infrastructure/RoomRepository.ts
Song queue
- Queue use cases
src/modules/song-queue/application - Song entry
src/modules/song-queue/domain/SongEntry.ts - Queue repository
src/modules/song-queue/infrastructure/SongQueueRepository.ts
Shared services
- Request validators
src/shared/RequestValidators.ts - Dependency wiring
src/shared/core/dependencies.ts - WebSocket manager
src/shared/core/WebSocketConnectionManager.ts - PostgreSQL pool
src/shared/core/postgres.ts
Other components
- API client
- PostgreSQL
- MinIO storage
Connections 35
- API client → HTTP server: sends requests
README.md - HTTP server → Express app: starts
src/server.ts - Express app → User routes: mounts
src/app.ts - Express app → Room routes: mounts
src/app.ts - Express app → Queue routes: mounts
src/app.ts - User routes → User controller: routes to
src/modules/user/presentation/UserRoutes.ts - Room routes → Room controller: routes to
src/modules/room/presentation/RoomRoutes.ts - Queue routes → Queue controller: routes to
src/modules/song-queue/presentation/SongQueueRoutes.ts - User controller → User use cases: invokes
src/modules/user/presentation/UserController.ts - Room controller → Room use cases: invokes
src/modules/room/presentation/RoomController.ts - Queue controller → Queue use cases: invokes
src/modules/song-queue/presentation/SongQueueController.ts - User use cases → User repository: persists users
src/modules/user/application/CreateUserUseCase.ts - User repository → User model: builds entities
src/modules/user/infrastructure/UserRepository.ts - Room use cases → Room repository: changes rooms
src/modules/room/application/LeaveRoomUseCase.ts - Room use cases → User repository: updates members
src/modules/room/application/LeaveRoomUseCase.ts - Room repository → Room model: builds entities
src/modules/room/infrastructure/RoomRepository.ts - Queue use cases → Queue repository: changes queue
src/modules/song-queue/application/QueueSongUseCase.ts - Queue repository → Song entry: builds entries
src/modules/song-queue/infrastructure/SongQueueRepository.ts - Room use cases → Request validators: validates requests
src/modules/room/application/LeaveRoomUseCase.ts - Queue use cases → Request validators: validates requests
src/modules/song-queue/application/QueueSongUseCase.ts - User use cases → Request validators: validates requests
src/modules/user/application/UpdateUsernameUseCase.ts - Room use cases → WebSocket manager: broadcasts updates
src/modules/room/application/LeaveRoomUseCase.ts - Queue use cases → WebSocket manager: broadcasts updates
src/modules/song-queue/application/QueueSongUseCase.ts - Dependency wiring → Room repository: constructs
src/shared/core/dependencies.ts - Dependency wiring → User repository: constructs
src/shared/core/dependencies.ts - Dependency wiring → Queue repository: constructs
src/shared/core/dependencies.ts - Dependency wiring → Room use cases: wires dependencies
src/shared/core/dependencies.ts - Dependency wiring → User use cases: wires dependencies
src/shared/core/dependencies.ts - Dependency wiring → Queue use cases: wires dependencies
src/shared/core/dependencies.ts - Dependency wiring → Request validators: constructs
src/shared/core/dependencies.ts - Dependency wiring → WebSocket manager: constructs
src/shared/core/dependencies.ts - Room repository → PostgreSQL pool: queries
src/modules/room/infrastructure/RoomRepository.ts - User repository → PostgreSQL pool: queries
src/modules/user/infrastructure/UserRepository.ts - Queue repository → PostgreSQL pool: queries
src/modules/song-queue/infrastructure/SongQueueRepository.ts - PostgreSQL pool → PostgreSQL: connects
src/shared/core/postgres.ts