Browse Source

Finish autoplay system for playlist

features/playlist
Astri4-4 4 months ago
parent
commit
99003951ba
  1. 901
      backend/logs/access.log
  2. BIN
      frontend/src/assets/img/background.png
  3. 4
      frontend/src/assets/svg/eye-slash.svg
  4. 4
      frontend/src/assets/svg/eye.svg
  5. 17
      frontend/src/components/PlaylistVideoCard.jsx
  6. 4
      frontend/src/components/VideoCard.jsx
  7. 2
      frontend/src/pages/Home.jsx
  8. 50
      frontend/src/pages/Login.jsx
  9. 3
      frontend/src/pages/Playlist.jsx
  10. 100
      frontend/src/pages/Register.jsx
  11. 103
      frontend/src/pages/Video.jsx

901
backend/logs/access.log

@ -6433,3 +6433,904 @@
[2025-08-15 12:20:03.617] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-15 12:20:03.621] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-15 12:20:03.630] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-15 18:12:13.369] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-15 18:12:17.242] [undefined] GET(/:id): try to get video 1
[2025-08-15 18:12:17.253] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-15 18:12:17.258] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-15 18:12:17.269] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-15 18:12:17.284] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-15 18:12:17.306] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-15 18:12:17.317] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-15 18:12:18.568] [undefined] POST(/:id): Video added to playlist with id 1 with status 200
[2025-08-15 18:12:21.672] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-15 18:12:21.676] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-15 18:12:21.678] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-15 18:12:21.682] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-15 18:12:21.691] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-15 18:12:22.806] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-15 18:12:23.969] [undefined] GET(/:id): try to get video 1
[2025-08-15 18:12:23.980] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-15 18:12:23.985] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-15 18:12:23.997] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-15 18:12:24.010] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-15 18:12:24.033] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-15 18:12:24.042] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:40:29.247] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 07:40:29.250] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 07:40:29.253] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 07:40:29.257] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 07:40:29.270] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:40:30.139] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:40:33.468] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:40:33.478] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:40:33.485] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:40:33.496] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:40:33.507] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:40:33.524] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:40:33.534] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:40:47.086] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 07:40:47.090] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 07:40:47.095] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 07:40:47.100] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 07:40:47.109] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:40:48.448] [undefined] GET(/:id): try to get channel with id 1
[2025-08-16 07:40:48.459] [undefined] GET(/:id/stats): try to get stats
[2025-08-16 07:40:48.463] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
[2025-08-16 07:40:48.471] [undefined] GET(/:id/stats): Successfully get stats with status 200
[2025-08-16 07:40:49.626] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:40:49.629] [undefined] GET(/:id/likes/day): try to get likes per day
[2025-08-16 07:40:49.640] [undefined] GET(/:id/likes/day): successfully retrieved likes per day with status 200
[2025-08-16 07:40:49.645] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:40:54.460] [undefined] GET(/:id): try to get channel with id 1
[2025-08-16 07:40:54.470] [undefined] GET(/:id/stats): try to get stats
[2025-08-16 07:40:54.474] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
[2025-08-16 07:40:54.482] [undefined] GET(/:id/stats): Successfully get stats with status 200
[2025-08-16 07:40:58.675] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 07:40:58.679] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 07:41:20.113] [undefined] POST(/): try to upload video with status undefined
[2025-08-16 07:41:20.120] [undefined] POST(/): successfully uploaded video with status 200
[2025-08-16 07:41:20.184] [undefined] POST(/thumbnail): try to add thumbnail to video 2
[2025-08-16 07:41:20.188] [undefined] POST(/thumbnail): successfully uploaded thumbnail with status 200
[2025-08-16 07:41:20.213] [undefined] PUT(/:id/tags): try to add tags to video 2
[2025-08-16 07:41:20.222] [undefined] PUT(/:id/tags): Tag video already exists for video 2 with status 200
[2025-08-16 07:41:20.227] [undefined] PUT(/:id/tags): successfully added tags to video 2 with status 200
[2025-08-16 07:41:24.595] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:41:24.606] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:41:24.611] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:41:24.624] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:41:24.636] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:41:24.663] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:41:24.672] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:43:21.171] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:43:21.180] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:43:21.185] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:43:22.503] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:43:22.514] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:43:22.856] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:43:22.867] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:43:47.345] [undefined] GET(/:id): try to get video 2
[2025-08-16 07:43:47.357] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:43:47.361] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 07:43:47.423] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 07:43:47.435] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 07:43:47.496] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 07:43:47.507] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 07:43:52.404] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 07:43:52.407] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 07:43:52.411] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 07:43:52.416] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 07:43:52.424] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:43:53.196] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:43:54.347] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:43:54.358] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:43:54.364] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:43:54.377] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:43:54.390] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:43:54.421] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:43:54.429] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:44:30.592] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:44:30.603] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:44:30.606] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:44:30.646] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:44:30.659] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:44:30.704] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:44:30.713] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:46:22.913] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:46:22.925] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:46:22.930] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:46:22.963] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:46:22.976] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:46:23.027] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:46:23.037] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:47:17.266] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:47:17.277] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:47:17.281] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:47:17.298] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:47:17.312] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:47:17.334] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:47:17.343] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:47:22.197] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:47:22.208] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:47:22.214] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:47:22.228] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:47:22.242] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:47:22.264] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:47:22.271] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:47:24.059] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:47:24.070] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:47:24.074] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:47:24.090] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:47:24.104] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:47:24.124] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:47:24.133] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:47:52.488] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:47:52.500] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:47:52.505] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:47:52.519] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:47:52.531] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:47:52.558] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:47:52.570] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:48:11.211] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:48:11.222] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:48:11.227] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:48:11.241] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:48:11.254] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:48:11.279] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:48:11.288] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:49:14.026] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:49:14.039] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:49:14.044] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:49:14.059] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:49:14.074] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:49:14.105] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:49:14.113] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:49:21.355] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:49:21.368] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:49:21.372] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:49:21.388] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:49:21.401] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:49:21.424] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:49:21.433] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:49:49.303] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:49:49.315] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:49:49.318] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:49:49.331] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:49:49.344] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:49:49.369] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:49:49.379] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:51:23.803] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:51:23.814] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:51:23.818] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:51:23.828] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:51:23.839] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:51:23.853] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:51:23.881] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:51:23.889] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:52:02.095] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:52:02.109] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:52:02.114] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:52:02.123] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:52:02.132] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:52:02.143] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:52:02.194] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:54:38.628] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:54:38.642] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:54:38.647] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:54:38.657] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:54:38.671] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:54:38.683] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:54:38.743] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:54:38.757] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:55:08.863] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:55:08.879] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:55:08.883] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:55:08.891] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:55:08.914] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:55:08.927] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:55:08.957] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:55:08.966] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:55:35.764] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:55:35.777] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:55:35.783] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:55:35.793] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:55:35.810] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:55:35.822] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:55:35.876] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:55:35.885] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:55:49.814] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:55:49.828] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:55:49.834] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:55:49.841] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:55:49.861] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:55:49.876] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:55:49.921] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:55:49.931] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:57:02.764] [undefined] GET(/:id): try to get video 2
[2025-08-16 07:57:02.775] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:57:02.779] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 07:57:02.792] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 07:57:02.805] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 07:57:02.832] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 07:57:02.841] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 07:57:04.973] [undefined] POST(/:id): Video added to playlist with id 1 with status 200
[2025-08-16 07:57:08.427] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 07:57:08.432] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 07:57:08.435] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 07:57:08.440] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 07:57:08.450] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:57:10.201] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:57:11.517] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:57:11.525] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:57:11.533] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:57:11.542] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:57:11.551] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:57:11.563] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:57:11.585] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:57:11.595] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:58:14.258] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:58:14.269] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:58:14.275] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:58:14.284] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:58:14.288] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:58:14.301] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:58:14.320] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:58:14.329] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:58:32.008] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:58:32.022] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:58:32.026] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:58:32.033] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:58:32.044] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:58:32.058] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:58:32.091] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:58:32.099] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:58:39.414] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:58:39.429] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:58:39.434] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:58:39.441] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:58:39.451] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:58:39.465] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:58:39.488] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:58:39.497] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:58:50.565] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:58:50.576] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:58:50.582] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:58:50.592] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:58:50.597] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:58:50.609] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:58:50.640] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:58:50.648] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:58:58.868] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:58:58.881] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:58:58.884] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:58:58.896] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:58:58.899] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:58:58.913] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:58:58.939] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:58:58.949] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:59:05.950] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:59:05.965] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:59:05.969] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:59:05.976] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:59:05.985] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:59:06.001] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:59:06.021] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:59:06.029] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:59:16.318] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:59:16.333] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:59:16.339] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:59:16.346] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:59:16.358] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:59:16.372] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:59:16.411] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:59:16.420] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:59:24.935] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:59:24.951] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:59:24.956] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:59:24.963] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:59:24.977] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:59:24.991] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:59:25.008] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:59:25.016] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 07:59:32.661] [undefined] GET(/:id): try to get video 1
[2025-08-16 07:59:32.676] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 07:59:32.681] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 07:59:32.689] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 07:59:32.698] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 07:59:32.719] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 07:59:32.747] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 07:59:32.757] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:00:06.773] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:00:13.132] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:00:13.146] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:00:13.150] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:00:13.165] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:00:13.169] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:00:13.184] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:00:13.205] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:00:13.214] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:00:23.385] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:00:23.396] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:00:23.403] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:00:23.416] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:00:23.420] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:00:23.434] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:00:23.461] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:00:23.470] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:00:34.140] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:00:34.156] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:00:34.161] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:00:34.167] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:00:34.179] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:00:34.194] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:00:34.216] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:00:34.225] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:00:50.188] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:00:50.202] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:00:50.206] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:00:50.215] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:00:50.227] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:00:50.244] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:00:50.272] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:00:50.281] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:01:44.683] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:01:44.696] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:01:44.699] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:01:44.708] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:01:44.720] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:01:44.734] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:01:44.758] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:01:44.767] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:01:47.667] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:01:47.682] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:01:47.687] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:01:47.695] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:01:47.703] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:01:47.713] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:01:47.728] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:01:47.738] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:01:48.827] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:01:48.862] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:01:48.868] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:01:48.875] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:01:48.881] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:01:48.893] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:01:48.906] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:01:48.914] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:01:49.238] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:01:49.253] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:01:49.257] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:01:49.263] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:01:49.270] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:01:49.279] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:01:49.294] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:01:49.302] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:01:49.597] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:01:49.612] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:01:49.617] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:01:49.623] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:01:49.631] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:01:49.642] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:01:49.656] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:01:49.664] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:02:41.666] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:02:41.679] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:02:41.684] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:02:41.692] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:02:41.702] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:02:41.715] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:02:41.745] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:02:41.753] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:02:52.418] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:02:52.433] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:02:52.439] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:02:52.446] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:02:52.458] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:02:52.474] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:02:52.495] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:02:52.503] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:02:59.962] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:02:59.975] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:02:59.980] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:02:59.989] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:02:59.997] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:03:00.011] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:03:00.046] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:03:00.055] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:03:16.204] [undefined] GET(/:id/like): try to toggle like on video 1
[2025-08-16 08:03:16.215] [undefined] GET(/:id/like): no likes found adding likes for video 1 with status 200
[2025-08-16 08:05:32.953] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:05:32.965] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:05:32.971] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:05:32.982] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:05:32.988] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:05:33.003] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:05:33.021] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:05:33.030] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:06:16.148] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:06:16.159] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:06:16.166] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:16.174] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:06:16.178] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:16.190] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:06:16.217] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:06:16.227] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:06:28.982] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:06:28.993] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:06:29.000] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:29.013] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:06:29.017] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:29.031] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:06:29.049] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:06:29.058] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:06:32.423] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:06:32.437] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:32.442] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:06:32.449] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:32.455] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:06:32.464] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:06:32.478] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:06:32.487] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:06:33.211] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:06:45.853] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:06:45.869] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:45.875] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:06:45.882] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:45.897] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:06:45.911] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:06:45.933] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:06:45.947] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:06:47.110] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:06:47.119] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:47.127] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:06:47.135] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:47.143] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:06:47.152] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:06:47.166] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:06:47.173] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:06:47.603] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:06:47.614] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:06:47.621] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:06:47.627] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:06:47.635] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:06:47.645] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:06:47.659] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:06:47.667] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:07:19.486] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:07:19.501] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:07:19.505] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:07:19.512] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:07:19.539] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:07:19.555] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:07:19.606] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:07:19.616] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:07:56.143] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:07:56.153] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:07:56.161] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:07:56.170] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:07:56.175] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:07:56.187] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:07:56.271] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:07:56.279] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:08:19.655] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:08:19.672] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:08:19.677] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:08:19.685] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:08:19.697] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:08:19.711] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:08:19.767] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:08:19.778] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:08:40.999] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:08:41.016] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:08:41.022] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:08:41.036] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:08:41.047] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:08:41.062] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:08:41.126] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:08:41.137] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:09:01.536] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:09:01.552] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:09:01.557] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:09:01.565] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:09:01.589] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:09:01.604] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:09:01.655] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:09:01.666] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:09:04.562] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:09:04.578] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:09:04.582] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:09:04.589] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:09:04.599] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:09:04.612] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:09:04.645] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:09:04.653] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:09:19.860] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:09:19.875] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:09:19.880] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:09:19.890] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:09:19.914] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:09:19.929] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:09:19.993] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:09:20.001] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:10:04.584] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:10:04.599] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:04.604] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:10:04.612] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:04.633] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:10:04.648] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:10:04.681] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:10:04.691] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:10:16.082] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:10:16.097] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:16.101] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:10:16.110] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:16.115] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:10:16.125] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:10:16.140] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:10:16.148] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:10:17.714] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:10:17.729] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:17.734] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:10:17.740] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:17.747] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:10:17.757] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:10:17.771] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:10:17.781] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:10:29.787] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:10:29.798] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:10:29.804] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:29.814] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:29.820] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:10:29.834] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:10:29.875] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:10:29.886] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:10:31.874] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:10:31.884] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:31.891] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:10:31.899] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:31.906] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:10:31.916] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:10:31.932] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:10:31.939] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:10:32.618] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:10:32.633] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:10:32.636] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:10:32.644] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:10:32.649] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:10:32.659] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:10:32.672] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:10:32.681] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:11:44.265] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 08:11:44.269] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 08:11:45.948] [undefined] GET(/:id): try to get channel with id 1
[2025-08-16 08:11:53.933] [undefined] GET(/:id): try to get channel with id 1
[2025-08-16 08:11:53.944] [undefined] GET(/:id/stats): try to get stats
[2025-08-16 08:11:53.949] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
[2025-08-16 08:11:53.958] [undefined] GET(/:id/stats): Successfully get stats with status 200
[2025-08-16 08:11:58.519] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:11:58.522] [undefined] GET(/:id/likes/day): try to get likes per day
[2025-08-16 08:11:58.536] [undefined] GET(/:id/likes/day): successfully retrieved likes per day with status 200
[2025-08-16 08:11:58.541] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:12:10.925] [undefined] GET(/:id): try to get channel with id 1
[2025-08-16 08:12:10.935] [undefined] GET(/:id/stats): try to get stats
[2025-08-16 08:12:10.940] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
[2025-08-16 08:12:10.950] [undefined] GET(/:id/stats): Successfully get stats with status 200
[2025-08-16 08:12:17.818] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:12:17.829] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:12:17.835] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:12:17.848] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:12:17.863] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:12:17.883] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:12:17.892] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:12:20.826] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 08:12:20.829] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 08:12:20.834] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 08:12:20.839] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 08:12:20.846] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:12:21.667] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:12:28.790] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:12:28.798] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:12:28.806] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:12:28.813] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:12:28.820] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:12:28.835] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:12:28.861] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:12:28.870] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 08:12:36.261] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:12:36.971] [undefined] GET(/:id): try to get video 2
[2025-08-16 08:12:36.982] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 08:12:36.987] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:12:36.998] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:12:37.002] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 08:12:37.016] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 08:12:37.049] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 08:12:37.058] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 08:41:18.105] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 08:41:18.109] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 08:41:18.113] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 08:41:18.118] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 08:41:18.126] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:41:21.696] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:41:24.102] [undefined] DELETE(/:id/video/:videoId): Video deleted from playlist with id 1 with status 200
[2025-08-16 08:41:24.125] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 08:41:34.167] [undefined] GET(/:id): try to get video 1
[2025-08-16 08:41:34.179] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 08:41:34.185] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 08:41:34.197] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 08:41:34.210] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 08:41:34.231] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 08:41:34.243] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:07:56.380] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 10:07:56.384] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 10:07:56.392] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 10:07:56.398] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 10:07:56.406] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:07:57.219] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:08:00.077] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:08:00.088] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:08:00.092] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:08:00.107] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:08:00.120] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:08:00.152] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:08:00.161] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:08:02.315] [undefined] POST(/:id): Video added to playlist with id 1 with status 200
[2025-08-16 10:08:08.051] [undefined] GET(/:id/channel): try to retrieve channel of user 1
[2025-08-16 10:08:08.055] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
[2025-08-16 10:08:08.059] [undefined] GET(/:id/history): try to retrieve history of user 1
[2025-08-16 10:08:08.064] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
[2025-08-16 10:08:08.072] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:08:08.888] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:08:09.577] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:08:09.590] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:08:09.595] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:08:09.602] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:08:09.612] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:08:09.624] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:08:09.653] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:08:09.661] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:13:50.098] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:13:50.109] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:13:50.115] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:13:50.126] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:13:50.130] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:13:50.144] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:13:50.166] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:13:50.175] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:17:16.300] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:17:16.316] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:17:16.321] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:17:16.327] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:17:16.357] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:17:16.372] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:17:16.428] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:17:16.438] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:18:16.745] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:18:16.757] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:18:16.764] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:18:16.773] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:18:16.777] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:18:16.789] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:18:16.815] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:18:16.823] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:18:44.111] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:18:44.125] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:18:44.131] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:18:44.140] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:18:44.168] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:18:44.184] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:18:44.238] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:18:44.248] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:18:50.434] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:18:50.449] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:18:50.454] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:18:50.461] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:18:50.477] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:18:50.492] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:18:50.519] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:18:50.529] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:20:32.933] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:20:32.948] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:20:32.979] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:20:40.646] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:20:40.663] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:20:40.668] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:20:40.676] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:20:40.687] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:20:40.706] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:20:40.734] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:20:40.743] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:20:50.052] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:20:50.067] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:20:50.073] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:20:50.080] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:20:50.091] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:20:50.106] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:20:50.157] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:20:50.166] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:21:36.064] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:21:36.081] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:21:36.086] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:21:36.095] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:21:36.105] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:21:36.116] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:21:36.154] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:21:36.163] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:21:48.869] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:21:48.887] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:21:48.899] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:21:48.906] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:21:48.924] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:21:48.937] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:21:48.994] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:21:49.002] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:22:22.723] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:22:22.738] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:22:22.745] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:22:22.752] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:22:22.763] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:22:22.775] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:22:22.807] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:22:22.817] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:22:39.024] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:22:39.039] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:22:39.044] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:22:39.052] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:22:39.063] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:22:39.074] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:22:39.107] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:22:39.118] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:22:55.496] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:22:55.529] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:22:55.539] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:22:55.546] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:22:55.555] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:22:55.565] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:22:55.582] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:22:55.590] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:23:49.484] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:23:49.499] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:23:49.503] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:23:49.511] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:23:49.526] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:23:49.541] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:23:49.602] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:23:49.611] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:25:00.146] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:25:00.161] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:25:00.164] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:25:00.173] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:25:00.182] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:25:00.196] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:25:00.224] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:25:00.232] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:25:15.511] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:25:15.523] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:25:15.530] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:25:15.538] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:25:15.547] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:25:15.559] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:25:15.575] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:25:15.583] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:25:32.513] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:25:32.529] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:25:32.534] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:25:32.543] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:25:32.551] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:25:32.563] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:25:32.697] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:25:32.708] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:26:49.745] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:26:49.760] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:26:49.766] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:26:49.774] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:26:49.784] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:26:49.797] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:26:49.827] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:26:49.837] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:26:57.644] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:26:57.659] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:26:57.666] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:26:57.673] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:26:57.692] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:26:57.703] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:26:57.719] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:26:57.727] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:27:16.484] [undefined] POST(/): try to post comment
[2025-08-16 10:27:16.497] [undefined] POST(/): successfully post comment with status 200
[2025-08-16 10:27:19.129] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:27:19.136] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:27:19.144] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:27:19.151] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:27:19.161] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:27:19.171] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:27:19.186] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:27:19.194] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:27:22.188] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:27:22.203] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:27:22.209] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:27:22.218] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:27:22.229] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:27:22.241] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:27:22.277] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:27:22.285] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:28:10.735] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:28:10.749] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:10.754] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:28:10.763] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:10.774] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:28:10.788] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:28:10.806] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:28:10.815] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:28:39.169] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:28:39.185] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:39.199] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:28:39.207] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:39.217] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:28:39.234] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:28:39.271] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:28:39.282] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:28:43.413] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:28:43.425] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:43.431] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:28:43.438] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:43.449] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:28:43.461] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:28:43.558] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:28:43.566] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:28:44.891] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:28:44.904] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:44.909] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:28:44.920] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:44.932] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:28:44.945] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:28:44.965] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:28:44.973] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:28:45.681] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:28:45.696] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:45.701] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:28:45.710] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:45.715] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:28:45.726] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:28:45.754] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:28:45.762] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:28:56.073] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:28:56.090] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:28:56.095] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:28:56.102] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:28:56.112] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:28:56.123] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:28:56.149] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:28:56.156] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:29:02.728] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:29:02.758] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:29:02.764] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:29:02.774] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:29:02.780] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:29:02.791] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:29:02.821] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:29:02.828] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:29:12.843] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:29:12.858] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:29:12.864] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:29:12.871] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:29:12.881] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:29:12.893] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:29:12.915] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:29:12.923] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 10:33:13.987] [undefined] GET(/:id): try to get video 1
[2025-08-16 10:33:14.001] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:33:14.005] [undefined] GET(/:id): successfully get video 1 with status 200
[2025-08-16 10:33:14.015] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:33:14.022] [undefined] GET(/:id/similar): try to get similar videos for video 1
[2025-08-16 10:33:14.037] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
[2025-08-16 10:33:14.057] [undefined] GET(/:id/views): try to add views for video 1
[2025-08-16 10:33:14.069] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
[2025-08-16 10:33:22.654] [undefined] GET(/:id): try to get video 2
[2025-08-16 10:33:22.668] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
[2025-08-16 10:33:22.674] [undefined] GET(/:id): successfully get video 2 with status 200
[2025-08-16 10:33:22.681] [undefined] GET(/:id): Playlist retrieved with id 1 with status 200
[2025-08-16 10:33:22.689] [undefined] GET(/:id/similar): try to get similar videos for video 2
[2025-08-16 10:33:22.703] [undefined] GET(/:id/similar): successfully get similar videos for video 2 with status 200
[2025-08-16 10:33:22.718] [undefined] GET(/:id/views): try to add views for video 2
[2025-08-16 10:33:22.727] [undefined] GET(/:id/views): successfully added views for video 2 with status 200
[2025-08-16 16:10:03.689] [undefined] POST(/login): try to login with username 'astria'
[2025-08-16 16:10:03.742] [undefined] POST(/login): Successfully logged in with status 200

BIN
frontend/src/assets/img/background.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

4
frontend/src/assets/svg/eye-slash.svg

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" >
<!--Boxicons v3.0 https://boxicons.com | License https://docs.boxicons.com/free-->
<path d="M12 17c-5.35 0-7.42-3.84-7.93-5 .2-.46.65-1.34 1.45-2.23l-1.4-1.4c-1.49 1.65-2.06 3.28-2.08 3.31-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68.91 0 1.73-.1 2.49-.26l-1.77-1.77c-.24.02-.47.03-.72.03ZM21.95 12.32c.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68-1.84 0-3.36.39-4.61.97L2.71 1.29 1.3 2.7l4.32 4.32 1.42 1.42 2.27 2.27 3.98 3.98 1.8 1.8 1.53 1.53 4.68 4.68 1.41-1.41-4.32-4.32c2.61-1.95 3.55-4.61 3.56-4.65m-7.25.97c.19-.39.3-.83.3-1.29 0-1.64-1.36-3-3-3-.46 0-.89.11-1.29.3l-1.8-1.8c.88-.31 1.9-.5 3.08-.5 5.35 0 7.42 3.85 7.93 5-.3.69-1.18 2.33-2.96 3.55z"></path>
</svg>

After

Width:  |  Height:  |  Size: 764 B

4
frontend/src/assets/svg/eye.svg

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" >
<!--Boxicons v3.0 https://boxicons.com | License https://docs.boxicons.com/free-->
<path d="M12 9a3 3 0 1 0 0 6 3 3 0 1 0 0-6"></path><path d="M12 19c7.63 0 9.93-6.62 9.95-6.68.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68s-9.93 6.61-9.95 6.67c-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68Zm0-12c5.35 0 7.42 3.85 7.93 5-.5 1.16-2.58 5-7.93 5s-7.42-3.84-7.93-5c.5-1.16 2.58-5 7.93-5"></path>
</svg>

After

Width:  |  Height:  |  Size: 487 B

17
frontend/src/components/PlaylistVideoCard.jsx

@ -0,0 +1,17 @@
export default function PlaylistVideoCard({ video, playlistId, navigation, currentVideo }) {
return (
<div className="glassmorphism flex items-center gap-2 p-2" onClick={() => navigation(`/video/${video.id}?playlistId=${playlistId}`)} >
<div className="relative" >
<img src={video.thumbnail} alt={video.title} className="h-16 object-cover rounded-sm" />
{currentVideo == video.id && (
<div className="absolute inset-0 bg-black opacity-80 rounded-sm w-full h-full flex items-center justify-center">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" className="fill-white"><path d="M7 6v12l10-6z"></path></svg>
</div>
)}
</div>
<h3 className="font-montserrat font-medium text-white">{video.title}</h3>
</div>
);
}

4
frontend/src/components/VideoCard.jsx

@ -25,10 +25,10 @@ import { useNavigate } from 'react-router-dom';
// }
// ]
export default function VideoCard({ video, showControls = false, onDelete = () => {} }) {
export default function VideoCard({ video, showControls = false, onDelete = () => {}, link = `/video/${video.id}` }) {
const navigation = useNavigate();
const handleClick = () => {
navigation(`/video/${video.id}`, {
navigation(link, {
state: { video }
})
}

2
frontend/src/pages/Home.jsx

@ -46,7 +46,7 @@ export default function Home() {
return (
<div className="min-w-screen min-h-screen bg-linear-to-br from-left-gradient to-right-gradient">
<Navbar isSearchPage={false} />
<main className="px-36">
{/* Hero section */}

50
frontend/src/pages/Login.jsx

@ -10,7 +10,8 @@ export default function Login() {
});
const [alerts, setAlerts] = useState([]);
const [loading, setLoading] = useState(false);
const [showPassword, setShowPassword] = useState(false);
const navigate = useNavigate();
const { login } = useAuth();
@ -50,12 +51,12 @@ export default function Login() {
<Navbar isSearchPage={false} alerts={alerts} onCloseAlert={onCloseAlert} />
<div className="flex justify-center items-center min-h-screen pt-20">
<div className="bg-white p-8 rounded-lg shadow-lg w-full max-w-md">
<h2 className="text-3xl font-bold text-center mb-6 font-montserrat">Connexion</h2>
<div className="glassmorphism p-8 rounded-lg shadow-lg w-full max-w-md">
<h2 className="text-3xl font-bold text-center mb-6 font-montserrat text-white">Connexion</h2>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label htmlFor="username" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="username" className="block text-sm font-medium text-white mb-1">
Nom d'utilisateur
</label>
<input
@ -65,25 +66,42 @@ export default function Login() {
value={formData.username}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-3 py-2 glassmorphism text-white rounded-md focus:outline-none"
placeholder="Entrez votre nom d'utilisateur"
/>
</div>
<div>
<label htmlFor="password" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="password" className="block text-sm font-medium text-white mb-1">
Mot de passe
</label>
<input
type="password"
id="password"
name="password"
value={formData.password}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Entrez votre mot de passe"
/>
<div className='w-full glassmorphism flex items-center'>
<input
type={showPassword ? "text" : "password"}
id="password"
name="password"
value={formData.password}
onChange={handleChange}
required
className="flex-1 px-3 py-2 focus:outline-none text-white"
placeholder="Entrez votre mot de passe"
/>
<button
type="button"
onClick={() => setShowPassword(!showPassword)}
className="absolute right-3 top-1/2 transform -translate-y-1/2"
>
{showPassword ? (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" className='fill-white' viewBox="0 0 24 24" >
<path d="M12 9a3 3 0 1 0 0 6 3 3 0 1 0 0-6"></path><path d="M12 19c7.63 0 9.93-6.62 9.95-6.68.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68s-9.93 6.61-9.95 6.67c-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68Zm0-12c5.35 0 7.42 3.85 7.93 5-.5 1.16-2.58 5-7.93 5s-7.42-3.84-7.93-5c.5-1.16 2.58-5 7.93-5"></path>
</svg>
) : (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" className='fill-white' >
<path d="M12 17c-5.35 0-7.42-3.84-7.93-5 .2-.46.65-1.34 1.45-2.23l-1.4-1.4c-1.49 1.65-2.06 3.28-2.08 3.31-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68.91 0 1.73-.1 2.49-.26l-1.77-1.77c-.24.02-.47.03-.72.03ZM21.95 12.32c.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68-1.84 0-3.36.39-4.61.97L2.71 1.29 1.3 2.7l4.32 4.32 1.42 1.42 2.27 2.27 3.98 3.98 1.8 1.8 1.53 1.53 4.68 4.68 1.41-1.41-4.32-4.32c2.61-1.95 3.55-4.61 3.56-4.65m-7.25.97c.19-.39.3-.83.3-1.29 0-1.64-1.36-3-3-3-.46 0-.89.11-1.29.3l-1.8-1.8c.88-.31 1.9-.5 3.08-.5 5.35 0 7.42 3.85 7.93 5-.3.69-1.18 2.33-2.96 3.55z"></path>
</svg>
)}
</button>
</div>
</div>
<button

3
frontend/src/pages/Playlist.jsx

@ -77,7 +77,8 @@ export default function Playlist() {
key={video.id}
video={video}
showControls={true}
onDelete={onDeleteVideo}
onDelete={onDeleteVideo}
link={`/video/${video.id}?playlistId=${playlist.id}`}
/>
)) : (
<p className="text-white">Aucun vidéo trouvée dans cette playlist.</p>

100
frontend/src/pages/Register.jsx

@ -15,7 +15,9 @@ export default function Register() {
const [loading, setLoading] = useState(false);
const [previewImage, setPreviewImage] = useState(null);
const [alerts, setAlerts] = useState([]);
const [showPassword, setShowPassword] = useState(false);
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
const navigate = useNavigate();
const { register } = useAuth();
@ -83,12 +85,12 @@ export default function Register() {
<Navbar isSearchPage={false} alerts={alerts} onCloseAlert={onCloseAlert} />
<div className="flex justify-center items-center min-h-screen pt-20 pb-10">
<div className="bg-white p-8 rounded-lg shadow-lg w-full max-w-md">
<h2 className="text-3xl font-bold text-center mb-6 font-montserrat">Créer un compte</h2>
<div className="glassmorphism p-8 rounded-lg shadow-lg w-full max-w-md">
<h2 className="text-3xl font-bold text-center mb-6 font-montserrat text-white">Créer un compte</h2>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<label htmlFor="email" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="email" className="block text-sm font-medium font-montserrat text-white mb-1">
Email
</label>
<input
@ -98,13 +100,13 @@ export default function Register() {
value={formData.email}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-3 py-2 glassmorphism focus:outline-none text-white"
placeholder="Entrez votre email"
/>
</div>
<div>
<label htmlFor="username" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="username" className="block text-sm font-medium font-montserrat text-white mb-1">
Nom d'utilisateur
</label>
<input
@ -114,45 +116,79 @@ export default function Register() {
value={formData.username}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-3 py-2 glassmorphism focus:outline-none text-white"
placeholder="Entrez votre nom d'utilisateur"
/>
</div>
<div>
<label htmlFor="password" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="password" className="block text-sm font-medium font-montserrat text-white mb-1">
Mot de passe
</label>
<input
type="password"
id="password"
name="password"
value={formData.password}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Entrez votre mot de passe"
/>
<div className='w-full glassmorphism flex items-center'>
<input
type={showPassword ? "text" : "password"}
id="password"
name="password"
value={formData.password}
onChange={handleChange}
required
className="flex-1 px-3 py-2 focus:outline-none text-white"
placeholder="Entrez votre mot de passe"
/>
<button
type="button"
onClick={() => setShowPassword(!showPassword)}
className="absolute right-3 top-1/2 transform -translate-y-1/2"
>
{showPassword ? (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" className='fill-white' viewBox="0 0 24 24" >
<path d="M12 9a3 3 0 1 0 0 6 3 3 0 1 0 0-6"></path><path d="M12 19c7.63 0 9.93-6.62 9.95-6.68.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68s-9.93 6.61-9.95 6.67c-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68Zm0-12c5.35 0 7.42 3.85 7.93 5-.5 1.16-2.58 5-7.93 5s-7.42-3.84-7.93-5c.5-1.16 2.58-5 7.93-5"></path>
</svg>
) : (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" className='fill-white' >
<path d="M12 17c-5.35 0-7.42-3.84-7.93-5 .2-.46.65-1.34 1.45-2.23l-1.4-1.4c-1.49 1.65-2.06 3.28-2.08 3.31-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68.91 0 1.73-.1 2.49-.26l-1.77-1.77c-.24.02-.47.03-.72.03ZM21.95 12.32c.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68-1.84 0-3.36.39-4.61.97L2.71 1.29 1.3 2.7l4.32 4.32 1.42 1.42 2.27 2.27 3.98 3.98 1.8 1.8 1.53 1.53 4.68 4.68 1.41-1.41-4.32-4.32c2.61-1.95 3.55-4.61 3.56-4.65m-7.25.97c.19-.39.3-.83.3-1.29 0-1.64-1.36-3-3-3-.46 0-.89.11-1.29.3l-1.8-1.8c.88-.31 1.9-.5 3.08-.5 5.35 0 7.42 3.85 7.93 5-.3.69-1.18 2.33-2.96 3.55z"></path>
</svg>
)}
</button>
</div>
</div>
<div>
<label htmlFor="confirmPassword" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="confirmPassword" className="block text-sm font-medium font-montserrat text-white mb-1">
Confirmer le mot de passe
</label>
<input
type="password"
id="confirmPassword"
name="confirmPassword"
value={formData.confirmPassword}
onChange={handleChange}
required
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="Confirmez votre mot de passe"
/>
<div className='w-full glassmorphism flex items-center'>
<input
type={showConfirmPassword ? "text" : "password"}
id="confirmPassword"
name="confirmPassword"
value={formData.confirmPassword}
onChange={handleChange}
required
className="flex-1 px-3 py-2 focus:outline-none text-white"
placeholder="Confirmez votre mot de passe"
/>
<button
type="button"
onClick={() => setShowConfirmPassword(!showConfirmPassword)}
className="absolute right-3 top-1/2 transform -translate-y-1/2"
>
{showPassword ? (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" className='fill-white' viewBox="0 0 24 24" >
<path d="M12 9a3 3 0 1 0 0 6 3 3 0 1 0 0-6"></path><path d="M12 19c7.63 0 9.93-6.62 9.95-6.68.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68s-9.93 6.61-9.95 6.67c-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68Zm0-12c5.35 0 7.42 3.85 7.93 5-.5 1.16-2.58 5-7.93 5s-7.42-3.84-7.93-5c.5-1.16 2.58-5 7.93-5"></path>
</svg>
) : (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" className='fill-white' >
<path d="M12 17c-5.35 0-7.42-3.84-7.93-5 .2-.46.65-1.34 1.45-2.23l-1.4-1.4c-1.49 1.65-2.06 3.28-2.08 3.31-.07.21-.07.43 0 .63.02.07 2.32 6.68 9.95 6.68.91 0 1.73-.1 2.49-.26l-1.77-1.77c-.24.02-.47.03-.72.03ZM21.95 12.32c.07-.21.07-.43 0-.63-.02-.07-2.32-6.68-9.95-6.68-1.84 0-3.36.39-4.61.97L2.71 1.29 1.3 2.7l4.32 4.32 1.42 1.42 2.27 2.27 3.98 3.98 1.8 1.8 1.53 1.53 4.68 4.68 1.41-1.41-4.32-4.32c2.61-1.95 3.55-4.61 3.56-4.65m-7.25.97c.19-.39.3-.83.3-1.29 0-1.64-1.36-3-3-3-.46 0-.89.11-1.29.3l-1.8-1.8c.88-.31 1.9-.5 3.08-.5 5.35 0 7.42 3.85 7.93 5-.3.69-1.18 2.33-2.96 3.55z"></path>
</svg>
)}
</button>
</div>
</div>
<div>
<label htmlFor="profile" className="block text-sm font-medium text-gray-700 mb-1">
<label htmlFor="profile" className="block text-sm font-medium font-montserrat text-white mb-1">
Photo de profil (optionnel)
</label>
<input
@ -161,7 +197,7 @@ export default function Register() {
name="profile"
accept="image/*"
onChange={handleChange}
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-3 py-2 glassmorphism focus:outline-none text-white"
/>
{previewImage && (
<div className="mt-2">
@ -177,7 +213,7 @@ export default function Register() {
<button
type="submit"
disabled={loading}
className="w-full bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50 font-montserrat"
className="w-full bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-blue-500 disabled:opacity-50 font-montserrat"
>
{loading ? 'Création du compte...' : 'Créer un compte'}
</button>

103
frontend/src/pages/Video.jsx

@ -1,4 +1,4 @@
import {useNavigate, useParams} from "react-router-dom";
import {useNavigate, useParams, useSearchParams} from "react-router-dom";
import {useEffect, useState, useRef, useCallback} from "react";
import Navbar from "../components/Navbar.jsx";
import { useAuth } from "../contexts/AuthContext.jsx";
@ -9,7 +9,8 @@ import {addView, getSimilarVideos, getVideoById, toggleLike} from "../services/v
import {subscribe} from "../services/channel.service.js";
import {addComment} from "../services/comment.service.js";
import { getPlaylists } from "../services/user.service.js";
import { addToPlaylist } from "../services/playlist.service.js";
import { addToPlaylist, getPlaylistById } from "../services/playlist.service.js";
import PlaylistVideoCard from "../components/PlaylistVideoCard.jsx";
export default function Video() {
@ -18,8 +19,12 @@ export default function Video() {
const videoRef = useRef(null);
const controllerRef = useRef(null);
const navigation = useNavigate();
const [searchParams] = useSearchParams();
const playlistId = searchParams.get("playlistId");
const isPlaylist = playlistId !== null;
const [video, setVideo] = useState(null);
const [nextVideo, setNextVideo] = useState(null);
const [similarVideos, setSimilarVideos] = useState([]);
const [currentTime, setCurrentTime] = useState(0);
const [duration, setDuration] = useState(0);
@ -29,6 +34,7 @@ export default function Video() {
const [alerts, setAlerts] = useState([]);
const [playlists, setPlaylists] = useState([]);
const [isAddToPlaylistOpen, setIsAddToPlaylistOpen] = useState(false);
const [currentPlaylist, setCurrentPlaylist] = useState(null);
const fetchVideo = useCallback(async () => {
// Fetch video data and similar videos based on the video ID from the URL
@ -62,11 +68,64 @@ export default function Video() {
}
}
const fetchCurrentPlaylist = async () => {
const token = localStorage.getItem('token');
if (!token) return;
if (!playlistId) return;
setCurrentPlaylist(await getPlaylistById(playlistId, token, addAlert));
}
const fetchNextVideo = async () => {
const token = localStorage.getItem('token');
if (!token) return;
console.log("Fetching next video");
console.log("currentPlaylist", currentPlaylist);
console.log("current video id from params:", id, "type:", typeof id);
console.log("playlist videos:", currentPlaylist?.videos?.map(v => ({ id: v.id, type: typeof v.id })));
//Find position of current video id in currentPlaylist.videos
const currentIndex = currentPlaylist?.videos.findIndex(video => {
console.log(`Comparing video.id: ${video.id} (${typeof video.id}) with id: ${id} (${typeof id})`);
return video.id.toString() === id.toString();
});
console.log("currentIndex", currentIndex);
if (currentIndex !== -1) {
if (currentPlaylist?.videos[currentIndex + 1]) {
setNextVideo(currentPlaylist.videos[currentIndex + 1]);
console.log("nextVideo", currentPlaylist.videos[currentIndex + 1]);
}
}
}
const passToNextVideo = () => {
if (!nextVideo) {
console.log("No next video available");
return;
}
console.log("Passing to next video:", nextVideo);
// Navigate to the next video with playlist context
if (playlistId) {
navigation(`/video/${nextVideo.id}?playlistId=${playlistId}`);
} else {
navigation(`/video/${nextVideo.id}`);
}
}
useEffect(() => {
fetchVideo();
fetchPlaylists();
fetchCurrentPlaylist();
}, [fetchVideo]);
useEffect(() => {
fetchNextVideo();
}, [currentPlaylist]);
const handlePlayPause = () => {
if (videoRef.current) {
if (videoRef.current.paused) {
@ -260,10 +319,13 @@ export default function Video() {
onMouseLeave={handleMouseLeave}
>
<video
key={video.id}
id={`video-${video.id}`}
ref={videoRef}
onPlay={handlePlaying}
onTimeUpdate={handleTimeUpdate}
onLoadedMetadata={handleLoadedMetadata}
onEnded={passToNextVideo}
>
<source src={`${video.file}`} type="video/mp4" />
Your browser does not support the video tag.
@ -404,13 +466,36 @@ export default function Video() {
</div>
{/* Similar videos section */}
<div className="flex-1">
<div className="flex flex-col items-center gap-2">
{similarVideos.map((video, index) => (
<div className="w-9/10" key={index}>
<VideoCard video={video} />
</div>
))}
</div>
{
!isPlaylist ? (
<div className="flex flex-col items-center gap-2">
{similarVideos.map((video, index) => (
<div className="w-9/10" key={index}>
<VideoCard video={video} />
</div>
))}
</div>
) : (
<div className="flex flex-col items-center gap-2">
<div className="glassmorphism w-9/10 py-4 px-2" >
<h2 className="font-montserrat text-white text-2xl">{currentPlaylist?.name}</h2>
{
currentPlaylist?.videos && currentPlaylist.videos.length > 0 ? (
<div className="flex flex-col items-center gap-2">
{currentPlaylist.videos.map((video, index) => (
<div className="w-full" key={index}>
<PlaylistVideoCard video={video} playlistId={currentPlaylist.id} navigation={navigation} currentVideo={id} />
</div>
))}
</div>
) : (
<p className="font-montserrat text-white mt-2">Aucune vidéo trouvée dans cette playlist.</p>
)
}
</div>
</div>
)
}
</div>
</>
): (

Loading…
Cancel
Save