Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
battle.dao.php
Aller à la documentation de ce fichier.
1<?php
6class BattleDAO {
10 private ?PDO $pdo;
11
16 public function __construct(?PDO $pdo = null)
17 {
18 $this->pdo = $pdo;
19 }
20
25 public function findAll(): array
26 {
27 $sql = "SELECT * FROM battle";
28 $pdoStatement = $this->pdo->prepare($sql);
29 $pdoStatement->execute();
30 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
31 $tableau = $pdoStatement->fetchAll();
32 $battle = $this->hydrateMany($tableau);
33 return $battle;
34 }
35
41 public function find(int $id): Battle
42 {
43 $sql = "SELECT * FROM battle WHERE idBattle = :id";
44 $pdoStatement = $this->pdo->prepare($sql);
45 $pdoStatement->execute(array(
46 ':id' => $id
47 ));
48
49 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
50 $tableau = $pdoStatement->fetch();
51 $battle = $this->hydrate($tableau);
52 return $battle;
53 }
54
60 public function hydrate(array $data): Battle
61 {
62 $battle = new Battle();
63
64 $battle->setIdBattle(isset($data['idBattle']) ? (int)$data['idBattle'] : null);
65 $battle->setTitreBattle($data['titreBattle'] ?? null);
66
67 // Conversion sécurisée des dates SQL → objets DateTime
68 $battle->setDateDebutBattle(
69 !empty($data['dateDebutBattle']) ? new DateTime($data['dateDebutBattle']) : null
70 );
71
72 $battle->setDateFinBattle(
73 !empty($data['dateFinBattle']) ? new DateTime($data['dateFinBattle']) : null
74 );
75
76 // Conversion du statut (enum)
77 if (!empty($data['statutBattle'])) {
78 $battle->setStatutBattle(StatutBattle::from($data['statutBattle']));
79 }
80
81 $battle->setEmailCreateurBattle($data['emailCreateurBattle'] ?? null);
82 $battle->setEmailParticipantBattle($data['emailParticipantBattle'] ?? null);
83
84 return $battle;
85 }
86
92 public function hydrateMany(array $rows): array
93 {
94 $battles = [];
95 foreach ($rows as $row) {
96 $battles[] = $this->hydrate($row);
97 }
98 return $battles;
99 }
100
105 public function getPdo(): ?PDO
106 {
107 return $this->pdo;
108 }
113 public function setPdo(?PDO $pdo): void
114 {
115 $this->pdo = $pdo;
116 }
117
124 public function countBattlesWon(string $emailArtiste): int
125 {
126 // Cette requête compte les battles terminées où l'artiste a plus de votes que son adversaire
127 $sql = "SELECT COUNT(*) as wins FROM (
128 SELECT
129 b.idBattle,
130 b.emailCreateurBattle,
131 b.emailParticipantBattle,
132 COALESCE(SUM(CASE WHEN v.emailVotee = b.emailCreateurBattle THEN 1 ELSE 0 END), 0) as votes_createur,
133 COALESCE(SUM(CASE WHEN v.emailVotee = b.emailParticipantBattle THEN 1 ELSE 0 END), 0) as votes_participant
134 FROM battle b
135 LEFT JOIN vote v ON b.idBattle = v.idBattle
136 WHERE b.statutBattle = 'terminee'
137 AND (b.emailCreateurBattle = :email1 OR b.emailParticipantBattle = :email2)
138 GROUP BY b.idBattle, b.emailCreateurBattle, b.emailParticipantBattle
139 ) AS battle_stats
140 WHERE
141 (emailCreateurBattle = :email3 AND votes_createur > votes_participant)
142 OR (emailParticipantBattle = :email4 AND votes_participant > votes_createur)";
143
144 $stmt = $this->pdo->prepare($sql);
145 $stmt->execute([
146 ':email1' => $emailArtiste,
147 ':email2' => $emailArtiste,
148 ':email3' => $emailArtiste,
149 ':email4' => $emailArtiste
150 ]);
151 return (int)$stmt->fetchColumn();
152 }
153}
countBattlesWon(string $emailArtiste)
Compte le nombre de battles gagnées par un artiste Une battle est gagnée si l'artiste a reçu plus de ...
hydrate(array $data)
Hydrate une battle à partir d'un tableau associatif.
findAll()
Récupère toutes les battles de la base de données.
setPdo(?PDO $pdo)
Setter pour la pdo.
find(int $id)
Récupère une battle par son identifiant.
__construct(?PDO $pdo=null)
Constructeur de la classe BattleDAO.
getPdo()
Getter pour la pdo.
hydrateMany(array $rows)
Hydrate plusieurs battles à partir d'un tableau de tableaux associatifs.
Classe représentant une battle musicale.