diff --git a/backend/app/controllers/playlist.controller.js b/backend/app/controllers/playlist.controller.js
index a03c86d..dc90b56 100644
--- a/backend/app/controllers/playlist.controller.js
+++ b/backend/app/controllers/playlist.controller.js
@@ -83,7 +83,63 @@ export async function getById(req, res) {
const logger = req.body.logger;
const client = await getClient();
- const query = `SELECT * FROM playlists WHERE id = $1`;
+ const query = `
+ SELECT
+ playlists.id,
+ playlists.name,
+ COALESCE(
+ JSON_AGG(
+ JSON_BUILD_OBJECT(
+ 'id', video_data.id,
+ 'title', video_data.title,
+ 'thumbnail', video_data.thumbnail,
+ 'video_description', video_data.description,
+ 'channel', video_data.channel,
+ 'visibility', video_data.visibility,
+ 'file', video_data.file,
+ 'slug', video_data.slug,
+ 'format', video_data.format,
+ 'release_date', video_data.release_date,
+ 'channel_id', video_data.channel,
+ 'owner', channels.owner,
+ 'views', CAST(video_data.views AS TEXT),
+ 'creator', JSON_BUILD_OBJECT(
+ 'name', channels.name,
+ 'profilePicture', users.picture,
+ 'description', channels.description
+ ),
+ 'type', 'video'
+ )
+ ) FILTER (WHERE video_data.id IS NOT NULL),
+ '[]'::json
+ ) AS videos
+ FROM
+ playlists
+ LEFT JOIN playlist_elements ON playlists.id = playlist_elements.playlist
+ LEFT JOIN (
+ SELECT
+ videos.id,
+ videos.title,
+ videos.description,
+ videos.thumbnail,
+ videos.release_date,
+ videos.visibility,
+ videos.file,
+ videos.slug,
+ videos.format,
+ videos.channel,
+ COUNT(history.id) AS views
+ FROM videos
+ LEFT JOIN history ON history.video = videos.id
+ GROUP BY videos.id, videos.title, videos.description, videos.thumbnail, videos.release_date, videos.visibility, videos.file, videos.slug, videos.format, videos.channel
+ ) video_data ON playlist_elements.video = video_data.id
+ LEFT JOIN channels ON video_data.channel = channels.id
+ LEFT JOIN users ON channels.owner = users.id
+ WHERE
+ playlists.id = $1
+ GROUP BY
+ playlists.id;
+ `;
try {
const result = await client.query(query, [id]);
diff --git a/backend/app/controllers/user.controller.js b/backend/app/controllers/user.controller.js
index a065b6c..56f2708 100644
--- a/backend/app/controllers/user.controller.js
+++ b/backend/app/controllers/user.controller.js
@@ -4,6 +4,8 @@ import jwt from "jsonwebtoken";
import path, {dirname} from "path";
import fs from "fs";
import {fileURLToPath} from "url";
+import crypto from "crypto";
+import {sendEmail} from "../utils/mail.js";
export async function register(req, res) {
try {
@@ -43,6 +45,84 @@ export async function register(req, res) {
const playlistQuery = `INSERT INTO playlists (name, owner) VALUES ('A regarder plus tard', $1)`;
await client.query(playlistQuery, [id]);
+ // GENERATE EMAIL HEXA VERIFICATION TOKEN
+ const token = crypto.randomBytes(32).toString("hex").slice(0, 5);
+
+ const textMessage = "Merci de vous être inscrit. Veuillez vérifier votre e-mail. Code: " + token;
+
+ const htmlMessage = `
+
+
+
+
+
+ Bienvenue sur Freetube
+
+
+
+
+
+
+ 🎬 Bienvenue sur Freetube!
+
+
+
+
+
+
+ Bonjour ${user.username}! 👋
+
+
+
+ Merci de vous être inscrit sur Freetube! Nous sommes ravis de vous accueillir dans notre communauté.
+
+
+
+ Pour finaliser votre inscription, veuillez utiliser le code de vérification ci-dessous :
+
+
+
+
+
+ Code de vérification
+
+
+ ${token}
+
+
+
+
+ ⚠️ Ce code expirera dans 1 heure.
+
+
+
+ Si vous n'avez pas créé de compte, vous pouvez ignorer cet e-mail.
+
+
+
+
+
+
+ © 2025 Freetube. Tous droits réservés.
+
+
+
+
+
+ `;
+
+ console.log("Sending email to:", user.email);
+
+ await sendEmail(user.email, "🎬 Bienvenue sur Freetube - Vérifiez votre email", textMessage, htmlMessage);
+
+ // Store the token in the database
+ const expirationDate = new Date();
+ expirationDate.setHours(expirationDate.getHours() + 1); // Token expires in 1 hour
+
+ const insertQuery = `INSERT INTO email_verification (email, token, expires_at) VALUES ($1, $2, $3)`;
+ await client.query(insertQuery, [user.email, token, expirationDate]);
+ client.end();
+
console.log("Successfully registered");
client.end();
logger.write("successfully registered", 200);
@@ -51,7 +131,42 @@ export async function register(req, res) {
console.log(err);
}
+}
+
+export async function verifyEmail(req, res) {
+ const { email, token } = req.body;
+
+ const logger = req.body.logger;
+ logger.action("try to verify email for " + email + " with token " + token);
+ const client = await getClient();
+
+ try {
+ const query = `SELECT * FROM email_verification WHERE email = $1 AND token = $2`;
+ const result = await client.query(query, [email, token]);
+
+ if (result.rows.length === 0) {
+ logger.write("failed to verify email for " + email, 404);
+ return res.status(404).json({ error: "Invalid token or email" });
+ }
+
+ // If we reach this point, the email is verified
+
+ const queryDelete = `DELETE FROM email_verification WHERE email = $1`;
+ await client.query(queryDelete, [email]);
+
+ const updateQuery = `UPDATE users SET is_verified = TRUE WHERE email = $1`;
+ await client.query(updateQuery, [email]);
+
+ logger.write("successfully verified email for " + email, 200);
+ res.status(200).json({ message: "Email verified successfully" });
+ } catch (error) {
+ console.error("Error verifying email:", error);
+ logger.write("failed to verify email for " + email, 500);
+ res.status(500).json({ error: "Internal server error" });
+ } finally {
+ client.end();
+ }
}
export async function login(req, res) {
diff --git a/backend/app/routes/user.route.js b/backend/app/routes/user.route.js
index 814cd37..bb2e095 100644
--- a/backend/app/routes/user.route.js
+++ b/backend/app/routes/user.route.js
@@ -7,7 +7,8 @@ import {
update,
deleteUser,
getChannel, getHistory,
- isSubscribed
+ isSubscribed,
+ verifyEmail
} from "../controllers/user.controller.js";
import {
UserRegister,
@@ -54,4 +55,7 @@ router.get("/:id/history", [addLogger, isTokenValid, User.id, validator], getHis
// CHECK IF SUBSCRIBED TO CHANNEL
router.get("/:id/channel/subscribed", [addLogger, isTokenValid, User.id, Channel.id, validator], isSubscribed)
+// VERIFY EMAIL
+router.post("/verify-email", [addLogger, validator], verifyEmail);
+
export default router;
\ No newline at end of file
diff --git a/backend/app/utils/database.js b/backend/app/utils/database.js
index 323777c..57ce344 100644
--- a/backend/app/utils/database.js
+++ b/backend/app/utils/database.js
@@ -23,7 +23,8 @@ export async function initDb() {
email VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
- picture VARCHAR(255)
+ picture VARCHAR(255),
+ is_verified BOOLEAN NOT NULL DEFAULT FALSE
);`;
await client.query(query);
@@ -31,7 +32,7 @@ export async function initDb() {
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
- owner INTEGER NOT NULL REFERENCES users(id)
+ owner INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)`
await client.query(query);
@@ -40,7 +41,7 @@ export async function initDb() {
title VARCHAR(255) NOT NULL,
thumbnail VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
- channel INTEGER NOT NULL REFERENCES channels(id),
+ channel INTEGER NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
visibility VARCHAR(50) NOT NULL DEFAULT 'public',
file VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL,
@@ -53,16 +54,16 @@ export async function initDb() {
(
id SERIAL PRIMARY KEY,
content TEXT NOT NULL,
- author INTEGER NOT NULL REFERENCES users(id),
- video INTEGER NOT NULL REFERENCES videos(id),
+ author INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
+ video INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
)`;
await client.query(query);
query = `CREATE TABLE IF NOT EXISTS likes (
id SERIAL PRIMARY KEY,
- owner INTEGER NOT NULL REFERENCES users(id),
- video INTEGER NOT NULL REFERENCES videos(id),
+ owner INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
+ video INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
);`;
await client.query(query);
@@ -70,21 +71,21 @@ export async function initDb() {
query = `CREATE TABLE IF NOT EXISTS playlists (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
- owner INTEGER NOT NULL REFERENCES users(id)
+ owner INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)`;
await client.query(query);
query = `CREATE TABLE IF NOT EXISTS playlist_elements (
id SERIAL PRIMARY KEY,
- video INTEGER NOT NULL REFERENCES videos(id),
- playlist INTEGER NOT NULL REFERENCES playlists(id)
+ video INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
+ playlist INTEGER NOT NULL REFERENCES playlists(id) ON DELETE CASCADE
)`;
await client.query(query);
query = `CREATE TABLE IF NOT EXISTS subscriptions (
id SERIAL PRIMARY KEY,
- channel INTEGER NOT NULL REFERENCES channels(id),
- owner INTEGER NOT NULL REFERENCES users(id)
+ channel INTEGER NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
+ owner INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)`;
await client.query(query);
@@ -96,19 +97,28 @@ export async function initDb() {
await client.query(query);
query = `CREATE TABLE IF NOT EXISTS video_tags (
- video INTEGER NOT NULL REFERENCES videos(id),
- tag INTEGER NOT NULL REFERENCES tags(id)
+ video INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
+ tag INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE
)`
await client.query(query);
query = `CREATE TABLE IF NOT EXISTS history (
id SERIAL PRIMARY KEY,
- user_id INTEGER NOT NULL REFERENCES users(id),
- video INTEGER NOT NULL REFERENCES videos(id),
+ user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
+ video INTEGER NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
viewed_at TIMESTAMP NOT NULL DEFAULT NOW()
)`;
await client.query(query);
+ query = `CREATE TABLE IF NOT EXISTS email_verification (
+ id SERIAL PRIMARY KEY,
+ email VARCHAR(255) NOT NULL,
+ token VARCHAR(255) NOT NULL,
+ created_at TIMESTAMP NOT NULL DEFAULT NOW(),
+ expires_at TIMESTAMP NOT NULL
+ )`;
+ await client.query(query);
+
} catch (e) {
console.error("Error initializing database:", e);
}
diff --git a/backend/app/utils/mail.js b/backend/app/utils/mail.js
new file mode 100644
index 0000000..9fb04c1
--- /dev/null
+++ b/backend/app/utils/mail.js
@@ -0,0 +1,30 @@
+import nodemailer from "nodemailer";
+
+function getTransporter() {
+ return nodemailer.createTransport({
+ host: "smtp.gmail.com",
+ port: 587,
+ secure: false,
+ auth: {
+ user: process.env.GMAIL_USER,
+ pass: "yuuu kvoi ytrf blla",
+ },
+ });
+};
+
+export function sendEmail(to, subject, text, html = null) {
+ const transporter = getTransporter();
+ const mailOptions = {
+ from: process.env.GMAIL_USER,
+ to,
+ subject,
+ text,
+ };
+
+ // Add HTML if provided
+ if (html) {
+ mailOptions.html = html;
+ }
+
+ return transporter.sendMail(mailOptions);
+}
diff --git a/backend/logs/access.log b/backend/logs/access.log
index 47212eb..c893ed1 100644
--- a/backend/logs/access.log
+++ b/backend/logs/access.log
@@ -5490,3 +5490,1940 @@
[2025-08-14 13:42:45.808] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
[2025-08-14 13:42:45.822] [undefined] GET(/:id/views): try to add views for video 3
[2025-08-14 13:42:45.830] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-14 20:15:10.659] [undefined] GET(/:id): try to get video 3
+[2025-08-14 20:15:10.669] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-14 20:15:10.682] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-14 20:15:10.697] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-14 20:15:10.720] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-14 20:15:10.731] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-14 20:15:13.199] [undefined] GET(/:id/channel): try to retrieve channel of user 5
+[2025-08-14 20:15:13.203] [undefined] GET(/:id/channel): successfully retrieved channel of user 5 with status 200
+[2025-08-14 20:15:13.207] [undefined] GET(/:id/history): try to retrieve history of user 5
+[2025-08-14 20:15:13.210] [undefined] GET(/:id/history): successfully retrieved history of user 5 with status 200
+[2025-08-14 20:15:13.218] [undefined] GET(/user/:id): Playlists retrieved for user with id 5 with status 200
+[2025-08-14 20:15:14.337] [undefined] GET(/:id): try to get channel with id 4
+[2025-08-14 20:15:14.346] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:15:14.350] [undefined] GET(/:id): Successfully get channel with id 4 with status 200
+[2025-08-14 20:15:14.357] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:15:19.739] [undefined] GET(/:id): try to get channel with id 4
+[2025-08-14 20:15:19.749] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:15:19.752] [undefined] GET(/:id): Successfully get channel with id 4 with status 200
+[2025-08-14 20:15:19.759] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:15:21.113] [undefined] GET(/:id/channel): try to retrieve channel of user 5
+[2025-08-14 20:15:21.116] [undefined] GET(/:id/channel): successfully retrieved channel of user 5 with status 200
+[2025-08-14 20:15:22.600] [undefined] PUT(/:id): try to update channel with id 4
+[2025-08-14 20:15:22.605] [undefined] PUT(/:id): Successfully updated channel with status 200
+[2025-08-14 20:15:26.948] [undefined] GET(/:id): try to get video 1
+[2025-08-14 20:15:26.959] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-14 20:15:26.970] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-14 20:15:26.984] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-14 20:15:27.021] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-14 20:15:27.031] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-14 20:16:02.804] [undefined] GET(/:id): try to get video 3
+[2025-08-14 20:16:02.814] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-14 20:16:02.840] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-14 20:16:02.857] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-14 20:16:02.890] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-14 20:16:02.897] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-14 20:16:04.968] [undefined] GET(/:id/channel): try to retrieve channel of user 5
+[2025-08-14 20:16:04.971] [undefined] GET(/:id/channel): successfully retrieved channel of user 5 with status 200
+[2025-08-14 20:16:04.974] [undefined] GET(/:id/history): try to retrieve history of user 5
+[2025-08-14 20:16:04.978] [undefined] GET(/:id/history): successfully retrieved history of user 5 with status 200
+[2025-08-14 20:16:04.984] [undefined] GET(/user/:id): Playlists retrieved for user with id 5 with status 200
+[2025-08-14 20:16:05.581] [undefined] GET(/:id): try to get channel with id 4
+[2025-08-14 20:16:05.590] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:16:05.593] [undefined] GET(/:id): Successfully get channel with id 4 with status 200
+[2025-08-14 20:16:05.601] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:16:09.229] [undefined] PUT(/:id): try to update channel with id 4
+[2025-08-14 20:16:09.234] [undefined] PUT(/:id): Successfully updated channel with status 200
+[2025-08-14 20:19:48.593] [undefined] POST(/login): try to login with username 'sacha2'
+[2025-08-14 20:19:48.645] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-14 20:19:50.397] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:19:50.401] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:19:50.404] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:19:50.409] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:19:50.416] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:19:52.573] [undefined] GET(/:id): try to get channel with id 1
+[2025-08-14 20:19:52.582] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:19:52.586] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
+[2025-08-14 20:19:52.596] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:19:57.515] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:19:57.518] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:19:59.762] [undefined] GET(/:id): try to get channel with id 1
+[2025-08-14 20:19:59.773] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:19:59.777] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
+[2025-08-14 20:19:59.785] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:20:00.371] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:20:00.375] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:20:00.377] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:20:00.382] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:20:00.389] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:23:01.532] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:23:01.536] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:23:01.538] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:23:01.544] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:23:01.551] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:31:39.192] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:31:39.195] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:31:39.198] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:31:39.204] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:31:39.211] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:31:53.915] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:31:53.918] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:31:53.942] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:31:53.947] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:31:53.956] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:31:56.423] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:31:56.426] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:31:56.428] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:31:56.434] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:31:56.442] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:32:02.387] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:32:02.390] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:32:02.393] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:32:02.399] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:32:02.406] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:32:11.988] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:32:11.992] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:32:11.994] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:32:11.999] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:32:12.007] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:32:12.840] [undefined] GET(/:id): try to get channel with id 1
+[2025-08-14 20:32:12.850] [undefined] GET(/:id/stats): try to get stats
+[2025-08-14 20:32:12.854] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
+[2025-08-14 20:32:12.862] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-14 20:32:13.944] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-14 20:32:13.947] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-14 20:32:13.950] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-14 20:32:13.953] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-14 20:32:13.961] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-14 20:32:50.173] [undefined] POST(/): try to register a user with username: test4 and email: test4@gmail.com
+[2025-08-14 20:32:50.223] [undefined] POST(/): successfully registered with status 200
+[2025-08-14 20:32:50.230] [undefined] POST(/login): try to login with username 'test4'
+[2025-08-14 20:32:50.281] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-14 20:32:51.673] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:32:51.677] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:32:51.679] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:32:51.682] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:32:51.691] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:33:07.906] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:33:07.909] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:33:07.911] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:33:07.914] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:33:07.924] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:33:16.345] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:33:16.348] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:33:16.351] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:33:16.354] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:33:16.363] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:34:21.620] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:34:21.624] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:21.627] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:34:21.631] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:21.639] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:34:36.364] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:34:36.367] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:34:36.369] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:36.372] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:36.381] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:34:55.418] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:34:55.422] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:55.425] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:34:55.428] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:34:55.436] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:35:04.997] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:35:05.000] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:35:05.004] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:35:05.008] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:35:05.015] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:36:01.767] [undefined] PUT(/:id): try to update user 6
+[2025-08-14 20:36:01.772] [undefined] PUT(/:id): successfully updated user 6 with status 200
+[2025-08-14 20:36:03.230] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:36:03.233] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:36:03.236] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:36:03.239] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:36:03.248] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:41:31.791] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:41:31.794] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:41:31.797] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:41:31.800] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:41:31.808] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:41:50.529] [undefined] GET(/:id/channel): try to retrieve channel of user 6
+[2025-08-14 20:41:50.532] [undefined] GET(/:id/history): try to retrieve history of user 6
+[2025-08-14 20:41:50.535] [undefined] GET(/:id/channel): failed to retrieve channel of user 6 because it doesn't exist with status 404
+[2025-08-14 20:41:50.539] [undefined] GET(/:id/history): failed to retrieve history of user 6 because it doesn't exist with status 404
+[2025-08-14 20:41:50.550] [undefined] GET(/user/:id): Playlists retrieved for user with id 6 with status 200
+[2025-08-14 20:41:53.692] [undefined] POST(/): Playlist created with id 7 with status 200
+[2025-08-15 07:15:46.354] [undefined] POST(/login): try to login with username 'sacha2'
+[2025-08-15 07:15:46.413] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-15 07:16:04.703] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:16:04.706] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:16:04.709] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:16:04.714] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:16:04.722] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:16:25.767] [undefined] POST(/): Playlist created with id 8 with status 200
+[2025-08-15 07:16:26.987] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:16:26.989] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:16:26.991] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:16:26.995] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:16:27.006] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:15.294] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:17:15.298] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:17:15.322] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:17:15.327] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:17:15.333] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:22.303] [undefined] POST(/): Playlist created with id 9 with status 200
+[2025-08-15 07:17:22.321] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:41.905] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:17:41.908] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:17:41.916] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:17:41.921] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:17:41.927] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:43.230] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:17:43.233] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:17:43.258] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:17:43.261] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:17:43.269] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:44.606] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:17:44.609] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:17:44.612] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:17:44.616] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:17:44.623] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:17:45.539] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:17:45.543] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:17:45.545] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:17:45.549] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:17:45.556] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:18:53.759] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:18:53.769] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:18:53.782] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:18:53.794] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:18:53.821] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:18:53.832] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:19:35.214] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:19:35.225] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:19:35.238] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:19:35.251] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:19:35.273] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:19:35.284] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:19:46.027] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:19:46.037] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:19:46.050] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:19:46.068] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:19:46.093] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:19:46.101] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:21:30.310] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:21:30.320] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:21:30.333] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:21:30.348] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:21:30.386] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:21:30.395] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:21:32.380] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:21:32.390] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:21:32.403] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:21:32.418] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:21:32.441] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:21:32.449] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:21:43.838] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:21:43.848] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:21:43.860] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:21:43.876] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:21:43.916] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:21:43.925] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:22:08.679] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:22:08.689] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:22:08.701] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:22:08.716] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:22:08.747] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:22:08.757] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:22:21.736] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:22:21.747] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:22:21.762] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:22:21.777] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:22:21.802] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:22:21.811] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:22:43.624] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:22:43.634] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:22:43.647] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:22:43.662] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:22:43.692] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:22:43.703] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:23:56.553] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:23:56.564] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:23:56.577] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:23:56.591] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:23:56.613] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:23:56.622] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:26:28.747] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:26:28.757] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:26:28.770] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:26:28.798] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:26:28.834] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:26:28.843] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:26:36.036] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:26:36.047] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:26:36.063] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:26:36.075] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:26:36.122] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:26:36.132] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:27:02.346] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:27:02.357] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:27:02.360] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:27:02.374] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:27:02.385] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:27:02.417] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:27:02.428] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:28:53.335] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:28:53.346] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:28:53.351] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:28:53.366] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:28:53.382] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:28:53.407] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:28:53.415] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:29:06.301] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:29:06.311] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:29:06.315] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:29:06.327] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:29:06.341] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:29:06.370] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:29:06.380] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:29:14.077] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:29:14.088] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:29:14.092] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:29:14.109] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:29:14.124] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:29:14.156] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:29:14.165] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:29:23.599] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:29:23.610] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:29:23.614] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:29:23.630] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:29:23.643] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:29:23.669] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:29:23.677] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:29:34.032] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:29:34.042] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:29:34.047] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:29:34.061] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:29:34.075] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:29:34.117] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:29:34.127] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:29:46.216] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:29:46.227] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:29:46.232] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:29:46.251] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:29:46.265] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:29:46.287] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:29:46.297] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:30:08.411] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:30:08.421] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:30:08.425] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:30:08.438] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:30:08.451] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:30:08.495] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:30:08.504] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:30:17.869] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:30:17.880] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:30:17.899] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:30:17.911] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:30:17.926] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:30:17.956] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:30:17.966] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:30:49.412] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:30:49.422] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:30:49.427] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:30:49.438] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:30:49.453] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:30:49.477] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:30:49.493] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:31:32.628] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:31:32.640] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:31:32.645] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:31:32.659] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:31:32.674] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:31:32.704] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:31:32.713] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:32:10.030] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:32:10.041] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:32:10.045] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:32:10.057] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:32:10.070] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:32:10.105] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:32:10.115] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:32:30.091] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:32:30.102] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:32:30.927] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:32:39.410] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:32:39.424] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:32:39.432] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:32:39.447] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:32:39.465] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:32:39.492] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:32:39.502] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:07.385] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:07.396] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:07.401] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:07.417] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:07.431] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:07.470] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:07.480] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:20.298] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:20.309] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:20.315] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:20.332] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:20.350] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:20.373] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:20.383] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:27.995] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:28.007] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:28.012] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:28.026] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:28.042] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:28.076] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:28.086] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:33.605] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:33.615] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:33.620] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:33.631] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:33.646] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:33.677] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:33.689] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:47.482] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:47.493] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:47.497] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:47.511] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:47.527] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:47.551] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:47.559] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:53.695] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:53.707] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:53.724] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:53.737] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:53.751] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:53.780] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:53.791] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:33:57.653] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:33:57.665] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:33:57.670] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:33:57.683] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:33:57.700] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:33:57.725] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:33:57.733] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:34:08.528] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:34:08.538] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:34:08.543] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:34:08.556] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:34:08.569] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:34:08.616] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:34:08.625] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:35:58.474] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:35:58.485] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:35:58.490] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:35:58.504] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:35:58.522] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:35:58.544] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:35:58.553] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:36:12.736] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:36:12.747] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:36:12.752] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:36:12.764] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:36:12.778] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:36:12.799] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:36:12.809] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:36:23.117] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:36:23.128] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:36:23.133] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:36:23.145] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:36:23.160] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:36:23.192] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:36:23.202] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:36:35.456] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:36:35.467] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:36:35.472] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:36:35.486] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:36:35.501] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:36:35.545] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:36:35.554] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:38:52.975] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:38:52.987] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:38:52.993] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:38:53.007] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:38:53.022] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:38:53.053] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:38:53.066] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:39:16.059] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:39:16.071] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:39:16.077] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:39:16.091] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:39:16.105] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:39:16.149] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:39:16.160] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:39:34.058] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:39:34.069] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:39:34.073] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:39:34.088] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:39:34.105] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:39:34.130] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:39:34.141] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:40:05.198] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:40:05.209] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:40:05.213] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:40:05.227] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:40:05.244] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:40:05.279] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:40:05.289] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:40:22.330] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:40:22.342] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:40:22.347] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:40:22.361] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:40:22.376] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:40:22.400] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:40:22.409] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:43:58.684] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:43:58.695] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:43:58.699] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:43:58.713] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:43:58.728] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:43:58.771] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:43:58.781] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:44:11.725] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:44:11.737] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:44:11.742] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:44:11.762] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:44:11.775] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:44:11.810] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:44:11.819] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:44:33.503] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:44:33.515] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:44:33.520] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:44:33.542] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:44:33.557] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:44:33.628] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:44:33.640] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:45:01.108] [undefined] GET(/:id): try to get video 3
+[2025-08-15 07:45:01.118] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:45:01.123] [undefined] GET(/:id): successfully get video 3 with status 200
+[2025-08-15 07:45:01.140] [undefined] GET(/:id/similar): try to get similar videos for video 3
+[2025-08-15 07:45:01.153] [undefined] GET(/:id/similar): successfully get similar videos for video 3 with status 200
+[2025-08-15 07:45:01.185] [undefined] GET(/:id/views): try to add views for video 3
+[2025-08-15 07:45:01.194] [undefined] GET(/:id/views): successfully added views for video 3 with status 200
+[2025-08-15 07:45:03.398] [undefined] POST(/:id): Video added to playlist with id 2 with status 200
+[2025-08-15 07:45:12.544] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:45:12.548] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:45:12.551] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:45:12.554] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:45:12.561] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:45:18.685] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:45:18.688] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:45:18.691] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:45:18.695] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:45:18.703] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:46:57.187] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 07:46:57.191] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 07:46:57.195] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 07:46:57.201] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 07:46:57.207] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:53:09.712] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 07:57:29.629] [undefined] GET(/:id): try to get video 10
+[2025-08-15 07:57:29.640] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 07:57:29.645] [undefined] GET(/:id): successfully get video 10 with status 200
+[2025-08-15 07:57:29.661] [undefined] GET(/:id/similar): try to get similar videos for video 10
+[2025-08-15 07:57:29.673] [undefined] GET(/:id/similar): successfully get similar videos for video 10 with status 200
+[2025-08-15 07:57:29.702] [undefined] GET(/:id/views): try to add views for video 10
+[2025-08-15 07:57:29.714] [undefined] GET(/:id/views): successfully added views for video 10 with status 200
+[2025-08-15 07:57:31.756] [undefined] POST(/:id): Video added to playlist with id 2 with status 200
+[2025-08-15 08:01:04.884] [undefined] GET(/:id): try to get video 10
+[2025-08-15 08:01:04.895] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 08:01:04.902] [undefined] GET(/:id): successfully get video 10 with status 200
+[2025-08-15 08:01:04.924] [undefined] GET(/:id/similar): try to get similar videos for video 10
+[2025-08-15 08:01:04.942] [undefined] GET(/:id/similar): successfully get similar videos for video 10 with status 200
+[2025-08-15 08:01:04.989] [undefined] GET(/:id/views): try to add views for video 10
+[2025-08-15 08:01:04.998] [undefined] GET(/:id/views): successfully added views for video 10 with status 200
+[2025-08-15 08:01:08.034] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 08:01:08.037] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 08:01:08.041] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 08:01:08.046] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 08:01:08.053] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 08:01:09.580] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 08:09:51.858] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 08:10:08.586] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 08:10:21.732] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 08:10:21.736] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 08:10:21.739] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 08:10:21.746] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 08:10:21.753] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 08:11:01.489] [undefined] GET(/:id): Error retrieving playlist: missing FROM-clause entry for table "channel" with status 500
+[2025-08-15 08:11:36.075] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:34:51.115] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:34:51.118] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:34:51.126] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:34:51.132] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:34:51.141] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:34:52.476] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:36:02.596] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:36:12.642] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:36:12.646] [undefined] GET(/:id): try to get video 7
+[2025-08-15 11:36:12.657] [undefined] GET(/:id): successfully get video 7 with status 200
+[2025-08-15 11:36:12.669] [undefined] GET(/:id/similar): try to get similar videos for video 7
+[2025-08-15 11:36:12.685] [undefined] GET(/:id/similar): successfully get similar videos for video 7 with status 200
+[2025-08-15 11:36:12.709] [undefined] GET(/:id/views): try to add views for video 7
+[2025-08-15 11:36:12.721] [undefined] GET(/:id/views): successfully added views for video 7 with status 200
+[2025-08-15 11:36:15.330] [undefined] POST(/:id): Video added to playlist with id 9 with status 200
+[2025-08-15 11:36:16.992] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:36:16.996] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:36:16.999] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:36:17.004] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:36:17.010] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:36:19.673] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:36:21.015] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:36:21.017] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:36:21.020] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:36:21.024] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:36:21.031] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:37:36.685] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:37:36.688] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:37:36.691] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:37:36.697] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:37:36.704] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:37:37.540] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:37:46.171] [undefined] GET(/:id): try to get video 7
+[2025-08-15 11:37:46.181] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:37:46.186] [undefined] GET(/:id): successfully get video 7 with status 200
+[2025-08-15 11:37:46.197] [undefined] GET(/:id/similar): try to get similar videos for video 7
+[2025-08-15 11:37:46.211] [undefined] GET(/:id/similar): successfully get similar videos for video 7 with status 200
+[2025-08-15 11:37:46.241] [undefined] GET(/:id/views): try to add views for video 7
+[2025-08-15 11:37:46.251] [undefined] GET(/:id/views): successfully added views for video 7 with status 200
+[2025-08-15 11:37:46.753] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:37:48.179] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:37:48.182] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:37:48.184] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:37:48.189] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:37:48.197] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:38:45.205] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:38:45.208] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:38:45.217] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:38:45.221] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:38:45.228] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:39:25.429] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:39:25.432] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:39:25.436] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:39:25.441] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:39:25.447] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:39:33.775] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:39:33.780] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:39:33.783] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:39:33.788] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:39:33.796] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:39:42.483] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:39:42.487] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:39:42.492] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:39:42.499] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:39:42.506] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:39:54.583] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:39:54.587] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:39:54.590] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:39:54.597] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:39:54.604] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:40:01.578] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:02.989] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:40:02.992] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:40:02.996] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:40:03.001] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:40:03.006] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:40:03.583] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:04.040] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:40:04.044] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:40:04.047] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:40:04.050] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:40:04.058] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:40:04.695] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:40:05.139] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:40:05.142] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:40:05.145] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:40:05.149] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:40:05.156] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:40:05.674] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:40:06.063] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:40:06.067] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:40:06.070] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:40:06.074] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:40:06.082] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:40:06.616] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:32.573] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:33.203] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:33.945] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:45.160] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:45.922] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:40:51.863] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:41:01.257] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:41:01.260] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:41:01.264] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:41:01.269] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:41:01.277] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:23.314] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:42:23.319] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:42:23.344] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:42:23.351] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:42:23.358] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:24.351] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:42:27.415] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:42:27.419] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:42:27.427] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:42:27.432] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:42:27.439] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:28.016] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:42:28.584] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:42:28.587] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:42:28.591] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:42:28.595] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:42:28.600] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:29.091] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:42:30.125] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:42:30.129] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:42:30.131] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:42:30.136] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:42:30.144] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:55.444] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:42:55.447] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:42:55.450] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:42:55.454] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:42:55.462] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:42:55.946] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:43:04.667] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:43:25.896] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:44:01.336] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:44:08.744] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:44:40.681] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:44:51.683] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:45:09.918] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:45:17.445] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:45:23.115] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:46:00.470] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:46:03.102] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:46:03.105] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:46:03.107] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:46:03.113] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:46:03.121] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:46:06.450] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:46:07.270] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:51:55.980] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:52:34.410] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:52:49.764] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:52:59.942] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:53:14.793] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:53:23.643] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:53:42.731] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:54:00.339] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:54:35.499] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:54:53.925] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:55:09.339] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:55:22.887] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 11:56:17.396] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:56:17.401] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:56:17.407] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:56:17.411] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:56:17.418] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:56:18.071] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:56:43.895] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:57:03.654] [undefined] GET(/:id): Playlist retrieved with id 8 with status 200
+[2025-08-15 11:57:05.682] [undefined] DELETE(/:id): Playlist deleted with status 200
+[2025-08-15 11:57:07.595] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:07.598] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:07.601] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:07.606] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:07.614] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:27.626] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:27.630] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:27.634] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:27.641] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:27.650] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:31.598] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:31.602] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:31.605] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:31.611] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:31.616] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:45.169] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:57:49.098] [undefined] DELETE(/:id): Error deleting playlist: update or delete on table "playlists" violates foreign key constraint "playlist_elements_playlist_fkey" on table "playlist_elements" with status 500
+[2025-08-15 11:57:49.135] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:49.139] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:49.141] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:49.147] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:49.156] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:50.662] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:50.665] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:50.668] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:50.674] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:50.680] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:51.421] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:51.424] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:51.427] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:51.431] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:51.439] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:52.853] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:57:53.587] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:53.591] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:53.595] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:53.599] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:53.605] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 11:57:54.570] [undefined] GET(/:id): Playlist retrieved with id 9 with status 200
+[2025-08-15 11:57:59.003] [undefined] DELETE(/:id): Error deleting playlist: update or delete on table "playlists" violates foreign key constraint "playlist_elements_playlist_fkey" on table "playlist_elements" with status 500
+[2025-08-15 11:57:59.062] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-15 11:57:59.065] [undefined] GET(/:id/channel): successfully retrieved channel of user 2 with status 200
+[2025-08-15 11:57:59.069] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-15 11:57:59.074] [undefined] GET(/:id/history): successfully retrieved history of user 2 with status 200
+[2025-08-15 11:57:59.082] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-15 12:02:47.596] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-15 12:02:47.647] [undefined] POST(/): successfully registered with status 200
+[2025-08-15 12:02:47.659] [undefined] POST(/login): try to login with username 'astria'
+[2025-08-15 12:02:47.710] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-15 12:02:49.622] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:02:49.625] [undefined] GET(/:id/channel): failed to retrieve channel of user 1 because it doesn't exist with status 404
+[2025-08-15 12:02:49.630] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:02:49.634] [undefined] GET(/:id/history): failed to retrieve history of user 1 because it doesn't exist with status 404
+[2025-08-15 12:02:49.642] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:02:56.061] [undefined] POST(/): try to create new channel with owner 1 and name astria
+[2025-08-15 12:02:56.063] [undefined] POST(/): Successfully created new channel with name astria with status 200
+[2025-08-15 12:02:56.078] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:02:56.082] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:02:57.508] [undefined] GET(/:id): try to get channel with id 1
+[2025-08-15 12:02:57.519] [undefined] GET(/:id/stats): try to get stats
+[2025-08-15 12:02:57.522] [undefined] GET(/:id): Successfully get channel with id 1 with status 200
+[2025-08-15 12:02:57.531] [undefined] GET(/:id/stats): Successfully get stats with status 200
+[2025-08-15 12:02:58.751] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:02:58.754] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:03:17.807] [undefined] POST(/): try to upload video with status undefined
+[2025-08-15 12:03:17.812] [undefined] POST(/): successfully uploaded video with status 200
+[2025-08-15 12:03:17.878] [undefined] POST(/thumbnail): try to add thumbnail to video 1
+[2025-08-15 12:03:17.881] [undefined] POST(/thumbnail): successfully uploaded thumbnail with status 200
+[2025-08-15 12:03:17.900] [undefined] PUT(/:id/tags): try to add tags to video 1
+[2025-08-15 12:03:17.910] [undefined] PUT(/:id/tags): successfully added tags to video 1 with status 200
+[2025-08-15 12:03:21.191] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:03:21.201] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:21.206] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:03:21.218] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:03:21.229] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:03:21.250] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:03:21.265] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:03:25.914] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:03:25.917] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:03:25.919] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:03:25.925] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
+[2025-08-15 12:03:25.934] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:30.209] [undefined] POST(/): Playlist created with id 2 with status 200
+[2025-08-15 12:03:30.227] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:34.208] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:03:34.219] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:34.223] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:03:34.236] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:03:34.248] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:03:34.273] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:03:34.281] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:03:36.394] [undefined] POST(/:id): Video added to playlist with id 2 with status 200
+[2025-08-15 12:03:38.143] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:03:38.145] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:03:38.148] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:03:38.151] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
+[2025-08-15 12:03:38.161] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:38.653] [undefined] GET(/:id): Playlist retrieved with id 2 with status 200
+[2025-08-15 12:03:40.880] [undefined] DELETE(/:id): Playlist deleted with status 200
+[2025-08-15 12:03:40.925] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:03:40.928] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:03:40.931] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
+[2025-08-15 12:03:40.933] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:03:40.942] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:52.229] [undefined] POST(/): Playlist created with id 3 with status 200
+[2025-08-15 12:03:52.247] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:53.608] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:03:53.619] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:53.624] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:03:53.635] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:03:53.648] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:03:53.675] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:03:53.685] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:03:55.180] [undefined] POST(/:id): Video added to playlist with id 3 with status 200
+[2025-08-15 12:03:56.494] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:03:56.497] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:03:56.500] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:03:56.504] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
+[2025-08-15 12:03:56.511] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:03:57.117] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:06:09.157] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:06:13.801] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:06:13.805] [undefined] GET(/:id/channel): successfully retrieved channel of user 1 with status 200
+[2025-08-15 12:06:13.808] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-15 12:06:13.812] [undefined] GET(/:id/history): successfully retrieved history of user 1 with status 200
+[2025-08-15 12:06:13.820] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:06:15.043] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:07:33.375] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:07:46.081] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:07:54.278] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:08:25.981] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:08:48.330] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:09:05.838] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:09:20.029] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:09:31.979] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:10:11.328] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:10:17.318] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:11:07.347] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:11:08.287] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:11:08.297] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:11:08.302] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:11:08.314] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:11:08.327] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:11:08.348] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:11:08.359] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:11:09.147] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:11:43.722] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:12:10.236] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:12:22.230] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:12:36.945] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:12:38.251] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:12:38.262] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:12:38.266] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:12:38.278] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:12:38.291] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:12:38.315] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:12:38.327] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:12:39.300] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:13:16.106] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:13:17.470] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:13:17.481] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:13:17.487] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:13:17.499] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:13:17.513] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:13:17.565] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:13:17.574] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:13:18.292] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:13:19.374] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:13:19.384] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:13:19.389] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:13:19.402] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:13:19.414] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:13:19.438] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:13:19.446] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:13:19.797] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:13:50.493] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:13:52.628] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:13:52.639] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:13:52.644] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:13:52.657] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:13:52.670] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:13:52.693] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:13:52.705] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:13:53.217] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:16:32.830] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:16:33.842] [undefined] GET(/:id): try to get video 1
+[2025-08-15 12:16:33.853] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-15 12:16:33.859] [undefined] GET(/:id): successfully get video 1 with status 200
+[2025-08-15 12:16:33.871] [undefined] GET(/:id/similar): try to get similar videos for video 1
+[2025-08-15 12:16:33.884] [undefined] GET(/:id/similar): successfully get similar videos for video 1 with status 200
+[2025-08-15 12:16:33.909] [undefined] GET(/:id/views): try to add views for video 1
+[2025-08-15 12:16:33.917] [undefined] GET(/:id/views): successfully added views for video 1 with status 200
+[2025-08-15 12:16:34.233] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:18:40.492] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:18:51.040] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:19:00.143] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:19:03.469] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:19:55.046] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:19:57.124] [undefined] DELETE(/:id/video/:videoId): Video deleted from playlist with id 3 with status 200
+[2025-08-15 12:19:57.149] [undefined] GET(/:id): Playlist retrieved with id 3 with status 200
+[2025-08-15 12:20:03.498] [undefined] DELETE(/:id): Playlist deleted with status 200
+[2025-08-15 12:20:03.611] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-15 12:20:03.614] [undefined] GET(/:id/history): try to retrieve history of user 1
+[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
+[2025-08-17 08:50:14.128] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 08:50:14.181] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 08:50:14.195] [undefined] POST(/login): try to login with username 'astria'
+[2025-08-17 08:50:14.248] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-17 08:51:42.597] [undefined] POST(/): try to register a user with username: test1 and email: thelolshow974@gmail.com
+[2025-08-17 09:11:03.106] [undefined] POST(/): try to register a user with username: test1 and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:11:39.729] [undefined] POST(/): failed because email already exists with status 400
+[2025-08-17 09:11:59.416] [undefined] POST(/): try to register a user with username: test2 and email: thelolshow974@gmail.com
+[2025-08-17 09:14:31.308] [undefined] POST(/): try to register a user with username: test2 and email: thelolshow974@gmail.com
+[2025-08-17 09:16:05.463] [undefined] POST(/): try to register a user with username: test1 and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:16:10.314] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:16:10.328] [undefined] POST(/login): try to login with username 'test1'
+[2025-08-17 09:16:10.380] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-17 09:17:17.542] [undefined] POST(/): try to register a user with username: test1 and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:17:22.394] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:17:22.406] [undefined] POST(/login): try to login with username 'test1'
+[2025-08-17 09:17:22.457] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-17 09:19:43.340] [undefined] GET(/:id/channel): try to retrieve channel of user 1
+[2025-08-17 09:19:43.345] [undefined] GET(/:id/channel): failed to retrieve channel of user 1 because it doesn't exist with status 404
+[2025-08-17 09:19:43.350] [undefined] GET(/:id/history): try to retrieve history of user 1
+[2025-08-17 09:19:43.354] [undefined] GET(/:id/history): failed to retrieve history of user 1 because it doesn't exist with status 404
+[2025-08-17 09:19:43.363] [undefined] GET(/user/:id): Playlists retrieved for user with id 1 with status 200
+[2025-08-17 09:20:05.669] [undefined] POST(/): try to register a user with username: test2 and email: thelolshow974@gmail.com
+[2025-08-17 09:20:10.512] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:20:10.525] [undefined] POST(/login): try to login with username 'test2'
+[2025-08-17 09:20:10.576] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-17 09:21:15.604] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-17 09:21:15.608] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-17 09:21:15.611] [undefined] GET(/:id/channel): failed to retrieve channel of user 2 because it doesn't exist with status 404
+[2025-08-17 09:21:15.615] [undefined] GET(/:id/history): failed to retrieve history of user 2 because it doesn't exist with status 404
+[2025-08-17 09:21:15.627] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-17 09:25:52.056] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
+[2025-08-17 09:30:07.808] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:30:13.318] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:30:13.333] [undefined] POST(/login): try to login with username 'astria'
+[2025-08-17 09:30:13.342] [undefined] POST(/login): failed to login with status 401
+[2025-08-17 09:31:15.336] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:31:16.156] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:31:16.165] [undefined] POST(/login): try to login with username 'astria'
+[2025-08-17 09:31:16.175] [undefined] POST(/login): failed to login with status 401
+[2025-08-17 09:32:08.935] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:32:09.739] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:32:09.746] [undefined] POST(/login): try to login with username 'astria'
+[2025-08-17 09:32:09.755] [undefined] POST(/login): failed to login with status 401
+[2025-08-17 09:33:37.507] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:33:38.302] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:35:22.955] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:35:27.758] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:36:56.856] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:36:57.653] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:40:35.290] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:40:40.072] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:43:01.395] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:43:02.183] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:43:14.728] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com
+[2025-08-17 09:43:14.737] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:43:23.307] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com
+[2025-08-17 09:43:23.316] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:43:51.630] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com
+[2025-08-17 09:43:51.639] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:46:34.186] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token undefined
+[2025-08-17 09:46:34.196] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:47:04.196] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:47:09.664] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:48:48.612] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:48:50.099] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:49:00.678] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token undefined
+[2025-08-17 09:49:00.687] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:50:09.224] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:50:10.001] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 09:50:22.079] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token undefined
+[2025-08-17 09:50:22.089] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 09:59:51.783] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 09:59:56.691] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 10:00:23.412] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token 08185
+[2025-08-17 10:00:23.422] [undefined] POST(/verify-email): successfully verified email for sachaguerin.sg@gmail.com with status 200
+[2025-08-17 10:03:07.906] [undefined] POST(/): try to register a user with username: astria and email: sachaguerin.sg@gmail.com
+[2025-08-17 10:03:12.799] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 10:03:28.573] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token da3cb
+[2025-08-17 10:03:28.585] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 500
+[2025-08-17 10:04:05.961] [undefined] POST(/verify-email): try to verify email for sachaguerin.sg@gmail.com with token da3cb
+[2025-08-17 10:04:05.972] [undefined] POST(/verify-email): failed to verify email for sachaguerin.sg@gmail.com with status 404
+[2025-08-17 10:05:00.597] [undefined] POST(/): try to register a user with username: test1 and email: thelolshow974@gmail.com
+[2025-08-17 10:05:05.427] [undefined] POST(/): successfully registered with status 200
+[2025-08-17 10:05:18.158] [undefined] POST(/verify-email): try to verify email for thelolshow974@gmail.com with token 6e57b
+[2025-08-17 10:05:18.170] [undefined] POST(/verify-email): successfully verified email for thelolshow974@gmail.com with status 200
+[2025-08-17 10:06:16.785] [undefined] POST(/login): try to login with username 'test1'
+[2025-08-17 10:06:16.839] [undefined] POST(/login): Successfully logged in with status 200
+[2025-08-17 10:06:21.123] [undefined] GET(/:id/channel): try to retrieve channel of user 2
+[2025-08-17 10:06:21.127] [undefined] GET(/:id/channel): failed to retrieve channel of user 2 because it doesn't exist with status 404
+[2025-08-17 10:06:21.133] [undefined] GET(/:id/history): try to retrieve history of user 2
+[2025-08-17 10:06:21.138] [undefined] GET(/:id/history): failed to retrieve history of user 2 because it doesn't exist with status 404
+[2025-08-17 10:06:21.148] [undefined] GET(/user/:id): Playlists retrieved for user with id 2 with status 200
diff --git a/backend/package-lock.json b/backend/package-lock.json
index 967c063..faa30e7 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -18,6 +18,7 @@
"jsonwebtoken": "^9.0.2",
"moment": "^2.30.1",
"multer": "^2.0.1",
+ "nodemailer": "^7.0.5",
"pg": "^8.16.3"
},
"devDependencies": {
@@ -3104,6 +3105,15 @@
"node-gyp-build-test": "build-test.js"
}
},
+ "node_modules/nodemailer": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.5.tgz",
+ "integrity": "sha512-nsrh2lO3j4GkLLXoeEksAMgAOqxOv6QumNRVQTJwKH4nuiww6iC2y7GyANs9kRAxCexg3+lTWM3PZ91iLlVjfg==",
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/nodemon": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz",
diff --git a/backend/package.json b/backend/package.json
index b960bb8..28e7f10 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -22,6 +22,7 @@
"jsonwebtoken": "^9.0.2",
"moment": "^2.30.1",
"multer": "^2.0.1",
+ "nodemailer": "^7.0.5",
"pg": "^8.16.3"
},
"devDependencies": {
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 9efeef2..42be633 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -15,6 +15,8 @@ services:
JWT_SECRET: ${JWT_SECRET}
LOG_FILE: ${LOG_FILE}
PORT: ${BACKEND_PORT}
+ GMAIL_USER: ${GMAIL_USER}
+ GMAIL_PASSWORD: ${GMAIL_PASSWORD}
volumes:
- ./backend/logs:/var/log/freetube
- ./backend:/app
@@ -44,7 +46,21 @@ services:
- ./nginx/nginx-selfsigned.key:/etc/nginx/ssl/nginx-selfsigned.key
depends_on:
- resit_backend
+
+ mailpit:
+ image: axllent/mailpit:latest
+ ports:
+ - "8025:8025" # Web UI
+ - "1025:1025" # SMTP
+ volumes:
+ - mailpit-data:/data
+ environment:
+ # set where to store the database
+ MP_DATABASE: /data/mailpit.db
+ restart: unless-stopped
volumes:
db_data:
+ driver: local
+ mailpit-data:
driver: local
\ No newline at end of file
diff --git a/frontend/src/assets/img/background.png b/frontend/src/assets/img/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..51fd61953c2ef46e23b7f150c36e43b7ccf14242
GIT binary patch
literal 1281457
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