feature/avoid-repeating-places-in-game #38
@ -0,0 +1,12 @@
|
||||
CREATE TABLE `user_played_place` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int(10) unsigned NOT NULL,
|
||||
`place_id` int(10) unsigned NOT NULL,
|
||||
`last_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`occurrences` int(10) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY(`id`),
|
||||
KEY `user_id` (`user_id`),
|
||||
KEY `place_id` (`place_id`),
|
||||
CONSTRAINT `user_played_place_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
|
||||
CONSTRAINT `user_played_place_place_id` FOREIGN KEY (`place_id`) REFERENCES `places` (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
99
src/PersistentData/Model/UserPlayedPlace.php
Normal file
99
src/PersistentData/Model/UserPlayedPlace.php
Normal file
@ -0,0 +1,99 @@
|
||||
<?php namespace MapGuesser\PersistentData\Model;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class UserPlayedPlace extends Model
|
||||
{
|
||||
protected static string $table = 'user_played_place';
|
||||
|
||||
protected static array $fields = ['user_id', 'place_id', 'last_time', 'occurrences'];
|
||||
|
||||
protected static array $relations = ['user' => User::class, 'place' => Place::class];
|
||||
|
||||
private ?User $user = null;
|
||||
|
||||
private ?int $userId = null;
|
||||
|
||||
private ?Place $place = null;
|
||||
|
||||
private ?int $placeId = null;
|
||||
|
||||
private DateTime $lastTime;
|
||||
|
||||
private int $occurrences = 1;
|
||||
|
||||
public function setUser(User $user): void
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
public function setUserId(int $userId): void
|
||||
{
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
public function setPlace(Place $place): void
|
||||
{
|
||||
$this->place = $place;
|
||||
}
|
||||
|
||||
public function setPlaceId(int $placeId): void
|
||||
{
|
||||
$this->placeId = $placeId;
|
||||
}
|
||||
|
||||
public function setLastTimeDate(DateTime $lastTime): void
|
||||
{
|
||||
$this->lastTime = $lastTime;
|
||||
}
|
||||
|
||||
public function setLastTime(string $lastTime): void
|
||||
{
|
||||
$this->lastTime = new DateTime($lastTime);
|
||||
}
|
||||
|
||||
public function setOccurrences(int $occurrences): void
|
||||
{
|
||||
$this->occurrences = $occurrences;
|
||||
}
|
||||
|
||||
public function incrementOccurrences(): void
|
||||
{
|
||||
$this->occurrences++;
|
||||
}
|
||||
|
||||
public function getUser(): ?User
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
public function getUserId(): ?int
|
||||
{
|
||||
return $this->userId;
|
||||
}
|
||||
|
||||
public function getPlace(): ?Place
|
||||
{
|
||||
return $this->place;
|
||||
}
|
||||
|
||||
public function getPlaceId(): ?int
|
||||
{
|
||||
return $this->placeId;
|
||||
}
|
||||
|
||||
public function getLastTimeDate(): DateTime
|
||||
{
|
||||
return $this->lastTime;
|
||||
}
|
||||
|
||||
public function getLastTime(): string
|
||||
{
|
||||
return $this->lastTime->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
public function getOccurrences(): int
|
||||
{
|
||||
return $this->occurrences;
|
||||
}
|
||||
}
|
52
src/Repository/UserPlayedPlaceRepository.php
Normal file
52
src/Repository/UserPlayedPlaceRepository.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php namespace MapGuesser\Repository;
|
||||
|
||||
use DateTime;
|
||||
use Generator;
|
||||
use MapGuesser\Database\Query\Select;
|
||||
use MapGuesser\PersistentData\Model\User;
|
||||
use MapGuesser\PersistentData\Model\Place;
|
||||
use MapGuesser\PersistentData\Model\UserPlayedPlace;
|
||||
use MapGuesser\PersistentData\PersistentDataManager;
|
||||
|
||||
class UserPlayedPlaceRepository
|
||||
{
|
||||
private PersistentDataManager $pdm;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->pdm = new PersistentDataManager();
|
||||
}
|
||||
|
||||
public function getByUser(User $user): Generator
|
||||
{
|
||||
$select = new Select(\Container::$dbConnection);
|
||||
$select->where('user_id', '=', $user->getId());
|
||||
|
||||
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
|
||||
}
|
||||
|
||||
public function getByPlace(Place $place): Generator
|
||||
{
|
||||
$select = new Select(\Container::$dbConnection);
|
||||
$select->where('place_id', '=', $place->getId());
|
||||
|
||||
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
|
||||
}
|
||||
|
||||
public function getAllByUser(User $user) : Generator
|
||||
{
|
||||
$select = new Select(\Container::$dbConnection);
|
||||
$select->where('user_id', '=', $user->getId());
|
||||
|
||||
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class, true);
|
||||
}
|
||||
|
||||
public function getByUserIdAndPlaceId(int $userId, int $placeId) : ?UserPlayedPlace
|
||||
{
|
||||
$select = new Select(\Container::$dbConnection);
|
||||
$select->where('user_id', '=', $userId);
|
||||
$select->where('place_id', '=', $placeId);
|
||||
|
||||
return $this->pdm->selectFromDb($select, UserPlayedPlace::class);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user