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