Compare commits
No commits in common. "2.0.x" and "stable" have entirely different histories.
|
@ -50,10 +50,10 @@ class journal
|
||||||
* Инициализация
|
* Инициализация
|
||||||
*
|
*
|
||||||
* @param _connection $session Сессия соединения с базой данных
|
* @param _connection $session Сессия соединения с базой данных
|
||||||
* @param string $document Идентификатор документа для которого нужен журнал
|
* @param string $document Идентификатор документа
|
||||||
* @param bool $create Создавать коллекции при их отсутствии?
|
* @param bool $create Создавать коллекции при их отсутствии
|
||||||
*
|
*
|
||||||
* @return static|null Инстанция журнала
|
* @return static|null Объект с инстанцией журнала
|
||||||
*/
|
*/
|
||||||
public static function init(_connection $session, string $document, bool $create = true): ?static
|
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($journal = static::search($session, $document))) {
|
||||||
// Не найден журнал (подразумевается, что его не существует или истёк срок использования)
|
// Не найден журнал (подразумевается, что его не существует)
|
||||||
|
|
||||||
// Создание журнала
|
if (empty($journal = document::write($session, static::COLLECTION_JOURNAL, [
|
||||||
if (empty(document::write($session, static::COLLECTION_JOURNAL, [
|
|
||||||
'events' => [],
|
'events' => [],
|
||||||
'expires' => strtotime('first day of next month 00:00')
|
'expires' => strtotime('first day of next month 00:00')
|
||||||
])) || empty($journal = static::search($session, $document))) return null;
|
]))) {
|
||||||
|
// Не удалось создать документ
|
||||||
|
|
||||||
// Cоздание ребра: {$document} -> ЖУРНАЛ
|
return null;
|
||||||
if (empty(document::write($session, longpoll::COLLECTION_ACCESSED, ['_from' => $document, '_to' => $journal->getId()]))) 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 _connection $session Сессия соединения с базой данных
|
||||||
* @param string $document Идентификатор документа для которого нужен журнал
|
* @param string $document Идентификатор документа
|
||||||
*
|
*
|
||||||
* @return _document|null Инстанция (static::COLLECTION_JOURNAL) или его идентификатор
|
* @return _document|null Инстанция (static::COLLECTION_JOURNAL) или его идентификатор
|
||||||
*/
|
*/
|
||||||
|
@ -111,7 +117,7 @@ class journal
|
||||||
FOR a IN $collection
|
FOR a IN $collection
|
||||||
LET b = (
|
LET b = (
|
||||||
FOR vertex, edge IN INBOUND a $edge
|
FOR vertex, edge IN INBOUND a $edge
|
||||||
FILTER vertex._id == "$document"
|
FILTER vertex._id == $document
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN vertex
|
RETURN vertex
|
||||||
)
|
)
|
||||||
|
|
|
@ -25,7 +25,7 @@ use ArangoDBClient\Document as _document,
|
||||||
class account
|
class account
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Инициализация
|
* Инициализировать
|
||||||
*
|
*
|
||||||
* @param _connection $session Сессия соединения с базой данных
|
* @param _connection $session Сессия соединения с базой данных
|
||||||
* @param int $id Идентификатор ВКонтакте
|
* @param int $id Идентификатор ВКонтакте
|
||||||
|
@ -43,7 +43,7 @@ class account
|
||||||
collection::init($session, longpoll::COLLECTION_ACCOUNTS);
|
collection::init($session, longpoll::COLLECTION_ACCOUNTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Поиск аккаунта
|
// Поиск
|
||||||
if ($account = static::search($session, $id));
|
if ($account = static::search($session, $id));
|
||||||
else if ($account = document::write($session, longpoll::COLLECTION_ACCOUNTS, ['id' => $id]) and $journal)
|
else if ($account = document::write($session, longpoll::COLLECTION_ACCOUNTS, ['id' => $id]) and $journal)
|
||||||
journal::init($session, $account)->write('create', [
|
journal::init($session, $account)->write('create', [
|
||||||
|
@ -62,13 +62,12 @@ class account
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Поиск
|
||||||
// Поиск аккаунта
|
|
||||||
return static::search($session, $id);
|
return static::search($session, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Найти аккаунт
|
* Найти
|
||||||
*
|
*
|
||||||
* @param _connection $session Сессия соединения с базой данных
|
* @param _connection $session Сессия соединения с базой данных
|
||||||
* @param int $id Идентификатор ВКонтакте
|
* @param int $id Идентификатор ВКонтакте
|
||||||
|
|
|
@ -36,57 +36,55 @@ class chat
|
||||||
*/
|
*/
|
||||||
public static function init(_connection $session, int $id, bool $journal = true, bool $create = true): ?_document
|
public static function init(_connection $session, int $id, bool $journal = true, bool $create = true): ?_document
|
||||||
{
|
{
|
||||||
// Инициализация коллекции
|
|
||||||
$collection = longpoll::COLLECTION_CHATS;
|
|
||||||
|
|
||||||
if ($create) {
|
if ($create) {
|
||||||
// Запрошено создание коллекций в случае их отсутствия
|
// Запрошено создание коллекций в случае их отсутствия
|
||||||
|
|
||||||
// Создание коллекции
|
// Создание коллекции
|
||||||
collection::init($session, $collection);
|
collection::init($session, longpoll::COLLECTION_CHATS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($account = collection::search($session, <<<AQL
|
// Поиск
|
||||||
FOR x IN $collection
|
if ($chat = static::search($session, $id));
|
||||||
FILTER x.id == "$id"
|
else if ($chat = document::write($session, longpoll::COLLECTION_CHATS, ['id' => $id]) and $journal)
|
||||||
LIMIT 1
|
journal::init($session, $chat)->write('create', [
|
||||||
RETURN x
|
|
||||||
AQL)) {
|
|
||||||
// Найден аккаунт
|
|
||||||
|
|
||||||
return $account;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account = document::write($session, $collection, ['id' => $id])) {
|
|
||||||
// Аккаунт записан
|
|
||||||
|
|
||||||
// Журналирование
|
|
||||||
if ($journal && journal::init($session, $account)->write('create', [
|
|
||||||
'changes' => [
|
'changes' => [
|
||||||
'new' => collection::search($session, <<<AQL
|
'new' => collection::search($session, sprintf(
|
||||||
FOR x IN $collection
|
<<<'AQL'
|
||||||
FILTER x._id == "$account"
|
FOR x IN %s
|
||||||
|
FILTER x._id == "%s"
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN x
|
RETURN x
|
||||||
AQL),
|
AQL,
|
||||||
|
longpoll::COLLECTION_CHATS,
|
||||||
|
$chat
|
||||||
|
)),
|
||||||
'old' => null
|
'old' => null
|
||||||
]
|
]
|
||||||
])) {
|
]);
|
||||||
// Записаны данные в журнал
|
|
||||||
|
// Поиск
|
||||||
|
return static::search($session, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($account = collection::search($session, <<<AQL
|
/**
|
||||||
FOR x IN $collection
|
* Найти в базе данных
|
||||||
FILTER x.id == "$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
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN x
|
RETURN x
|
||||||
AQL)) {
|
AQL,
|
||||||
// Найден аккаунт
|
longpoll::COLLECTION_CHATS,
|
||||||
|
$id
|
||||||
return $account;
|
));
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ class group
|
||||||
collection::init($session, longpoll::COLLECTION_GROUPS);
|
collection::init($session, longpoll::COLLECTION_GROUPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Поиск группы
|
// Поиск
|
||||||
if ($group = static::search($session, $id));
|
if ($group = static::search($session, $id));
|
||||||
else if ($group = document::write($session, longpoll::COLLECTION_GROUPS, ['id' => $id]) and $journal)
|
else if ($group = document::write($session, longpoll::COLLECTION_GROUPS, ['id' => $id]) and $journal)
|
||||||
journal::init($session, $group)->write('create', [
|
journal::init($session, $group)->write('create', [
|
||||||
|
@ -53,12 +53,12 @@ class group
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
// Поиск группы
|
// Поиск
|
||||||
return static::search($session, $id);
|
return static::search($session, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Найти группу
|
* Найти в базе данных
|
||||||
*
|
*
|
||||||
* @param _connection $session Сессия соединения с базой данных
|
* @param _connection $session Сессия соединения с базой данных
|
||||||
* @param int $id Идентификатор ВКонтакте
|
* @param int $id Идентификатор ВКонтакте
|
||||||
|
@ -70,7 +70,7 @@ class group
|
||||||
return collection::search($session, sprintf(
|
return collection::search($session, sprintf(
|
||||||
<<<'AQL'
|
<<<'AQL'
|
||||||
FOR x IN %s
|
FOR x IN %s
|
||||||
FILTER x.id == %u
|
FILTER x.id == %d
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN x
|
RETURN x
|
||||||
AQL,
|
AQL,
|
||||||
|
|
Loading…
Reference in New Issue