diff --git a/sql/setup-tables.sql b/sql/setup-tables.sql index c2e8ec4..1366a87 100644 --- a/sql/setup-tables.sql +++ b/sql/setup-tables.sql @@ -20,9 +20,11 @@ CREATE TABLE Member( ); CREATE TABLE Participate( - idTeam integer FOREIGN KEY REFERENCES Team(id), - idMember integer FOREIGN KEY REFERENCES Member(id), - role char CHECK (role IN ('C','P')) + idTeam integer, + idMember integer, + role char(1) CHECK (role IN ('C','P')), + FOREIGN KEY (idTeam) REFERENCES Team(id), + FOREIGN KEY (idMember) REFERENCES Member(id) ); CREATE TABLE TacticInfo( diff --git a/src/Controller/TeamController.php b/src/Controller/TeamController.php index e2f0b89..30a6ab6 100644 --- a/src/Controller/TeamController.php +++ b/src/Controller/TeamController.php @@ -29,10 +29,11 @@ class TeamController /* verif si les camp sont assignés, sinon erreur 400*/ } public function submitTeam(array $request): HttpResponse { - $request['mainColor'] = intval($request['mainColor']); - $request['secondColor'] = intval($request['secondColor']); - var_dump($request['secondColor']); + $errors = []; + $request['mainColor'] = hexdec($request['mainColor']); + $request['secondColor'] = hexdec($request['secondColor']); + $request = HttpRequest::from($request, $errors, [ "name" => [Validators::lenBetween(1, 32), Validators::nameWithSpaces()], "mainColor" => [Validators::isInteger(), Validators::isIntInRange(0, 0xffffff)], @@ -48,8 +49,7 @@ class TeamController /* verif si les camp sont assignés, sinon erreur 400*/ } return ViewHttpResponse::twig('insert_team.html.twig', ['bad_fields' => $badFields]); } - $id = $this->model->createTeam($request['name'], $request['picture'], $request['mainColor'], $request['secondColor']); - return $this->displayTeam($id); + return $this->displayTeam($this->model->createTeam($request['name'], $request['picture'], $request['mainColor'], $request['secondColor'])); } public function displayListTeamByName(): HttpResponse { @@ -76,9 +76,9 @@ class TeamController /* verif si les camp sont assignés, sinon erreur 400*/ return ViewHttpResponse::twig('display_teams.html.twig', ['teams' => $results]); } - public function displayTeam(int $id): HttpResponse{ + public function displayTeam(int $id): HttpResponse { $result = $this->model->displayTeam($id); - return ViewHttpResponse::twig('display_team.html.twig',['team' => $result]); + return ViewHttpResponse::twig('display_team.html.twig', ['team' => $result]); } } diff --git a/src/Data/MemberRole.php b/src/Data/MemberRole.php index 05d746d..bd8add3 100755 --- a/src/Data/MemberRole.php +++ b/src/Data/MemberRole.php @@ -11,8 +11,9 @@ use http\Exception\InvalidArgumentException; * encapsulates an integer value and use it as an enumeration discriminant */ final class MemberRole { - private const ROLE_PLAYER = 0; - private const ROLE_COACH = 1; + + public const ROLE_PLAYER = 0; + public const ROLE_COACH = 1; private const MIN = self::ROLE_PLAYER; private const MAX = self::ROLE_COACH; @@ -25,6 +26,14 @@ final class MemberRole { $this->value = $val; } + public static function player(){ + return new MemberRole(MemberRole::ROLE_PLAYER); + } + + public static function coach(){ + return new MemberRole(MemberRole::ROLE_COACH); + } + private function isValid(int $val): bool { return ($val <= self::MAX and $val >= self::MIN); } diff --git a/src/Gateway/TeamGateway.php b/src/Gateway/TeamGateway.php index 0f8fa74..4bb1518 100644 --- a/src/Gateway/TeamGateway.php +++ b/src/Gateway/TeamGateway.php @@ -24,13 +24,6 @@ class TeamGateway { ); } - public function getIdOfLastInsertion(): array{ - return $this->con->fetch( - "SELECT last_insert_rowid() as id", - [] - ); - } - public function listByName(string $name): array { return $this->con->fetch( "SELECT id,name,picture,mainColor,secondColor FROM Team WHERE name LIKE '%' || :name || '%'", @@ -49,6 +42,15 @@ class TeamGateway { ); } + public function getIdTeamByName(string $name): array{ + return $this->con->fetch( + "SELECT id FROM Team WHERE name = :name", + [ + ":name" => [$name, PDO::PARAM_STR] + ] + ); + } + public function getMembersById($id):array{ return $this->con->fetch( "SELECT p.role,m.email,m.id FROM Member m,Team t,Participate p WHERE t.id = :id AND p.idTeam = t.id AND p.idMember = m.id", diff --git a/src/Model/TeamModel.php b/src/Model/TeamModel.php index 17b02dd..1dd57a0 100644 --- a/src/Model/TeamModel.php +++ b/src/Model/TeamModel.php @@ -24,7 +24,8 @@ class TeamModel /* throw des exceptions(ex validation des champs, filtre etc) po public function createTeam(string $name, string $picture, int $mainColor, int $secondColor): int{ $this->gateway->insert($name, $picture, $mainColor, $secondColor); - return (int) $this->gateway->getIdOfLastInsertion()['id']; + $result = $this->gateway->getIdTeamByName($name); + return intval($result[0]['id']); } public function listByName(string $name): array { @@ -43,9 +44,9 @@ class TeamModel /* throw des exceptions(ex validation des champs, filtre etc) po $resultMembers = $this->gateway->getMembersById($id); foreach ($resultMembers as $row) { if ($row['role'] == 'C') { - $role = 1; + $role = MemberRole::coach(); } else { - $role = 2; + $role = MemberRole::player(); } $members[] = new Member($row['id'], $role); }