mirror of https://github.com/YGGverse/Yoda.git
yggverse
4 months ago
17 changed files with 657 additions and 515 deletions
@ -0,0 +1,31 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class Auth |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `auth` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`active` INTEGER NOT NULL, |
||||||
|
`identity` INTEGER NOT NULL, |
||||||
|
`request` VARCHAR(1024) NOT NULL |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,155 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class Bookmark |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `bookmark` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`request` VARCHAR(1024) UNIQUE, |
||||||
|
`title` VARCHAR(255) |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
|
||||||
|
public function add( |
||||||
|
?string $request = null, |
||||||
|
?string $title = null, |
||||||
|
?int $time = null |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'INSERT INTO `bookmark` ( |
||||||
|
`time`, |
||||||
|
`request`, |
||||||
|
`title` |
||||||
|
) VALUES ( |
||||||
|
:time, |
||||||
|
:request, |
||||||
|
:title |
||||||
|
)' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':time' => $time ? $time : time(), |
||||||
|
':request' => $request, |
||||||
|
':title' => $title |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return intval( |
||||||
|
$this->connection->lastInsertId() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function get( |
||||||
|
?string $request = null |
||||||
|
): ?object |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'SELECT * FROM `bookmark` WHERE `request` LIKE :request' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':request' => $request |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
if ($record = $query->fetch()) |
||||||
|
{ |
||||||
|
return $record; |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public function find( |
||||||
|
?string $value = null, |
||||||
|
int $start = 0, |
||||||
|
int $limit = 1000 |
||||||
|
): array |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
sprintf( |
||||||
|
'SELECT * FROM `bookmark` |
||||||
|
WHERE `request` LIKE :value OR `title` LIKE :value |
||||||
|
ORDER BY `id` DESC |
||||||
|
LIMIT %d,%d', |
||||||
|
$start, |
||||||
|
$limit |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':value' => sprintf( |
||||||
|
'%%%s%%', |
||||||
|
strval( |
||||||
|
$value |
||||||
|
) |
||||||
|
) |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return $query->fetchAll(); |
||||||
|
} |
||||||
|
|
||||||
|
public function delete( |
||||||
|
int $id |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
sprintf( |
||||||
|
'DELETE FROM `bookmark` WHERE `id` = %d', |
||||||
|
$id |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public function toggle( |
||||||
|
?string $request = null, |
||||||
|
?string $title = null, |
||||||
|
?int $time = null |
||||||
|
): bool |
||||||
|
{ |
||||||
|
if ($record = $this->get($request)) |
||||||
|
{ |
||||||
|
$this->delete( |
||||||
|
$record->id |
||||||
|
); |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
else |
||||||
|
{ |
||||||
|
$this->add( |
||||||
|
$request, |
||||||
|
$title, |
||||||
|
$time |
||||||
|
); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,173 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class Cache |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `cache` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`request` VARCHAR(1024) UNIQUE, |
||||||
|
`mime` VARCHAR(255), |
||||||
|
`title` VARCHAR(255), |
||||||
|
`subtitle` VARCHAR(255), |
||||||
|
`tooltip` VARCHAR(255), |
||||||
|
`data` BLOB |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
|
||||||
|
public function add( |
||||||
|
?string $request = null, |
||||||
|
?string $mime = null, |
||||||
|
?string $title = null, |
||||||
|
?string $subtitle = null, |
||||||
|
?string $tooltip = null, |
||||||
|
?string $data = null, |
||||||
|
?int $time = null |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'INSERT INTO `cache` ( |
||||||
|
`time`, |
||||||
|
`request`, |
||||||
|
`mime`, |
||||||
|
`title`, |
||||||
|
`subtitle`, |
||||||
|
`tooltip`, |
||||||
|
`data` |
||||||
|
) VALUES ( |
||||||
|
:time, |
||||||
|
:request, |
||||||
|
:mime, |
||||||
|
:title, |
||||||
|
:subtitle, |
||||||
|
:tooltip, |
||||||
|
:data |
||||||
|
)' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':time' => $time ? $time : time(), |
||||||
|
':request' => $request, |
||||||
|
':mime' => $mime, |
||||||
|
':title' => $title, |
||||||
|
':subtitle' => $subtitle, |
||||||
|
':tooltip' => $tooltip, |
||||||
|
':data' => $data |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return intval( |
||||||
|
$this->connection->lastInsertId() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function get( |
||||||
|
string $request = '' |
||||||
|
): ?object |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'SELECT * FROM `cache` WHERE `request` LIKE :request' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':request' => $request |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
if ($cache = $query->fetch()) |
||||||
|
{ |
||||||
|
return $cache; |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public function delete( |
||||||
|
int $id |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
sprintf( |
||||||
|
'DELETE FROM `cache` WHERE `id` = %d', |
||||||
|
$id |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public function clean( |
||||||
|
int $timeout = 0 |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
sprintf( |
||||||
|
'DELETE FROM `cache` WHERE `time` + %d < %d', |
||||||
|
$timeout, |
||||||
|
time() |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public function renew( |
||||||
|
string $request, |
||||||
|
?string $mime = null, |
||||||
|
?string $title = null, |
||||||
|
?string $subtitle = null, |
||||||
|
?string $tooltip = null, |
||||||
|
?string $data = null, |
||||||
|
?int $time = null |
||||||
|
): void |
||||||
|
{ |
||||||
|
// Find same records match URL |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'SELECT * FROM `cache` WHERE `request` LIKE :request' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':request' => $request |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
// Drop previous records |
||||||
|
foreach ($query->fetchAll() as $record) |
||||||
|
{ |
||||||
|
$this->delete( |
||||||
|
$record->id |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
// Add new record |
||||||
|
$this->add( |
||||||
|
$request, |
||||||
|
$mime, |
||||||
|
$title, |
||||||
|
$subtitle, |
||||||
|
$tooltip, |
||||||
|
$data, |
||||||
|
$time |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,142 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class History |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `history` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`url` VARCHAR(1024) NOT NULL, |
||||||
|
`title` VARCHAR(255) |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
|
||||||
|
public function add( |
||||||
|
string $url, |
||||||
|
?string $title = null |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'INSERT INTO `history` (`time`, `url`, `title`) VALUES (:time, :url, :title)' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':time' => time(), |
||||||
|
':url' => $url, |
||||||
|
':title' => $title |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return intval( |
||||||
|
$this->connection->lastInsertId() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function find( |
||||||
|
string $value = '', |
||||||
|
int $start = 0, |
||||||
|
int $limit = 1000 |
||||||
|
): array |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
sprintf( |
||||||
|
'SELECT * FROM `history` |
||||||
|
WHERE `url` LIKE :value OR `title` LIKE :value |
||||||
|
ORDER BY `id` DESC |
||||||
|
LIMIT %d,%d', |
||||||
|
$start, |
||||||
|
$limit |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':value' => sprintf( |
||||||
|
'%%%s%%', |
||||||
|
$value |
||||||
|
) |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return $query->fetchAll(); |
||||||
|
} |
||||||
|
|
||||||
|
public function delete( |
||||||
|
int $id |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
sprintf( |
||||||
|
'DELETE FROM `history` WHERE `id` = %d', |
||||||
|
$id |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public function clean( |
||||||
|
int $timeout = 0 |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
sprintf( |
||||||
|
'DELETE FROM `history` WHERE `time` + %d < %d', |
||||||
|
$timeout, |
||||||
|
time() |
||||||
|
) |
||||||
|
|
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
|
||||||
|
public function renew( |
||||||
|
string $url, |
||||||
|
?string $title = null |
||||||
|
): void |
||||||
|
{ |
||||||
|
// Find same records match URL |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'SELECT * FROM `history` WHERE `url` LIKE :url' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':url' => $url |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
// Drop previous records |
||||||
|
foreach ($query->fetchAll() as $record) |
||||||
|
{ |
||||||
|
$this->delete( |
||||||
|
$record->id |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
// Add new record |
||||||
|
$this->add( |
||||||
|
$url, |
||||||
|
$title |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class Identity |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `identity` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`active` INTEGER NOT NULL, |
||||||
|
`name` VARCHAR(255), |
||||||
|
`crt` TEXT NOT NULL, |
||||||
|
`key` TEXT NOT NULL |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
namespace Yggverse\Yoda\Model\Database; |
||||||
|
|
||||||
|
use \Pdo; |
||||||
|
|
||||||
|
class Session |
||||||
|
{ |
||||||
|
public Pdo $connection; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
Pdo $connection |
||||||
|
) { |
||||||
|
// Init parent connection |
||||||
|
$this->connection = $connection; |
||||||
|
|
||||||
|
// Init database structure |
||||||
|
$this->connection->query(' |
||||||
|
CREATE TABLE IF NOT EXISTS `session` |
||||||
|
( |
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
||||||
|
`time` INTEGER NOT NULL, |
||||||
|
`request` VARCHAR(1024) |
||||||
|
) |
||||||
|
'); |
||||||
|
} |
||||||
|
|
||||||
|
public function add( |
||||||
|
?string $request = null, |
||||||
|
?int $time = null |
||||||
|
): int |
||||||
|
{ |
||||||
|
$query = $this->connection->prepare( |
||||||
|
'INSERT INTO `session` (`time`, `request`) VALUES (:time, :request)' |
||||||
|
); |
||||||
|
|
||||||
|
$query->execute( |
||||||
|
[ |
||||||
|
':time' => $time ? $time : time(), |
||||||
|
':request' => $request |
||||||
|
] |
||||||
|
); |
||||||
|
|
||||||
|
return intval( |
||||||
|
$this->connection->lastInsertId() |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
public function get(): array |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
'SELECT * FROM `session`' |
||||||
|
); |
||||||
|
|
||||||
|
if ($session = $query->fetchAll()) |
||||||
|
{ |
||||||
|
return $session; |
||||||
|
} |
||||||
|
|
||||||
|
return []; |
||||||
|
} |
||||||
|
|
||||||
|
public function clean(): int |
||||||
|
{ |
||||||
|
$query = $this->connection->query( |
||||||
|
'DELETE FROM `session`' |
||||||
|
); |
||||||
|
|
||||||
|
return $query->rowCount(); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue