How dnnguyen35/nhaccuatoi works
nhacCuaToi is a React music platform backed by an Express API. Listeners enter through routed pages, authenticate, browse music, manage playlists or wishlists, play audio, and optionally pay for premium features; administrators manage catalog, users, statistics, and payments. Requests pass through API clients and route controllers into Sequelize models, MySQL, and Redis. Cloudinary handles media uploads, while Socket.IO and queued email provide integrations. Several controller implementations were sampled only partially, so uncertain feature wiring is omitted.
Components 25
Frontend Experience
- Web App Shell
frontend/src/App.js - Catalog Pages
frontend/src/pages - Playback Controller
frontend/src/components/PlaybackController.js - API Clients
frontend/src/api/modules - Redux State
frontend/src/redux
Application API
- HTTP Server
backend/index.js - Route Registry
backend/routes/routes.js - Authentication
backend/controllers/auth.controller.js - Music Controllers
backend/controllers/song.controller.js - Search Controller
backend/controllers/search.controller.js - Playlist Management
backend/controllers/playlist.controller.js - Payment Processing
backend/controllers/payment.controller.js - Admin Management
backend/controllers/admin.controller.js
Data Layer
- Sequelize Models
backend/models/main.js - MySQL Database
backend/configs/db.js - Redis Cache
backend/configs/redis.js
External Integrations
- Cloudinary Uploads
backend/utils/uploadToCloudinary.js - PayOS Payments
backend/configs/payos.js - Socket Realtime
backend/configs/socket.js - Email Job Producer
backend/utils/pushJob.js - RabbitMQ Queue
backend/configs/rabbitmq.js - Email Worker
backend/workers/email.worker.js
Other components
- Listener
- Administrator
- Email Service
Connections 35
- Listener → Web App Shell: uses
- Administrator → Web App Shell: uses
- Web App Shell → Catalog Pages: routes
- Web App Shell → Playback Controller: mounts
- Web App Shell → Redux State: reads state
- Web App Shell → Socket Realtime: receives events
- Catalog Pages → API Clients: requests data
- Playback Controller → Redux State: dispatches controls
- API Clients → Route Registry: calls API
- HTTP Server → Route Registry: mounts routes
- Route Registry → Authentication: dispatches auth
- Route Registry → Music Controllers: dispatches music
- Route Registry → Search Controller: dispatches search
- Route Registry → Playlist Management: dispatches playlists
- Route Registry → Payment Processing: dispatches payments
- Route Registry → Admin Management: dispatches admin
- Authentication → Sequelize Models: reads users
- Authentication → Redis Cache: stores OTPs
- Authentication → Email Job Producer: queues email
- Authentication → Socket Realtime: notifies admins
- Music Controllers → Sequelize Models: reads music
- Search Controller → Sequelize Models: searches catalog
- Playlist Management → Sequelize Models: manages playlists
- Playlist Management → Redis Cache: caches playlists
- Payment Processing → Sequelize Models: stores payments
- Payment Processing → PayOS Payments: creates payments
- Admin Management → Sequelize Models: manages records
- Admin Management → Redis Cache: caches statistics
- Admin Management → Cloudinary Uploads: uploads media
- Admin Management → Socket Realtime: broadcasts updates
- Sequelize Models → MySQL Database: persists data
- Cloudinary Uploads → Email Service
- Email Job Producer → RabbitMQ Queue: publishes jobs
- RabbitMQ Queue → Email Worker: delivers jobs
- Email Worker → Email Service: sends email