diff --git a/Sources/.phpunit.cache/test-results b/Sources/.phpunit.cache/test-results index 122fa478..29b31905 100644 --- a/Sources/.phpunit.cache/test-results +++ b/Sources/.phpunit.cache/test-results @@ -1 +1 @@ -{"version":1,"defects":{"MaClasseTest::testMethode":5,"ExampleTest::testMethode":5,"toto::testMethode":5,"AthleteGateway::testGateway":5,"Database\\Tests\\AthleteGatewayTest::testGetAthlete":4,"Database\\Tests\\AthleteGatewayTest::testGetAthleteById":4,"Database\\Tests\\AthleteGatewayTest::testAddAthlete":4,"Database\\Tests\\AthleteGatewayTest::testUpdateAthlete":4,"Database\\Tests\\AthleteGatewayTest::testDeleteAthlete":4,"Database\\AthleteGatewayTest::testGetAthlete":4,"Database\\AthleteGatewayTest::testGetAthleteById":4,"Database\\AthleteGatewayTest::testAddAthlete":4,"Database\\AthleteGatewayTest::testUpdateAthlete":4,"Database\\AthleteGatewayTest::testDeleteAthlete":4,"AthleteGatewayTest::testAddAndGetAthlete":4},"times":{"MaClasseTest::testMethode":0.001,"ExampleTest::testMethode":0.001,"toto::testMethode":0.001,"AthleteGateway::testGateway":0.048,"Database\\Tests\\AthleteGatewayTest::testGetAthlete":0.001,"Database\\Tests\\AthleteGatewayTest::testGetAthleteById":0.001,"Database\\Tests\\AthleteGatewayTest::testAddAthlete":0.072,"Database\\Tests\\AthleteGatewayTest::testUpdateAthlete":0.001,"Database\\Tests\\AthleteGatewayTest::testDeleteAthlete":0.001,"Database\\AthleteGatewayTest::testGetAthlete":0.002,"Database\\AthleteGatewayTest::testGetAthleteById":0,"Database\\AthleteGatewayTest::testAddAthlete":0,"Database\\AthleteGatewayTest::testUpdateAthlete":0,"Database\\AthleteGatewayTest::testDeleteAthlete":0,"AthleteGatewayTest::testAddAndGetAthlete":0.002}} \ No newline at end of file +{"version":1,"defects":{"MaClasseTest::testMethode":5,"ExampleTest::testMethode":5,"toto::testMethode":5,"AthleteGateway::testGateway":5,"Database\\Tests\\AthleteGatewayTest::testGetAthlete":4,"Database\\Tests\\AthleteGatewayTest::testGetAthleteById":4,"Database\\Tests\\AthleteGatewayTest::testAddAthlete":4,"Database\\Tests\\AthleteGatewayTest::testUpdateAthlete":4,"Database\\Tests\\AthleteGatewayTest::testDeleteAthlete":4,"Database\\AthleteGatewayTest::testGetAthlete":4,"Database\\AthleteGatewayTest::testGetAthleteById":4,"Database\\AthleteGatewayTest::testAddAthlete":4,"Database\\AthleteGatewayTest::testUpdateAthlete":4,"Database\\AthleteGatewayTest::testDeleteAthlete":4,"AthleteGatewayTest::testAddAndGetAthlete":4,"AthleteGatewayTest::testGetAthlete":5,"AthleteGatewayTest::testAddAthlete":5,"AthleteGatewayTest::testDeleteAthlete":4,"AthleteGatewayTest::testUpdateAthlete":5,"AthleteMapperTest::testMapperAthlete":5,"GatewayTest::testGetAthlete":5,"GatewayTest::testUpdateAthlete":5,"MapperTest::testMapperAthlete":5,"GatewayTest::testGetCoach":5,"GatewayTest::testAddCoach":4},"times":{"MaClasseTest::testMethode":0.001,"ExampleTest::testMethode":0.001,"toto::testMethode":0.001,"AthleteGateway::testGateway":0.048,"Database\\Tests\\AthleteGatewayTest::testGetAthlete":0.001,"Database\\Tests\\AthleteGatewayTest::testGetAthleteById":0.001,"Database\\Tests\\AthleteGatewayTest::testAddAthlete":0.072,"Database\\Tests\\AthleteGatewayTest::testUpdateAthlete":0.001,"Database\\Tests\\AthleteGatewayTest::testDeleteAthlete":0.001,"Database\\AthleteGatewayTest::testGetAthlete":0.002,"Database\\AthleteGatewayTest::testGetAthleteById":0,"Database\\AthleteGatewayTest::testAddAthlete":0,"Database\\AthleteGatewayTest::testUpdateAthlete":0,"Database\\AthleteGatewayTest::testDeleteAthlete":0,"AthleteGatewayTest::testAddAndGetAthlete":0.028,"AthleteGatewayTest::testGetAthlete":0.004,"AthleteGatewayTest::testAddAthlete":0.005,"AthleteGatewayTest::testDeleteAthlete":0.003,"AthleteGatewayTest::testUpdateAthlete":0.006,"AthleteMapperTest::testMapperAthlete":0.004,"GatewayTest::testGetAthlete":0.006,"GatewayTest::testUpdateAthlete":0.005,"MapperTest::testMapperAthlete":0.005,"GatewayTest::testGetCoach":0.004,"GatewayTest::testAddCoach":0.015}} \ No newline at end of file diff --git a/Sources/src/data/core/database/AthleteGateway.php b/Sources/src/data/core/database/AthleteGateway.php index 09c9377d..7b2dc45e 100644 --- a/Sources/src/data/core/database/AthleteGateway.php +++ b/Sources/src/data/core/database/AthleteGateway.php @@ -1,11 +1,12 @@ connection = $connection; } @@ -74,7 +75,7 @@ class AthleteGateway { ':taille' => $athlete->getTaille(), ':poids' => $athlete->getPoids(), ':motDePasse' => $athlete->getMotDePasse(), - ':dateNaissance' => $athlete->getDateNaissance()->format('Y-m-d'), // Format date pour SQL + ':dateNaissance' => $athlete->getDateNaissance(), ]; return $this->connection->executeWithErrorHandling($query, $params); @@ -95,7 +96,7 @@ class AthleteGateway { ':taille' => $newAthlete->getTaille(), ':poids' => $newAthlete->getPoids(), ':motDePasse' => $newAthlete->getMotDePasse(), - ':dateNaissance' => $newAthlete->getDateNaissance()->format('Y-m-d'), // Format date pour SQL + ':dateNaissance' => $newAthlete->getDateNaissance(), ]; return $this->connection->executeWithErrorHandling($query, $params); diff --git a/Sources/src/data/core/database/AthleteMapper.php b/Sources/src/data/core/database/AthleteMapper.php index 798586f4..16f5f0be 100644 --- a/Sources/src/data/core/database/AthleteMapper.php +++ b/Sources/src/data/core/database/AthleteMapper.php @@ -2,25 +2,65 @@ namespace Database; use Model\User; +use \PDO; +use \DateTime; +use Model\Role; +use Model\Athlete; class AthleteMapper { - public function fromSqlToEntity(array $data):AthleteEntity { - $athlete = new AthleteEntity(); - $athlete->setIdAthlete($data['idAthlete']); - $athlete->setNom($data['nom']); - $athlete->setPrenom($data['prenom']); - $athlete->setEmail($data['email']); - $athlete->setSexe($data['sexe']); - $athlete->setTaille($data['taille']); - $athlete->setPoids($data['poids']); - $athlete->setMotDePasse($data['motDePasse']); - $athlete->setDateNaissance($data['dateNaissance']); - - return $athlete; + public function fromSqlToEntity(array $data): array { + $athleteEntities = []; + + foreach ($data as $athleteData) { + $athlete = new AthleteEntity(); + + if (isset($athleteData['idAthlete'])) { + $athlete->setIdAthlete($athleteData['idAthlete']); + } + + if (isset($athleteData['nom'])) { + $athlete->setNom($athleteData['nom']); + } + + if (isset($athleteData['prenom'])) { + $athlete->setPrenom($athleteData['prenom']); + } + + if (isset($athleteData['email'])) { + $athlete->setEmail($athleteData['email']); + } + + if (isset($athleteData['sexe'])) { + $athlete->setSexe($athleteData['sexe']); + } + + if (isset($athleteData['taille'])) { + $athlete->setTaille($athleteData['taille']); + } + + if (isset($athleteData['poids'])) { + $athlete->setPoids($athleteData['poids']); + } + + if (isset($athleteData['motDePasse'])) { + $athlete->setMotDePasse($athleteData['motDePasse']); + } + + if (isset($athleteData['dateNaissance'])) { + $athlete->setDateNaissance($athleteData['dateNaissance']); + } + + $athleteEntities[] = $athlete; + } + + return $athleteEntities; } + + public function athleteEntityToModel(AthleteEntity $athleteEntity): User { + $role = new Athlete(); // Utilisez la classe Athlete - public function AthleteEntityToModel(AthleteEntity $athleteEntity):User{ - $role = "Athlete"; + $dateSpecifique = $athleteEntity->getDateNaissance(); + $date = new DateTime($dateSpecifique); $user = new User( $athleteEntity->getIdAthlete(), @@ -31,14 +71,14 @@ class AthleteMapper { $athleteEntity->getSexe(), $athleteEntity->getTaille(), $athleteEntity->getPoids(), - $athleteEntity->getDateNaissance(), + $date, $role ); return $user; } - public function AthletetoEntity(User $user):AthleteEntity{ + public function athleteToEntity(User $user):AthleteEntity{ $ath = new AthleteEntity(); $ath->setIdAthlete($user->getId()); diff --git a/Sources/src/data/core/database/CoachGateway.php b/Sources/src/data/core/database/CoachGateway.php index 587fa4f7..5f795799 100644 --- a/Sources/src/data/core/database/CoachGateway.php +++ b/Sources/src/data/core/database/CoachGateway.php @@ -1,11 +1,12 @@ connection = $connection; } @@ -68,7 +69,7 @@ class CoachGateway { ':taille' => $coach->getTaille(), ':poids' => $coach->getPoids(), ':motDePasse' => $coach->getMotDePasse(), - ':dateNaissance' => $coach->getDateNaissance()->format('Y-m-d'), // Format date pour SQL + ':dateNaissance' => $coach->getDateNaissance(), ]; return $this->connection->executeWithErrorHandling($query, $params); @@ -89,7 +90,7 @@ class CoachGateway { ':taille' => $newCoach->getTaille(), ':poids' => $newCoach->getPoids(), ':motDePasse' => $newCoach->getMotDePasse(), - ':dateNaissance' => $newCoach->getDateNaissance()->format('Y-m-d'), // Format date pour SQL + ':dateNaissance' => $newCoach->getDateNaissance(), ]; return $this->connection->executeWithErrorHandling($query, $params); diff --git a/Sources/src/data/core/database/CoachMapper.php b/Sources/src/data/core/database/CoachMapper.php index 6d607d88..76284918 100644 --- a/Sources/src/data/core/database/CoachMapper.php +++ b/Sources/src/data/core/database/CoachMapper.php @@ -2,7 +2,10 @@ namespace Database; use Model\User; - +use \PDO; +use \DateTime; +use Model\Role; +use Model\Coach; class CoachMapper { public function map(array $data) { diff --git a/Sources/src/data/core/database/Connexion.php b/Sources/src/data/core/database/Connexion.php index 41141675..9a03267b 100644 --- a/Sources/src/data/core/database/Connexion.php +++ b/Sources/src/data/core/database/Connexion.php @@ -1,54 +1,49 @@ host;port=$this->port;dbname=$this->database;user=$this->username;password=$this->password"; - // This should be remove or set to just use a debug + + public function __construct(string $dsn,string $username, string $password) { try { - parent::__construct($dsn); - echo "Successfully connected to the database"; - $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - // should be a more accurate exception - } catch (PDOException $e) { - echo("Error connecting to the database: " . $e->getMessage()); - // do something ... + parent::__construct($dsn,$username,$password); + $this->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + } catch (\PDOException $e) { + // Log error or handle it as needed + throw new \PDOException("Error connecting to the database: " . $e->getMessage()); } } - - /** * @param string $query - * @param array $parameters * - * @return bool Returns `true` on success, `false` otherwise - */ - public function executeQuery(string $query, array $parameters = []) : bool{ - - $this->stmt = parent::prepare($query); - + public function executeQuery(string $query, array $parameters = []): bool { + $this->stmt = $this->prepare($query); + //foreach ($parameters as $name => $value) { + // $this->stmt->bindValue($name, $value[0], $value[1]); + //} foreach ($parameters as $name => $value) { - $this->stmt->bindValue($name, $value[0], $value[1]); + $bindValueResult = $this->stmt->bindValue($name, $value, \PDO::PARAM_STR); + if (!$bindValueResult) { + // Gérez l'erreur, par exemple, en lançant une exception. + throw new \PDOException('Failed to bind value for parameter ' . $name); + } } - return $this->stmt->execute(); - } - public function executeWithErrorHandling(string $query,array $params = []) { + + public function executeWithErrorHandling(string $query, array $params = []): array { try { $this->beginTransaction(); - $this->executeQuery($query,$params); + $this->executeQuery($query, $params); $this->commit(); return $this->getResults(); - } catch (PDOException $e) { + } catch (\PDOException $e) { $this->rollBack(); - throw new Exception('Unexpected error on database client: ' . $e->getMessage()); + throw new \PDOException('Unexpected error on database client: ' . $e->getMessage()); } } - public function getResults() : array { - return $this->stmt->fetchall(PDO::FETCH_ASSOC); + public function getResults(): array { + return $this->stmt->fetchAll(\PDO::FETCH_ASSOC); } - - - } ?> \ No newline at end of file diff --git a/Sources/tests/GatewayTest.php b/Sources/tests/GatewayTest.php index 4ceeb541..66d514ff 100644 --- a/Sources/tests/GatewayTest.php +++ b/Sources/tests/GatewayTest.php @@ -2,19 +2,49 @@ use PHPUnit\Framework\TestCase; -use Database\Connection; - -class AthleteGatewayTest extends TestCase { +//use Database\{Connexion, AthleteGateway,AthleteEntity}; +use Database\AthleteEntity; +use Database\AthleteGateway; +use Database\Connexion; +use Database\AthleteMapper; +use Database\CoachGateway; +use Database\CoachEntity; +use Database\CoachMapper; + +class GatewayTest extends TestCase { - public function testAddAndGetAthlete() { + //Partie concernant les Athlètes + + public function testGetAthlete() { + + //$dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp"; + + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + + $connexion = new Connexion($dsn,$username,$password); + + + $athleteGateway = new AthleteGateway($connexion); + $result = $athleteGateway->getAthlete(); + //var_dump($result); + } - $dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp"; + /* Fonctionne mais en commentaire pour pas add et del a chaque fois + public function testAddAthlete(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; - $connection = new Connection($dsn); + $connexion = new Connexion($dsn,$username,$password); - $athleteGateway = new AthleteGateway($connection); + $athleteGateway = new AthleteGateway($connexion); + $dateSpecifique = "2023-11-26"; + $timestamp = strtotime($dateSpecifique); + $dateSQL = date("Y-m-d", $timestamp); $athleteEntity = new AthleteEntity(); $athleteEntity->setNom('John'); @@ -25,31 +55,166 @@ class AthleteGatewayTest extends TestCase { $athleteEntity->setTaille(169); $athleteEntity->setPoids(69); $athleteEntity->setMotDePasse('motdepasse'); - $athleteEntity->setDateNaissance('26/03/2004'); - - //$result = $athleteGateway->addAthlete($athleteEntity); + $athleteEntity->setDateNaissance($dateSQL); - - //$this->assertTrue($result); + $result2 = $athleteGateway->addAthlete($athleteEntity); + } - - $athleteId = $athleteEntity->getIdAthlete(); - $retrievedAthlete = $athleteGateway->getAthleteById($athleteId); + + public function testDeleteAthlete(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; - - $this->assertInstanceOf(AthleteEntity::class, $retrievedAthlete); + $connexion = new Connexion($dsn,$username,$password); + + $athleteGateway = new AthleteGateway($connexion); + $result = $athleteGateway->deleteAthlete( //idAthlete ); + var_dump($result); + + }*/ + + public function testUpdateAthlete(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + + $connexion = new Connexion($dsn,$username,$password); + + $athleteGateway = new AthleteGateway($connexion); + + $dateSpecifique = "2004-08-26"; + $timestamp = strtotime($dateSpecifique); + $dateSQL = date("Y-m-d", $timestamp); + + $athleteEntity = new AthleteEntity(); + $athleteEntity->setNom('John'); + $athleteEntity->setPrenom('Doe'); + $athleteEntity->setIdAthlete(13); + $athleteEntity->setEmail('kevin.monteiro@gmail.fr'); + $athleteEntity->setSexe('H'); + $athleteEntity->setTaille(169); + $athleteEntity->setPoids(69); + $athleteEntity->setMotDePasse('motdepasse'); + $athleteEntity->setDateNaissance($dateSQL); + + $athleteEntity2 = new AthleteEntity(); + $athleteEntity2->setNom('Monteiro'); + $athleteEntity2->setPrenom('Kevin'); + $athleteEntity2->setIdAthlete(13); + $athleteEntity2->setEmail('kevin.monteiro@gmail.fr'); + $athleteEntity2->setSexe('H'); + $athleteEntity2->setTaille(169); + $athleteEntity2->setPoids(69); + $athleteEntity2->setMotDePasse('motdepasse'); + $athleteEntity2->setDateNaissance($dateSQL); + + $result = $athleteGateway->updateAthlete($athleteEntity, $athleteEntity2); + } + + //Partie concernant les Coachs + + public function testGetCoach() { + + //$dsn = "pgsql:host=londres;port=8888;dbname=dbkemonteiro2;user=kemonteiro2;password=Mdp"; + + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + + $connexion = new Connexion($dsn,$username,$password); - $this->assertEquals('John', $retrievedAthlete->getNom()); - $this->assertEquals('Doe', $retrievedAthlete->getPrenom()); + $coachGateway = new CoachGateway($connexion); + $result = $coachGateway->getCoach(); + var_dump($result); + } +/* + //Fonctionne PAS A PARTIR DE LA + public function testAddCoach(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + $connexion = new Connexion($dsn,$username,$password); + $coachGateway = new CoachGateway($connexion); + + $dateSpecifique = "2023-11-26"; + $timestamp = strtotime($dateSpecifique); + $dateSQL = date("Y-m-d", $timestamp); + + $coachEntity = new CoachEntity(); + $coachEntity->setNom('John'); + $coachEntity->setPrenom('Doe'); + $coachEntity->setIdCoach(1234); + $coachEntity->setEmail('kevin.monteiro@gmail.fr'); + $coachEntity->setSexe('H'); + $coachEntity->setTaille(169); + $coachEntity->setPoids(69); + $coachEntity->setMotDePasse('motdepasse'); + $coachEntity->setDateNaissance($dateSQL); + + $result2 = $coachGateway->addCoach($coachEntity); } - + + public function testDeleteAthlete(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + + $connexion = new Connexion($dsn,$username,$password); + + $athleteGateway = new AthleteGateway($connexion); + $result = $athleteGateway->deleteAthlete( //idAthlete ); + var_dump($result); + + }*/ +/* + public function testUpdateAthlete(){ + $dsn = "mysql:host=londres;dbname=dbkemonteiro2;"; + $username = "kemonteiro2"; + $password = "#Phpmyadmin63"; + + $connexion = new Connexion($dsn,$username,$password); + + $athleteGateway = new AthleteGateway($connexion); + + $dateSpecifique = "2004-08-26"; + $timestamp = strtotime($dateSpecifique); + $dateSQL = date("Y-m-d", $timestamp); + + $athleteEntity = new AthleteEntity(); + $athleteEntity->setNom('John'); + $athleteEntity->setPrenom('Doe'); + $athleteEntity->setIdAthlete(13); + $athleteEntity->setEmail('kevin.monteiro@gmail.fr'); + $athleteEntity->setSexe('H'); + $athleteEntity->setTaille(169); + $athleteEntity->setPoids(69); + $athleteEntity->setMotDePasse('motdepasse'); + $athleteEntity->setDateNaissance($dateSQL); + + $athleteEntity2 = new AthleteEntity(); + $athleteEntity2->setNom('Monteiro'); + $athleteEntity2->setPrenom('Kevin'); + $athleteEntity2->setIdAthlete(13); + $athleteEntity2->setEmail('kevin.monteiro@gmail.fr'); + $athleteEntity2->setSexe('H'); + $athleteEntity2->setTaille(169); + $athleteEntity2->setPoids(69); + $athleteEntity2->setMotDePasse('motdepasse'); + $athleteEntity2->setDateNaissance($dateSQL); + + $result = $athleteGateway->updateAthlete($athleteEntity, $athleteEntity2); + }*/ } + + + diff --git a/Sources/tests/MapperTest.php b/Sources/tests/MapperTest.php new file mode 100644 index 00000000..fd9e94d7 --- /dev/null +++ b/Sources/tests/MapperTest.php @@ -0,0 +1,43 @@ +getAthlete(); + + $map = new AthleteMapper (); + //SQL To AthleteEntity + $athleteEntity = $map->fromSqlToEntity($result); + + + foreach($athleteEntity as $ath){ + + $result = $ath->getNom(); + var_dump($result); + //Pour chaque AthleteEntity : Athlete Entity To User avec Role Athlete(Model) + $user = $map->athleteEntityToModel($ath); + var_dump($user->getId()); + //Pour chaque Athlete du Model -> Athlete Entity + $res = $map->athleteToEntity($user); + var_dump($res->getIdAthlete()); + } + } +} \ No newline at end of file