Файл ServerEventsObserversRepository.php в Cotonti
Основное назначение файла ServerEventsObserversRepository.php в системе Cotonti CMF заключается в реализации репозитория для работы с наблюдателями событий (Observers), которые отслеживают события на сервере. Этот класс предоставляет интерфейс для взаимодействия с таблицей, содержащей данные о наблюдателях, что позволяет управлять сессиями пользователей, подписанными на серверные события.
Основные задачи и методы файла:
-
Хранение и управление сессиями наблюдателей:
- Класс управляет сессиями пользователей, которые отслеживают события на сервере, с помощью методов получения данных и подсчета количества сессий. Это необходимо для реализации механизма событий в реальном времени.
-
Методы:
getByUserId: Этот метод позволяет получить информацию о наблюдателях для конкретного пользователя и, при необходимости, фильтровать по токену. Это важно для работы с индивидуальными сессиями пользователя.getCountByUserId: Метод подсчитывает количество сессий, связанных с пользователем. Это может быть полезно для определения активности пользователя или состояния сессий.castAttributes: Этот метод отвечает за приведение типов данных, например, превращая значения, извлеченные из базы данных, в нужный формат (например, целые числа). Это важно для обеспечения корректной работы с типами данных в коде.
Роль в системе:
Этот файл играет ключевую роль в системе обработки серверных событий (Server-Sent Events, SSE) и управления их наблюдателями. Он взаимодействует с базой данных для хранения и извлечения информации о пользователях и их сессиях, обеспечивая возможность обработки и доставки сообщений событий пользователям в реальном времени.
Важность:
- Репозиторий служит абстракцией для взаимодействия с базой данных, что упрощает работу с данными о наблюдателях, а также предоставляет гибкие методы для получения и подсчета сессий пользователей.
- Он тесно связан с другими компонентами системы, такими как
ServerEventServiceиServerEventMessageDto, которые занимаются логикой и передачей самих событий.
Место в системе:
Файл является частью системы репозиториев, которая обеспечивает абстракцию работы с базой данных. Он используется другими частями системы для получения информации о наблюдателях и их сессиях, а также для управления данными, связанными с серверными событиями, что позволяет реализовывать логику подписки и уведомлений пользователей о событиях в реальном времени.
<?php
declare(strict_types=1); // Включение строгой типизации для обеспечения строгого контроля типов.
namespace cot\serverEvents\repositories; // Определение пространства имен для репозитория событий на сервере.
use Cot; // Импорт глобального объекта Cot для работы с базой данных.
use cot\repositories\BaseRepository; // Импорт базового репозитория, от которого будет наследоваться этот класс.
defined('COT_CODE') or die('Wrong URL'); // Проверка, что код запускается в правильном контексте. Если нет, завершить выполнение.
/**
* Server Event observers repository
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
class ServerEventsObserversRepository extends BaseRepository // Класс репозитория для работы с наблюдателями событий на сервере.
{
public function __construct() // Конструктор класса.
{
$this->tableName = Cot::$db->server_events_observers; // Устанавливаем имя таблицы для репозитория наблюдателей.
}
public function getByUserId(int $userId, ?string $token = null): ?array // Метод получения наблюдателя по идентификатору пользователя и необязательному токену.
{
$condition = ['user_id = :userId']; // Условие для поиска по user_id.
$params = ['userId' => $userId]; // Параметры для подстановки в SQL-запрос.
if (!empty($token)) { // Если токен не пустой, добавляем его в условие.
$condition[] = 'token = :token'; // Добавляем условие для фильтрации по токену.
$params['token'] = $token; // Устанавливаем значение для токена.
}
$result = $this->getByCondition($condition, $params, 'created_at DESC'); // Выполнение метода getByCondition с фильтром и сортировкой по времени создания.
if (empty($result)) { // Если результат пустой, возвращаем null.
return null;
}
return array_shift($result); // Возвращаем первый элемент из результата.
}
/**
* Получить количество сессий пользователя
*/
public function getCountByUserId(int $userId, ?string $token = null): int // Метод получения количества сессий для конкретного пользователя.
{
$table = Cot::$db->quoteTableName(Cot::$db->server_events_observers); // Получаем корректное имя таблицы с помощью метода quoteTableName.
$condition = ['user_id = :userId']; // Условие для поиска по user_id.
$params = ['userId' => $userId]; // Параметры для подстановки в SQL-запрос.
if (!empty($token)) { // Если токен не пустой, добавляем его в условие.
$condition[] = 'token = :token'; // Добавляем условие для фильтрации по токену.
$params['token'] = $token; // Устанавливаем значение для токена.
}
$sqlWhere = 'WHERE ' . $this->prepareCondition($condition); // Подготавливаем SQL-условие с помощью метода prepareCondition.
$sql = "SELECT COUNT(*) FROM $table $sqlWhere"; // Формируем запрос для подсчета количества записей в таблице.
$result = Cot::$db->query($sql, $params)->fetchColumn(); // Выполняем запрос и получаем количество сессий.
return (int) $result; // Возвращаем результат как целое число.
}
protected function castAttributes(array $item): array // Метод для приведения типов атрибутов элемента.
{
$item['id'] = (int) $item['id']; // Приводим id к типу integer.
$item['user_id'] = (int) $item['user_id']; // Приводим user_id к типу integer.
$item['last_event_id'] = (int) $item['last_event_id']; // Приводим last_event_id к типу integer.
return $item; // Возвращаем приведенные элементы.
}
}
Основное назначение кода:
Этот класс является репозиторием для работы с данными, связанными с наблюдателями событий на сервере в рамках фреймворка Cotonti. Он предоставляет методы для получения информации о наблюдателях, таких как:
getByUserId— получение данных о наблюдателе для конкретного пользователя и токена.getCountByUserId— подсчет количества сессий для пользователя.castAttributes— метод для приведения типов данных элементов.
Репозиторий используется для взаимодействия с таблицей наблюдателей событий на сервере, что является частью системы обработки событий в фреймворке Cotonti.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 28.01.2025 00:05
- Последнее обновление: 28.01.2025 00:06