Files
api/services/nginx/app/objects/tokens_o.php
T
Jepp9350 c240bbd94f Refactor database object trait and improve data handling
Added `delete`, `restore`, and other utility methods to enhance CRUD operations, including support for soft deletes. Introduced `objectChanged` hooks across objects for better cache or event handling, ensuring scalability and maintainability. Refactored and standardized object property handling while restructuring related methods.
2025-02-12 09:23:35 +01:00

93 lines
2.6 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use Exception;
use traits\db_object_t;
class tokens_o extends db
{
use db_object_t;
public object_property $user_id;
public object_property $type; // AUTH_TOKEN, RESET_PASSWORD
public object_property $token;
public function structure(): void
{
$this->setTable('tokens');
}
public function objectChanged(): void
{
// Invalidate the cache
redis->clear_token($this->token->value());
}
public function create(int $user_id, string $token, string $type = 'AUTH_TOKEN'): void
{
global $db;
// Avoid SQL injection
$token = $db->escape_string($token);
// Create a new record in the database
$sql = "INSERT INTO $this->table (user_id, token, type) VALUES ($user_id, '$token', '$type')";
$db->query($sql);
// Get the id of the new record
$this->id = $db->insert_id();
// Set the values of the object properties
$this->getObjectProperties();
}
public function getObjectProperties(): void
{
$this->user_id = new object_property($this->table, $this->id, 'user_id', 'int', true);
$this->type = new object_property($this->table, $this->id, 'type', 'string', true);
$this->token = new object_property($this->table, $this->id, 'token', 'string', true);
}
/**
* @throws Exception
*/
public function getToken(string $token): tokens_o
{
global $db;
// Check if the token is cached
$cached = redis->get_token($token);
if ($cached) {
$this->id = $cached['id'];
$this->getObjectProperties();
return $this;
}
// Avoid SQL injection
$token = $db->escape_string($token);
// Prepare the SQL statement
$sql = "SELECT id FROM $this->table WHERE token = '$token'";
$result = $db->query($sql);
$row = $db->fetch_assoc($result);
if (!$row) {
throw new Exception("Token not found " . $token);
}
// Cache the token
redis->cache_token($token, $row);
$this->id = $row['id'];
$this->getObjectProperties();
return $this;
}
public function delete(string $token): void
{
global $db;
// Avoid SQL injection
$token = $db->escape_string($token);
// Prepare the SQL statement
$sql = "DELETE FROM $this->table WHERE token = '$token'";
$db->query($sql);
// Clear the token from the cache
redis->clear_token($token);
}
}