Compare commits

..

No commits in common. "2.0.x" and "stable" have entirely different histories.

4 changed files with 62 additions and 59 deletions

View File

@ -50,10 +50,10 @@ class journal
* Инициализация
*
* @param _connection $session Сессия соединения с базой данных
* @param string $document Идентификатор документа для которого нужен журнал
* @param bool $create Создавать коллекции при их отсутствии?
* @param string $document Идентификатор документа
* @param bool $create Создавать коллекции при их отсутствии
*
* @return static|null Инстанция журнала
* @return static|null Объект с инстанцией журнала
*/
public static function init(_connection $session, string $document, bool $create = true): ?static
{
@ -66,16 +66,22 @@ class journal
}
if (empty($journal = static::search($session, $document))) {
// Не найден журнал (подразумевается, что его не существует или истёк срок использования)
// Не найден журнал (подразумевается, что его не существует)
// Создание журнала
if (empty(document::write($session, static::COLLECTION_JOURNAL, [
if (empty($journal = document::write($session, static::COLLECTION_JOURNAL, [
'events' => [],
'expires' => strtotime('first day of next month 00:00')
])) || empty($journal = static::search($session, $document))) return null;
]))) {
// Не удалось создать документ
// Cоздание ребра: {$document} -> ЖУРНАЛ
if (empty(document::write($session, longpoll::COLLECTION_ACCESSED, ['_from' => $document, '_to' => $journal->getId()]))) return null;
return null;
}
if (empty(document::write($session, longpoll::COLLECTION_ACCESSED, ['_from' => $document, '_to' => $journal]))) {
// Не удалось создать ребро: {$document} -> ЖУРНАЛ
return null;
}
}
// Инициализация инстанции журнала и возврат
@ -88,7 +94,7 @@ class journal
* Находит актуальный документ журнала
*
* @param _connection $session Сессия соединения с базой данных
* @param string $document Идентификатор документа для которого нужен журнал
* @param string $document Идентификатор документа
*
* @return _document|null Инстанция (static::COLLECTION_JOURNAL) или его идентификатор
*/
@ -111,7 +117,7 @@ class journal
FOR a IN $collection
LET b = (
FOR vertex, edge IN INBOUND a $edge
FILTER vertex._id == "$document"
FILTER vertex._id == $document
LIMIT 1
RETURN vertex
)

View File

@ -25,7 +25,7 @@ use ArangoDBClient\Document as _document,
class account
{
/**
* Инициализация
* Инициализировать
*
* @param _connection $session Сессия соединения с базой данных
* @param int $id Идентификатор ВКонтакте
@ -43,7 +43,7 @@ class account
collection::init($session, longpoll::COLLECTION_ACCOUNTS);
}
// Поиск аккаунта
// Поиск
if ($account = static::search($session, $id));
else if ($account = document::write($session, longpoll::COLLECTION_ACCOUNTS, ['id' => $id]) and $journal)
journal::init($session, $account)->write('create', [
@ -62,13 +62,12 @@ class account
]
]);
// Поиск аккаунта
// Поиск
return static::search($session, $id);
}
/**
* Найти аккаунт
* Найти
*
* @param _connection $session Сессия соединения с базой данных
* @param int $id Идентификатор ВКонтакте

View File

@ -36,57 +36,55 @@ class chat
*/
public static function init(_connection $session, int $id, bool $journal = true, bool $create = true): ?_document
{
// Инициализация коллекции
$collection = longpoll::COLLECTION_CHATS;
if ($create) {
// Запрошено создание коллекций в случае их отсутствия
// Создание коллекции
collection::init($session, $collection);
collection::init($session, longpoll::COLLECTION_CHATS);
}
if ($account = collection::search($session, <<<AQL
FOR x IN $collection
FILTER x.id == "$id"
LIMIT 1
RETURN x
AQL)) {
// Найден аккаунт
return $account;
}
if ($account = document::write($session, $collection, ['id' => $id])) {
// Аккаунт записан
// Журналирование
if ($journal && journal::init($session, $account)->write('create', [
// Поиск
if ($chat = static::search($session, $id));
else if ($chat = document::write($session, longpoll::COLLECTION_CHATS, ['id' => $id]) and $journal)
journal::init($session, $chat)->write('create', [
'changes' => [
'new' => collection::search($session, <<<AQL
FOR x IN $collection
FILTER x._id == "$account"
'new' => collection::search($session, sprintf(
<<<'AQL'
FOR x IN %s
FILTER x._id == "%s"
LIMIT 1
RETURN x
AQL),
AQL,
longpoll::COLLECTION_CHATS,
$chat
)),
'old' => null
]
])) {
// Записаны данные в журнал
}
]);
if ($account = collection::search($session, <<<AQL
FOR x IN $collection
FILTER x.id == "$id"
LIMIT 1
RETURN x
AQL)) {
// Найден аккаунт
// Поиск
return static::search($session, $id);
}
return $account;
}
}
return null;
/**
* Найти в базе данных
*
* @param _connection $session Сессия соединения с базой данных
* @param int $id Идентификатор ВКонтакте
*
* @return ?_document Инстанция документа
*/
public static function search(_connection $session, int $id): ?_document
{
return collection::search($session, sprintf(
<<<'AQL'
FOR x IN %s
FILTER x.id == %u
LIMIT 1
RETURN x
AQL,
longpoll::COLLECTION_CHATS,
$id
));
}
}

View File

@ -33,7 +33,7 @@ class group
collection::init($session, longpoll::COLLECTION_GROUPS);
}
// Поиск группы
// Поиск
if ($group = static::search($session, $id));
else if ($group = document::write($session, longpoll::COLLECTION_GROUPS, ['id' => $id]) and $journal)
journal::init($session, $group)->write('create', [
@ -53,12 +53,12 @@ class group
]);
// Поиск группы
// Поиск
return static::search($session, $id);
}
/**
* Найти группу
* Найти в базе данных
*
* @param _connection $session Сессия соединения с базой данных
* @param int $id Идентификатор ВКонтакте
@ -70,7 +70,7 @@ class group
return collection::search($session, sprintf(
<<<'AQL'
FOR x IN %s
FILTER x.id == %u
FILTER x.id == %d
LIMIT 1
RETURN x
AQL,