dbh = $database->conn; $this->teamMapper = new TeamMapper($this->dbh); $this->timeMapper = new TimeMapper($this->dbh); } /** * Returns: * 0 created team * 1 started counting * 2 counted round * 3 counted too fast */ public function receive(string $cardnumber, int $timeout): int { $team = $this->teamMapper->getByCardnumber($cardnumber); if ($team) { // team exists, insert into time table // and update team table best time $prev_time = $this->timeMapper->getLatestByTeamId($team->id); $new_time = new Time; $new_time->setTeamId($team->id); // TODO: have this happen later so that it does not count when timeout $new_time = $this->timeMapper->create($new_time); // calculate best time for this team if ($prev_time !== NULL) { $diff = $new_time->date->getTimestamp() - $prev_time->date->getTimestamp(); if ($diff <= $timeout) { return 3; } if ($team->bestTime === NULL) { $team->bestTime = $diff; $this->teamMapper->update($team); } if ($diff < $team->bestTime) { $team->bestTime = $diff; $this->teamMapper->update($team); } return 2; } return 1; } // team does not exist, lets create it $team = new Team; $team->setCardnumber($cardnumber); $this->teamMapper->create($team); return 0; } }