mirror of
https://github.com/standardebooks/web.git
synced 2025-07-06 23:00:28 -04:00
86 lines
1.7 KiB
PHP
86 lines
1.7 KiB
PHP
<?
|
|
use Ramsey\Uuid\Uuid;
|
|
use Safe\DateTime;
|
|
|
|
/**
|
|
* @property Array<Payment> $Payments
|
|
*/
|
|
class User extends PropertiesBase{
|
|
public $UserId;
|
|
public $Name;
|
|
public $Email;
|
|
public $Created;
|
|
public $Uuid;
|
|
protected $_Payments = null;
|
|
|
|
|
|
// *******
|
|
// GETTERS
|
|
// *******
|
|
|
|
/**
|
|
* @return array<Payment>
|
|
*/
|
|
protected function GetPayments(): array{
|
|
if($this->_Payments === null){
|
|
$this->_Payments = Db::Query('select * from Payments where UserId = ? order by Created desc', [$this->UserId], 'Payment');
|
|
}
|
|
|
|
return $this->_Payments;
|
|
}
|
|
|
|
|
|
// *******
|
|
// METHODS
|
|
// *******
|
|
|
|
public function Create(): void{
|
|
$uuid = Uuid::uuid4();
|
|
$this->Uuid = $uuid->toString();
|
|
$this->Created = new DateTime();
|
|
|
|
try{
|
|
Db::Query('INSERT into Users (Email, Name, Uuid, Created) values (?, ?, ?, ?);', [$this->Email, $this->Name, $this->Uuid, $this->Created]);
|
|
}
|
|
catch(PDOException $ex){
|
|
if($ex->errorInfo[1] == 1062){
|
|
// Duplicate unique key; email already in use
|
|
throw new Exceptions\UserExistsException();
|
|
}
|
|
else{
|
|
throw $ex;
|
|
}
|
|
}
|
|
|
|
$this->UserId = Db::GetLastInsertedId();
|
|
}
|
|
|
|
|
|
// ***********
|
|
// ORM METHODS
|
|
// ***********
|
|
|
|
public static function Get(?int $userId): User{
|
|
$result = Db::Query('SELECT * from Users where UserId = ?', [$userId], 'User');
|
|
|
|
if(sizeof($result) == 0){
|
|
throw new Exceptions\InvalidUserException();
|
|
}
|
|
|
|
return $result[0];
|
|
}
|
|
|
|
public static function GetByEmail(?string $email): User{
|
|
if($email === null){
|
|
throw new Exceptions\InvalidUserException();
|
|
}
|
|
|
|
$result = Db::Query('SELECT * from Users where Email = ?', [$email], 'User');
|
|
|
|
if(sizeof($result) == 0){
|
|
throw new Exceptions\InvalidUserException();
|
|
}
|
|
|
|
return $result[0];
|
|
}
|
|
}
|