Files
mapguesser/src/Repository/UserRepository.php
T

64 lines
1.9 KiB
PHP

<?php namespace MapGuesser\Repository;
use DateTime;
use Generator;
use SokoWeb\Interfaces\Repository\IUserRepository;
use SokoWeb\Database\Query\Select;
use MapGuesser\PersistentData\Model\Guess;
use MapGuesser\PersistentData\Model\User;
class UserRepository implements IUserRepository
{
public function getById(int $userId): ?User
{
return \Container::$persistentDataManager->selectFromDbById($userId, User::class);
}
public function getByEmail(string $email): ?User
{
$select = new Select(\Container::$dbConnection);
$select->where('email', '=', $email);
return \Container::$persistentDataManager->selectFromDb($select, User::class);
}
public function getByUsername(string $username): ?User
{
$select = new Select(\Container::$dbConnection);
$select->where('username', '=', $username);
return \Container::$persistentDataManager->selectFromDb($select, User::class);
}
public function getByEmailOrUsername(string $emailOrUsername): ?User
{
if (filter_var($emailOrUsername, FILTER_VALIDATE_EMAIL)) {
return $this->getByEmail($emailOrUsername);
}
return $this->getByUsername($emailOrUsername);
}
public function getByGoogleSub(string $sub): ?User
{
$select = new Select(\Container::$dbConnection);
$select->where('google_sub', '=', $sub);
return \Container::$persistentDataManager->selectFromDb($select, User::class);
}
public function getAllInactiveExpired(): Generator
{
$select = new Select(\Container::$dbConnection);
$select->where('active', '=', false);
$select->where('created', '<', (new DateTime('-1 day'))->format('Y-m-d H:i:s'));
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, User::class);
}
public function getByGuess(Guess $guess): ?User
{
return $this->getById($guess->getUserId());
}
}