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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user