83 lines
2.6 KiB
PHP
83 lines
2.6 KiB
PHP
<?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;
|
||
}
|
||
}
|