import pg from "pg"; export async function getClient() { const client = new pg.Client({ user: process.env.DB_USER, password: process.env.DB_PASSWORD, host: process.env.DB_HOST, database: process.env.DB_NAME, port: 5432 }) await client.connect(); return client; } export async function initDb() { const client = await getClient(); try { let query = `CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, picture VARCHAR(255) );`; await client.query(query); query = `CREATE TABLE IF NOT EXISTS channels ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT NOT NULL, owner INTEGER NOT NULL REFERENCES users(id) )` await client.query(query); query = `CREATE TABLE IF NOT EXISTS videos ( id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, thumbnail VARCHAR(255) NOT NULL, description TEXT NOT NULL, channel INTEGER NOT NULL REFERENCES channels(id), visibility VARCHAR(50) NOT NULL DEFAULT 'public', file VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, format VARCHAR(50) NOT NULL, release_date TIMESTAMP NOT NULL DEFAULT NOW() );`; await client.query(query); query = `CREATE TABLE IF NOT EXISTS comments ( id SERIAL PRIMARY KEY, content TEXT NOT NULL, author INTEGER NOT NULL REFERENCES users(id), video INTEGER NOT NULL REFERENCES videos(id), 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), created_at TIMESTAMP NOT NULL DEFAULT NOW() );`; await client.query(query); query = `CREATE TABLE IF NOT EXISTS playlists ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, owner INTEGER NOT NULL REFERENCES users(id) )`; 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) )`; 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) )`; await client.query(query); query = `CREATE TABLE IF NOT EXISTS tags( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, usage_count INTEGER NOT NULL DEFAULT 0 )`; 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) )` 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), viewed_at TIMESTAMP NOT NULL DEFAULT NOW() )`; await client.query(query); } catch (e) { console.error("Error initializing database:", e); } }