load->database(); } /** * Ajouter une critique */ public function add_critique($data) { if (empty($data['user_id']) || empty($data['note'])) { return false; } // Vérifie si une critique existe déjà pour cette série et cette saison (ou pour la série entière si saison_id est NULL) $sql_check = " SELECT id FROM critiques WHERE user_id = ? AND tvshow_id = ? AND ( (season_id IS NULL AND ? IS NULL) OR season_id = ? ) "; $season_id = $data['season_id'] ?? null; $existing = $this->db->query($sql_check, [ $data['user_id'], $data['tvshow_id'], $season_id, $season_id ])->row(); if ($existing) { return false; // Critique déjà existante } // Insertion de la critique $sql_insert = " INSERT INTO critiques (user_id, tvshow_id, season_id, note, commentaire, date_creation) VALUES (?, ?, ?, ?, ?, ?) "; $this->db->query($sql_insert, [ $data['user_id'], $data['tvshow_id'], $season_id, $data['note'], $data['commentaire'], $data['date_creation'] ]); return $this->db->affected_rows() > 0; } /** * Moyenne des notes pour une série */ public function getAverageRating($tvshow_id) { $sql = " SELECT AVG(note) AS moyenne, COUNT(*) AS nb_votes FROM critiques WHERE tvshow_id = ? "; return $this->db->query($sql, [$tvshow_id])->row_array(); } /** * Récupère les critiques d'une série avec email auteur */ public function get_critiques_by_tvshow($tvshow_id) { $sql = " SELECT c.*, u.email AS auteur FROM critiques c JOIN users u ON u.id = c.user_id WHERE c.tvshow_id = ? "; return $this->db->query($sql, [$tvshow_id])->result(); } /** * Récupère les critiques d'une saison */ public function get_critiques_by_season($season_id) { $sql = " SELECT c.*, u.username FROM critiques c JOIN users u ON u.id = c.user_id WHERE c.season_id = ? ORDER BY c.date_creation DESC "; return $this->db->query($sql, [$season_id])->result(); } /** * Récupère les critiques d'un utilisateur */ public function get_critiques_by_user($user_id) { $sql = " SELECT c.*, t.name AS tvshow_name, t.id AS tvshow_id, p.jpeg, u.email AS auteur FROM critiques c JOIN users u ON u.id = c.user_id JOIN tvshow t ON t.id = c.tvshow_id LEFT JOIN poster p ON p.id = t.posterId WHERE c.user_id = ? ORDER BY c.id DESC "; return $this->db->query($sql, [$user_id])->result(); } /** * Récupère toutes les critiques */ public function get_all_critiques() { $sql = " SELECT c.*, u.username, t.name AS tvshow_name, s.season_number FROM critiques c JOIN users u ON u.id = c.user_id LEFT JOIN tvshow t ON t.id = c.tvshow_id LEFT JOIN season s ON s.id = c.season_id ORDER BY c.date_creation DESC "; return $this->db->query($sql)->result(); } /** * Récupère une critique par ID */ public function get_by_id($id) { $sql = " SELECT c.*, t.name AS tvshow_name, t.id AS tvshow_id, p.jpeg, u.email AS auteur FROM critiques c JOIN users u ON u.id = c.user_id JOIN tvshow t ON t.id = c.tvshow_id LEFT JOIN poster p ON p.id = t.posterId WHERE c.id = ? LIMIT 1 "; return $this->db->query($sql, [$id])->row(); } /** * Mise à jour d'une critique */ public function update_critique($id, $data) { $sql = " UPDATE critiques SET note = ?, commentaire = ?, date_creation = NOW() WHERE id = ? "; return $this->db->query($sql, [ $data['note'], $data['commentaire'], $id ]); } }