Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
Arsen Mirzaev Tatyano-Muradovich | 37177e2891 | ||
Arsen Mirzaev Tatyano-Muradovich | 2dd35d0321 |
|
@ -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,22 +66,16 @@ class journal
|
|||
}
|
||||
|
||||
if (empty($journal = static::search($session, $document))) {
|
||||
// Не найден журнал (подразумевается, что его не существует)
|
||||
// Не найден журнал (подразумевается, что его не существует или истёк срок использования)
|
||||
|
||||
if (empty($journal = document::write($session, static::COLLECTION_JOURNAL, [
|
||||
// Создание журнала
|
||||
if (empty(document::write($session, static::COLLECTION_JOURNAL, [
|
||||
'events' => [],
|
||||
'expires' => strtotime('first day of next month 00:00')
|
||||
]))) {
|
||||
// Не удалось создать документ
|
||||
])) || empty($journal = static::search($session, $document))) return null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
if (empty(document::write($session, longpoll::COLLECTION_ACCESSED, ['_from' => $document, '_to' => $journal]))) {
|
||||
// Не удалось создать ребро: {$document} -> ЖУРНАЛ
|
||||
|
||||
return null;
|
||||
}
|
||||
// Cоздание ребра: {$document} -> ЖУРНАЛ
|
||||
if (empty(document::write($session, longpoll::COLLECTION_ACCESSED, ['_from' => $document, '_to' => $journal->getId()]))) return null;
|
||||
}
|
||||
|
||||
// Инициализация инстанции журнала и возврат
|
||||
|
@ -94,7 +88,7 @@ class journal
|
|||
* Находит актуальный документ журнала
|
||||
*
|
||||
* @param _connection $session Сессия соединения с базой данных
|
||||
* @param string $document Идентификатор документа
|
||||
* @param string $document Идентификатор документа для которого нужен журнал
|
||||
*
|
||||
* @return _document|null Инстанция (static::COLLECTION_JOURNAL) или его идентификатор
|
||||
*/
|
||||
|
@ -117,7 +111,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
|
||||
)
|
||||
|
|
|
@ -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,12 +62,13 @@ class account
|
|||
]
|
||||
]);
|
||||
|
||||
// Поиск
|
||||
|
||||
// Поиск аккаунта
|
||||
return static::search($session, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Найти
|
||||
* Найти аккаунт
|
||||
*
|
||||
* @param _connection $session Сессия соединения с базой данных
|
||||
* @param int $id Идентификатор ВКонтакте
|
||||
|
|
|
@ -36,55 +36,57 @@ 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, longpoll::COLLECTION_CHATS);
|
||||
collection::init($session, $collection);
|
||||
}
|
||||
|
||||
// Поиск
|
||||
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, sprintf(
|
||||
<<<'AQL'
|
||||
FOR x IN %s
|
||||
FILTER x._id == "%s"
|
||||
if ($account = collection::search($session, <<<AQL
|
||||
FOR x IN $collection
|
||||
FILTER x.id == "$id"
|
||||
LIMIT 1
|
||||
RETURN x
|
||||
AQL,
|
||||
longpoll::COLLECTION_CHATS,
|
||||
$chat
|
||||
)),
|
||||
AQL)) {
|
||||
// Найден аккаунт
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
if ($account = document::write($session, $collection, ['id' => $id])) {
|
||||
// Аккаунт записан
|
||||
|
||||
// Журналирование
|
||||
if ($journal && journal::init($session, $account)->write('create', [
|
||||
'changes' => [
|
||||
'new' => collection::search($session, <<<AQL
|
||||
FOR x IN $collection
|
||||
FILTER x._id == "$account"
|
||||
LIMIT 1
|
||||
RETURN x
|
||||
AQL),
|
||||
'old' => null
|
||||
]
|
||||
]);
|
||||
|
||||
// Поиск
|
||||
return static::search($session, $id);
|
||||
])) {
|
||||
// Записаны данные в журнал
|
||||
}
|
||||
|
||||
/**
|
||||
* Найти в базе данных
|
||||
*
|
||||
* @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
|
||||
if ($account = collection::search($session, <<<AQL
|
||||
FOR x IN $collection
|
||||
FILTER x.id == "$id"
|
||||
LIMIT 1
|
||||
RETURN x
|
||||
AQL,
|
||||
longpoll::COLLECTION_CHATS,
|
||||
$id
|
||||
));
|
||||
AQL)) {
|
||||
// Найден аккаунт
|
||||
|
||||
return $account;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 == %d
|
||||
FILTER x.id == %u
|
||||
LIMIT 1
|
||||
RETURN x
|
||||
AQL,
|
||||
|
|
Loading…
Reference in New Issue