From 82276b8fa05034cc8fe371fef68f8e81a2ab0dd7 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 4 Jan 2020 19:35:26 +0100 Subject: [PATCH 1/3] adding migrations --- data/migrations/deploy/00009_adding_numbers_to_players.sql | 5 +++++ .../rollback/00009_removing_numbers_from_players.sql | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 data/migrations/deploy/00009_adding_numbers_to_players.sql create mode 100644 data/migrations/rollback/00009_removing_numbers_from_players.sql diff --git a/data/migrations/deploy/00009_adding_numbers_to_players.sql b/data/migrations/deploy/00009_adding_numbers_to_players.sql new file mode 100644 index 0000000..0dfe05a --- /dev/null +++ b/data/migrations/deploy/00009_adding_numbers_to_players.sql @@ -0,0 +1,5 @@ +ALTER TABLE player + ADD COLUMN jersey_number NUMBER; + +ALTER TABLE player_at_roster + ADD COLUMN jersey_number NUMBER; diff --git a/data/migrations/rollback/00009_removing_numbers_from_players.sql b/data/migrations/rollback/00009_removing_numbers_from_players.sql new file mode 100644 index 0000000..fae3a4e --- /dev/null +++ b/data/migrations/rollback/00009_removing_numbers_from_players.sql @@ -0,0 +1,5 @@ +ALTER TABLE player_at_roster + DROP COLUMN jersey_number; + +ALTER TABLE player + DROP COLUMN jersey_number; From 4a06e3dcfba777eae5db0f4bbbe38c35e05ba8a5 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 4 Jan 2020 20:26:47 +0100 Subject: [PATCH 2/3] #39 adding jersey_number parameter to user creation and modification API, adding jersey_number parameter to player_at_roster creation API --- .../deploy/00009_adding_numbers_to_players.sql | 4 ++-- src/App/Controller/Player.php | 8 ++++++++ src/App/Controller/Roster.php | 3 ++- src/App/Model/Player.php | 17 ++++++++++++++--- src/App/Model/PlayerAtRoster.php | 14 ++++++++++++-- 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/data/migrations/deploy/00009_adding_numbers_to_players.sql b/data/migrations/deploy/00009_adding_numbers_to_players.sql index 0dfe05a..fe61e52 100644 --- a/data/migrations/deploy/00009_adding_numbers_to_players.sql +++ b/data/migrations/deploy/00009_adding_numbers_to_players.sql @@ -1,5 +1,5 @@ ALTER TABLE player - ADD COLUMN jersey_number NUMBER; + ADD COLUMN jersey_number int(11); ALTER TABLE player_at_roster - ADD COLUMN jersey_number NUMBER; + ADD COLUMN jersey_number int(11); diff --git a/src/App/Controller/Player.php b/src/App/Controller/Player.php index 04247b3..94c5360 100644 --- a/src/App/Controller/Player.php +++ b/src/App/Controller/Player.php @@ -26,6 +26,7 @@ public function create(\Slim\Http\Request $request, $response, $args) $gdprConsent = trim($request->getParam("gdpr_consent")); $nationalityID = trim($request->getParam("nationality_id")); $personalIdentificationNumber = trim($request->getParam("personal_identification_number")); + $jerseyNumber = trim($request->getParam("jersey_number")); $user = UserModel::loggedUser($request->getToken()); @@ -44,6 +45,9 @@ public function create(\Slim\Http\Request $request, $response, $args) if (!empty($personalIdentificationNumber)) { $p->setPersonalIdentificationNumber($personalIdentificationNumber); } + if (!empty($jerseyNumber) && is_numeric($jerseyNumber)) { + $p->setJerseyNumber($jerseyNumber); + } $p->save(); // Render index view @@ -67,6 +71,7 @@ public function update(\Slim\Http\Request $request, $response, $args) $gdprConsent = trim($request->getParam("gdpr_consent")); $nationalityID = trim($request->getParam("nationality_id")); $personalIdentificationNumber = trim($request->getParam("personal_identification_number")); + $jerseyNumber = trim($request->getParam("jersey_number")); $p = \App\Model\Player::loadById($playerId); if (!empty($email)) { @@ -100,6 +105,9 @@ public function update(\Slim\Http\Request $request, $response, $args) if (!empty($personalIdentificationNumber)) { $p->setPersonalIdentificationNumber($personalIdentificationNumber); } + if (!empty($jerseyNumber) && is_numeric($jerseyNumber)) { + $p->setJerseyNumber($jerseyNumber); + } $p->save(); diff --git a/src/App/Controller/Roster.php b/src/App/Controller/Roster.php index 1859920..5f588c1 100644 --- a/src/App/Controller/Roster.php +++ b/src/App/Controller/Roster.php @@ -67,6 +67,7 @@ public function addPlayer(\App\Request $request, $response, $args) { list($rosterId, $playerId) = $request->requireParams(['roster_id', 'player_id']); $role = trim($request->getParam("role", PlayerAtRoster::DEFAULT_ROLE)); + $jerseyNumber = trim($request->getParam("jersey_number", null)); $roster = \App\Model\Roster::loadById($rosterId); if (!$roster) { @@ -93,7 +94,7 @@ public function addPlayer(\App\Request $request, $response, $args) throw new Http400("Player is already on roster of another team"); } - $roster = PlayerAtRoster::create($playerId, $rosterId, $role); + $roster = PlayerAtRoster::create($playerId, $rosterId, $role, $jerseyNumber); $roster->save(); return $this->container->view->render( diff --git a/src/App/Model/Player.php b/src/App/Model/Player.php index 624adef..d7859ce 100644 --- a/src/App/Model/Player.php +++ b/src/App/Model/Player.php @@ -24,7 +24,13 @@ class Player extends \App\Model self::SEX_FEMALE, ]; - protected static $fields = ["id", "first_name", "last_name", "birth_date", "created_at", "email", "phone", "sex", "state", "nationality_id", "gdpr_consent", "personal_identification_number"]; + protected static $fields = [ + "id", "first_name", "last_name", + "birth_date", "created_at", "email", + "phone", "sex", "state", + "nationality_id", "gdpr_consent", "personal_identification_number", + "jersey_number" + ]; public function getFullName() { @@ -35,8 +41,12 @@ public function getHomeTeam() { } - public static function create($firstName, $lastName, $sex, $email = null, $birthDate = null, $phone = null, $state = self::STATE_ACTIVE, $nationalityID = null, $gdprConsent = false, $personalIdentificationNumber = null) - { + public static function create($firstName, $lastName, $sex, $email = null, $birthDate = null, $phone = null, $state = self::STATE_ACTIVE, $nationalityID = null, $gdprConsent = false, $personalIdentificationNumber = null, $jerseyNumber = null) + { + if ($jerseyNumber !== null && $jerseyNumber !== "" && (int)$jerseyNumber <= 0) { + throw new WrongParam("Jersey number '{$this->getJerseyNumber()}' is not valid - it has to be higher than 0"); + } + $i = new self(); $i->setFirstName($firstName); $i->setLastName($lastName); @@ -49,6 +59,7 @@ public static function create($firstName, $lastName, $sex, $email = null, $birth $i->setGdprConsent($gdprConsent); $i->setCreatedAt(date("Y-m-d H:i:s", time())); $i->setPersonalIdentificationNumber($personalIdentificationNumber); + $i->setJerseyNumber($jerseyNumber); return $i; } diff --git a/src/App/Model/PlayerAtRoster.php b/src/App/Model/PlayerAtRoster.php index bab6ebb..03dedc3 100644 --- a/src/App/Model/PlayerAtRoster.php +++ b/src/App/Model/PlayerAtRoster.php @@ -6,18 +6,25 @@ class PlayerAtRoster extends \App\Model { - protected static $fields = ["id", "player_id", "roster_id", "role"]; + protected static $fields = ["id", "player_id", "roster_id", "role", "jersey_number"]; protected static $allowedRoles = ["player", "captain", "spirit_captain", "medical", "coach", "other_support"]; const DEFAULT_ROLE = "player"; - public static function create($playerId, $rosterId, $role = PlayerAtRoster::DEFAULT_ROLE) + public static function create($playerId, $rosterId, $role = PlayerAtRoster::DEFAULT_ROLE, $jerseyNumber = null) { $i = new self(); + + if (empty($jerseyNumber) || !is_numeric($jerseyNumber)) { + $player = Player::loadById($playerId); + $jerseyNumber = $player->getJerseyNumber(); + } + $i->setPlayerId($playerId); $i->setRosterId($rosterId); $i->setRole($role); + $i->setJerseyNumber($jerseyNumber); $i->setSince(date("Y-m-d H:i:s", time())); return $i; @@ -28,6 +35,9 @@ protected function onSaveValidation() if (!in_array($this->getRole(), self::$allowedRoles)) { throw new WrongParam("Role {$this->getRole()} does not exist."); } + if ($this->getJerseyNumber() < 0) { + throw new WrongParam("Jersey number '{$this->getJerseyNumber()}' is not valid - it has to be higher than 0"); + } if (self::exists(["player_id" => $this->getPlayerId(), "roster_id" => $this->getRosterId(), "role" => $this->getRole()])) { throw new Duplicate("Player is already part of this team with same role"); } From de38db43808252add5d083342bf53349d1c87a25 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 4 Jan 2020 20:33:00 +0100 Subject: [PATCH 3/3] updating documentation --- api.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/api.md b/api.md index 566774a..9034c04 100644 --- a/api.md +++ b/api.md @@ -70,7 +70,7 @@ Upravuje data týmu Zobrazí data týmu ## `POST /player` -**Params**: `first_name`, `last_name`, `birth_date`, `sex`, `[email]`, `[phone]`, `[gdpr_consent]`, `[nationality_id]`, `[personal_identification_number]` +**Params**: `first_name`, `last_name`, `birth_date`, `sex`, `[email]`, `[phone]`, `[gdpr_consent]`, `[nationality_id]`, `[personal_identification_number]`, `[jersey_number]` **Auth**: token Vytvoří nového hráče **`first_name`**: Křestní jméno nového hráče @@ -81,10 +81,11 @@ Vytvoří nového hráče **`phone`**: Telefon na hráče (nepovinné) **`gdpr_consent`**: Flag zda hráč poskytl souhlas se zpracováním osobních údajů (nepovinné) **`nationality_id`**: ID národnosti hráče (nepovinné) -**`personal_identification_number`**: Rodné číslo hráče +**`personal_identification_number`**: Rodné číslo hráče +**`jersey_number`**: Číslo dresu ## `POST /player/{id}` -**Params**: `[first_name]`, `[last_name]`, `[birth_date]`, `[sex]`, `[email]`, `[phone]`, `[gdpr_consent]`, `[nationality_id]`, `[personal_identification_number]` +**Params**: `[first_name]`, `[last_name]`, `[birth_date]`, `[sex]`, `[email]`, `[phone]`, `[gdpr_consent]`, `[nationality_id]`, `[personal_identification_number]`, `[jersey_number]` **Auth**: token, musí být správce týmu Upraví data hráče **`first_name`**: Křestní jméno nového hráče @@ -96,6 +97,7 @@ Upraví data hráče **`gdpr_consent`**: Flag zda hráč poskytl souhlas se zpracováním osobních údajů (nepovinné) **`nationality_id`**: ID národnosti hráče (nepovinné) **`personal_identification_number`**: Rodné číslo hráče +**`jersey_number`**: Číslo dresu ## `GET /player/{player_id}` **Auth**: token, musí být správce týmu @@ -176,11 +178,12 @@ Změní jméno soupisky pro tým na turnaji Odstraní soupisku ## `POST /roster/{roster_id}/player/{player_id}` -**Params**: `roster_id`, `player_id`, [`role`] +**Params**: `roster_id`, `player_id`, [`role`], [`jersey_number`] **Auth**: token, musí být správce soupisek nebo týmu Přidá hráče na soupisku. Kontroluje duplicity - jeden hráč nemůže na stejné soupisce být víckrát se stejnou rolí, stejně. Stejně tak jeden hráč nemůže být na soupisce žádného jiného týmu na stejném turnaji, bez ohledu na role Pro účely vyůčtování se ČALD poplatky počítají pouze pro hráče s rolí "player" **`role`**: role uživatele na soupisce, může být jedna z [player | captain | spirit_captain | medical | coach | other_support ]. Není-li zadáno, je defaultní hodnota "player" +**`jersey_number`**: Číslo dresu (není-li vyplněno, vezme jako default číslo z hráčova profilu) ## `DELETE /roster/{roster_id}/player/{player_id}` **Params**: `roster_id`, `player_id`, [`role`]