vk-arangodb/mirzaev/vk/arangodb/system/vk/group.php

83 lines
2.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace mirzaev\vk\arangodb\vk;
use mirzaev\vk\arangodb\longpoll;
use mirzaev\vk\arangodb\journal;
use mirzaev\arangodb\collection;
use mirzaev\arangodb\document;
use ArangoDBClient\Document as _document;
use ArangoDBClient\Connection as _connection;
class group
{
/**
* Инициализация
*
* @param _connection $session Сессия соединения с базой данных
* @param int $id Идентификатор ВКонтакте
* @param bool $journal Записывать в журнал
* @param bool $create Создавать коллекции при их отсутствии
*
* @return ?_document Инстанция документа
*/
public static function init(_connection $session, int $id, bool $journal = true, bool $create = true): ?_document
{
// Инициализация коллекции
$collection = longpoll::COLLECTION_GROUPS;
if ($create) {
// Запрошено создание коллекций в случае их отсутствия
// Создание коллекции
collection::init($session, $collection);
}
if ($account = collection::search($session, <<<AQL
FOR x IN $collection
FILTER x.data.data.id == $id
LIMIT 1
RETURN x.data
AQL)) {
// Найден аккаунт
return $account;
}
if ($account = document::write($session, $collection, ['data' => ['id' => $id]])) {
// Аккаунт записан
// Журналирование
if ($journal && journal::init($session, $account)->write('create', [
'changes' => [
'new' => collection::search($session, <<<AQL
FOR a IN $collection
FILTER a._id == $account
LIMIT 1
RETURN a.data
AQL),
'old' => null
]
])) {
// Записаны данные в журнал
}
if ($account = collection::search($session, <<<AQL
FOR x IN $collection
FILTER x.data.data.id == $id
LIMIT 1
RETURN x
AQL)) {
// Найден аккаунт
return $account;
}
}
return null;
}
}