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 _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,22 +66,16 @@ 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;
|
||||||
// Не удалось создать документ
|
|
||||||
|
|
||||||
return null;
|
// Cоздание ребра: {$document} -> ЖУРНАЛ
|
||||||
}
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация инстанции журнала и возврат
|
// Инициализация инстанции журнала и возврат
|
||||||
|
@ -94,7 +88,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) или его идентификатор
|
||||||
*/
|
*/
|
||||||
|
@ -117,7 +111,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,12 +62,13 @@ 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,55 +36,57 @@ 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, longpoll::COLLECTION_CHATS);
|
collection::init($session, $collection);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Поиск
|
if ($account = collection::search($session, <<<AQL
|
||||||
if ($chat = static::search($session, $id));
|
FOR x IN $collection
|
||||||
else if ($chat = document::write($session, longpoll::COLLECTION_CHATS, ['id' => $id]) and $journal)
|
FILTER x.id == "$id"
|
||||||
journal::init($session, $chat)->write('create', [
|
|
||||||
'changes' => [
|
|
||||||
'new' => collection::search($session, sprintf(
|
|
||||||
<<<'AQL'
|
|
||||||
FOR x IN %s
|
|
||||||
FILTER x._id == "%s"
|
|
||||||
LIMIT 1
|
|
||||||
RETURN x
|
|
||||||
AQL,
|
|
||||||
longpoll::COLLECTION_CHATS,
|
|
||||||
$chat
|
|
||||||
)),
|
|
||||||
'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
|
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN x
|
RETURN x
|
||||||
AQL,
|
AQL)) {
|
||||||
longpoll::COLLECTION_CHATS,
|
// Найден аккаунт
|
||||||
$id
|
|
||||||
));
|
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
|
||||||
|
]
|
||||||
|
])) {
|
||||||
|
// Записаны данные в журнал
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($account = collection::search($session, <<<AQL
|
||||||
|
FOR x IN $collection
|
||||||
|
FILTER x.id == "$id"
|
||||||
|
LIMIT 1
|
||||||
|
RETURN x
|
||||||
|
AQL)) {
|
||||||
|
// Найден аккаунт
|
||||||
|
|
||||||
|
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 == %d
|
FILTER x.id == %u
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
RETURN x
|
RETURN x
|
||||||
AQL,
|
AQL,
|
||||||
|
|
Loading…
Reference in New Issue