update data instead of delete+save

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/291/head
Maxence Lange 2018-12-31 10:03:50 -01:00
rodzic 0251b83d1a
commit 2f58b91408
4 zmienionych plików z 66 dodań i 5 usunięć

Wyświetl plik

@ -102,6 +102,45 @@ class CacheActorsRequest extends CacheActorsRequestBuilder {
}
/**
* insert cache about an Actor in database.
*
* @param Person $actor
*/
public function update(Person $actor) {
$qb = $this->getCacheActorsUpdateSql();
$qb->set('account', $qb->createNamedParameter($actor->getAccount()))
->set('following', $qb->createNamedParameter($actor->getFollowing()))
->set('followers', $qb->createNamedParameter($actor->getFollowers()))
->set('inbox', $qb->createNamedParameter($actor->getInbox()))
->set('shared_inbox', $qb->createNamedParameter($actor->getSharedInbox()))
->set('outbox', $qb->createNamedParameter($actor->getOutbox()))
->set('featured', $qb->createNamedParameter($actor->getFeatured()))
->set('url', $qb->createNamedParameter($actor->getUrl()))
->set('preferred_username', $qb->createNamedParameter($actor->getPreferredUsername()))
->set('name', $qb->createNamedParameter($actor->getName()))
->set('summary', $qb->createNamedParameter($actor->getSummary()))
->set('public_key', $qb->createNamedParameter($actor->getPublicKey()))
->set('source', $qb->createNamedParameter($actor->getSource()))
->set('details', $qb->createNamedParameter(json_encode($actor->getDetails())))
->set(
'creation',
$qb->createNamedParameter(new DateTime('now'), IQueryBuilder::PARAM_DATE)
);
if ($actor->gotIcon()) {
$iconId = $actor->getIcon()
->getId();
} else {
$iconId = $actor->getIconId();
}
$qb->set('icon_id', $qb->createNamedParameter($iconId));
$qb->execute();
}
/**
* get Cached version of an Actor, based on the UriId
*

Wyświetl plik

@ -110,7 +110,9 @@ class PersonInterface implements IActivityPubInterface {
*/
public function getItemById(string $id): ACore {
try {
return $this->cacheActorsRequest->getFromId($id);
$actor = $this->cacheActorsRequest->getFromId($id);
return $actor;
} catch (CacheActorDoesNotExistException $e) {
throw new ItemNotFoundException();
}
@ -122,7 +124,12 @@ class PersonInterface implements IActivityPubInterface {
*/
public function save(ACore $person) {
/** @var Person $person */
$this->actorService->save($person);
try {
$this->getItemById($person->getId());
$this->actorService->update($person);
} catch (ItemNotFoundException $e) {
$this->actorService->save($person);
}
}

Wyświetl plik

@ -124,6 +124,24 @@ class ActorService {
* @param Person $actor
*/
public function save(Person $actor) {
$this->cacheDocumentIfNeeded($actor);
$this->cacheActorsRequest->save($actor);
}
/**
* @param Person $actor
*/
public function update(Person $actor) {
$this->cacheDocumentIfNeeded($actor);
$this->cacheActorsRequest->update($actor);
}
/**
* @param Person $actor
*/
private function cacheDocumentIfNeeded(Person $actor) {
if ($actor->gotIcon()) {
try {
$icon = $this->cacheDocumentsRequest->getBySource(
@ -135,8 +153,6 @@ class ActorService {
$this->cacheDocumentsRequest->save($actor->getIcon());
}
}
$this->cacheActorsRequest->save($actor);
}
}

Wyświetl plik

@ -130,7 +130,6 @@ class CacheActorService {
try {
if ($refresh) {
$this->cacheActorsRequest->deleteFromId($id);
throw new CacheActorDoesNotExistException();
}