Backend API cho Spotify Clone sử dụng ExpressJS, TypeScript và SQLite.
npm install
env.example
thành .env
và cập nhật values:
cp env.example .env
npm run migrate
npm run seed
npm run dev
Server sẽ chạy tại: http://localhost:3000
GET /health
POST /api/auth/register # User registration
POST /api/auth/login # User login
GET /api/users/me # Get user profile
PUT /api/users/me # Update user profile
POST /api/auth/change-password # Change password
POST /api/auth/refresh-token # Refresh JWT token
GET /api/artists # Browse/search artists
GET /api/artists/trending # Get trending artists
GET /api/artists/:id # Get artist details với stats
GET /api/artists/:id/tracks/popular # Artist's popular tracks
GET /api/artists/:id/albums # Artist's albums
POST /api/artists/:id/follow # Follow artist
DELETE /api/artists/:id/follow # Unfollow artist
POST /api/artists # Create artist (admin)
PUT /api/artists/:id # Update artist (admin)
DELETE /api/artists/:id # Delete artist (admin)
GET /api/tracks # Browse/search tracks
GET /api/tracks/popular # Popular tracks globally
GET /api/tracks/trending # Trending tracks
GET /api/tracks/:id # Get track details
POST /api/tracks/:id/play # Play track (record history)
POST /api/tracks/:id/like # Like track
DELETE /api/tracks/:id/like # Unlike track
GET /api/me/tracks/liked # User's liked tracks
GET /api/me/player/recently-played # Recently played tracks
POST /api/tracks # Create track (admin)
PUT /api/tracks/:id # Update track (admin)
DELETE /api/tracks/:id # Delete track (admin)
GET /api/playlists # Browse/search public playlists
GET /api/playlists/:id # Get playlist details
GET /api/playlists/:id/tracks # Get playlist tracks
POST /api/playlists # Create playlist
PUT /api/playlists/:id # Update playlist (owner only)
DELETE /api/playlists/:id # Delete playlist (owner only)
POST /api/playlists/:id/tracks # Add track to playlist
DELETE /api/playlists/:id/tracks/:trackId # Remove track from playlist
PUT /api/playlists/:id/tracks/:trackId/position # Reorder track
POST /api/playlists/:id/follow # Follow playlist
DELETE /api/playlists/:id/follow # Unfollow playlist
GET /api/me/playlists # User's own playlists
GET /api/me/playlists/followed # User's followed playlists
GET /api/albums # Browse/search albums
GET /api/albums/popular # Popular albums
GET /api/albums/new-releases # New releases
GET /api/albums/:id # Get album details
GET /api/albums/:id/tracks # Get album tracks
POST /api/albums/:id/like # Like album
DELETE /api/albums/:id/like # Unlike album
GET /api/me/albums/liked # User's liked albums
POST /api/albums # Create album (admin)
PUT /api/albums/:id # Update album (admin)
DELETE /api/albums/:id # Delete album (admin)
GET /api/search # Universal search across all entities
GET /api/search/quick # Quick search for autocomplete
GET /api/search/suggestions # Search suggestions
GET /api/search/trending # Trending searches
GET /api/search/tracks # Search tracks only
GET /api/search/artists # Search artists only
GET /api/search/albums # Search albums only
GET /api/search/playlists # Search playlists only
GET /api/me/player # Get current playback state
PUT /api/me/player/play # Start/resume playback
PUT /api/me/player/pause # Pause playback
POST /api/me/player/next # Skip to next track
POST /api/me/player/previous # Skip to previous track
PUT /api/me/player/seek # Seek to position
PUT /api/me/player/volume # Set volume
PUT /api/me/player/shuffle # Toggle shuffle mode
PUT /api/me/player/repeat # Set repeat mode
GET /api/me/player/queue # Get user's queue
POST /api/me/player/queue # Add track to queue
DELETE /api/me/player/queue/:id # Remove track from queue
DELETE /api/me/player/queue # Clear entire queue
PUT /api/me/player/device # Transfer playback to device
DELETE /api/me/player # Stop playback
POST /api/upload/avatar # Upload user avatar
POST /api/upload/artist/:id/image # Upload artist image (admin)
POST /api/upload/album/:id/cover # Upload album cover (admin)
POST /api/upload/playlist/:id/cover # Upload playlist cover (owner)
POST /api/upload/track/:id/audio # Upload track audio (admin)
POST /api/upload/images # Upload multiple images
GET /api/upload/serve/:type/:file # Serve uploaded files
GET /api/upload/info/:type/:file # Get file information
DELETE /api/upload/:type/:file # Delete uploaded file (admin)
GET /health/performance # Performance health check
GET /api/cache/stats # Cache statistics (admin)
POST /api/cache/clear # Clear cache (admin)
[Full API documentation in spotify-clone-api-specification.md
]
# Development
npm run dev # Start development server với hot reload
npm run build # Build production version
npm run start # Start production server
# Database
npm run migrate # Run latest migrations
npm run migrate:rollback # Rollback last migration
npm run seed # Run seed files
# Code Quality
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues
npm test # Run tests
npm run test:watch # Watch mode testing
src/
├── controllers/ # API controllers
├── middleware/ # Custom middleware
├── models/ # Database models (coming soon)
├── routes/ # Route definitions (coming soon)
├── migrations/ # Database migrations ✅
├── seeds/ # Seed data ✅
├── utils/ # Utility functions
├── types/ # TypeScript types
├── config/ # Configuration files ✅
└── app.ts # Main app file ✅
NODE_ENV=development
PORT=3000
DATAAPP_URL=./database.sqlite
JWT_SECRET=your-secret-key
CORS_ORIGIN=http://localhost:3000
# See env.example for complete list
./database.sqlite
)npm test # Run all tests
npm run test:watch # Watch mode
Database được seed với:
password123
)Email: admin@spotify.com | Username: admin
Email: user1@spotify.com | Username: musiclover
Email: user2@spotify.com | Username: beatdrop
Xem file spotify-clone-api-specification.md
để có documentation đầy đủ về:
Status: 🎉 ALL PHASES COMPLETED - Production-ready Spotify Clone API!
Use test-auth.http
để test authentication endpoints.
Use test-phase3.http
để test artist/track endpoints với:
Use test-phase4.http
để test playlist/album endpoints với:
Use test-phase5.http
để test search/player endpoints với:
Use test-phase6.http
để test upload/performance endpoints với: