Файл ServerEventsObserversRepository.php в Cotonti

Основное назначение файла ServerEventsObserversRepository.php в системе Cotonti CMF заключается в реализации репозитория для работы с наблюдателями событий (Observers), которые отслеживают события на сервере. Этот класс предоставляет интерфейс для взаимодействия с таблицей, содержащей данные о наблюдателях, что позволяет управлять сессиями пользователей, подписанными на серверные события.

Основные задачи и методы файла:

  1. Хранение и управление сессиями наблюдателей:

    • Класс управляет сессиями пользователей, которые отслеживают события на сервере, с помощью методов получения данных и подсчета количества сессий. Это необходимо для реализации механизма событий в реальном времени.
  2. Методы:

    • 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. Он предоставляет методы для получения информации о наблюдателях, таких как:

  1. getByUserId — получение данных о наблюдателе для конкретного пользователя и токена.
  2. getCountByUserId — подсчет количества сессий для пользователя.
  3. castAttributes — метод для приведения типов данных элементов.

Репозиторий используется для взаимодействия с таблицей наблюдателей событий на сервере, что является частью системы обработки событий в фреймворке Cotonti.

 

 

4 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 28.01.2025 00:05
  • Последнее обновление: 28.01.2025 00:06