Replace all 'fsuggest' usages with the new paradigm

This commit is contained in:
Philipp 2021-10-21 23:13:19 +02:00 committed by Hypolite Petovan
parent 82a6c78033
commit b407fbedc1
6 changed files with 106 additions and 11 deletions

View File

@ -0,0 +1,9 @@
<?php
namespace Friendica\Contact\FriendSuggest\Collection;
use Friendica\BaseCollection;
class FriendSuggests extends BaseCollection
{
}

View File

@ -2,10 +2,13 @@
namespace Friendica\Contact\FriendSuggest\Depository; namespace Friendica\Contact\FriendSuggest\Depository;
use Friendica\BaseCollection;
use Friendica\BaseDepository; use Friendica\BaseDepository;
use Friendica\Contact\FriendSuggest\Collection;
use Friendica\Contact\FriendSuggest\Entity;
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestPersistenceException; use Friendica\Contact\FriendSuggest\Exception\FriendSuggestPersistenceException;
use Friendica\Contact\FriendSuggest\Factory; use Friendica\Contact\FriendSuggest\Factory;
use Friendica\Contact\FriendSuggest\Entity;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -48,11 +51,58 @@ class FriendSuggest extends BaseDepository
return parent::_selectOne($condition, $params); return parent::_selectOne($condition, $params);
} }
public function selectOneById(int $id): Entity\FriendSuggest /**
* @param array $condition
* @param array $params
*
* @return Collection\FriendSuggests
*
* @throws \Exception
*/
private function select(array $condition, array $params = []): Collection\FriendSuggests
{ {
return $this->selectOne(['id' => $id]); return parent::_select($condition, $params);
} }
/**
* @param int $id
*
* @return Entity\FriendSuggest
*
* @throws FriendSuggestNotFoundException in case there's no suggestion for this id
*/
public function selectOneById(int $id): Entity\FriendSuggest
{
try {
return $this->selectOne(['id' => $id]);
} catch (NotFoundException $e) {
throw new FriendSuggestNotFoundException(sprintf('No FriendSuggest found for id %d', $id));
}
}
/**
* @param int $cid
*
* @return Collection\FriendSuggests
*
* @throws FriendSuggestPersistenceException In case the underlying storage cannot select the suggestion
*/
public function selectForContact(int $cid): Collection\FriendSuggests
{
try {
return $this->select(['cid' => $cid]);
} catch (\Exception $e) {
throw new FriendSuggestPersistenceException(sprintf('Cannot select FriendSuggestion for contact %d', $cid));
}
}
/**
* @param Entity\FriendSuggest $fsuggest
*
* @return Entity\FriendSuggest
*
* @throws FriendSuggestNotFoundException in case the underlying storage cannot save the suggestion
*/
public function save(Entity\FriendSuggest $fsuggest): Entity\FriendSuggest public function save(Entity\FriendSuggest $fsuggest): Entity\FriendSuggest
{ {
try { try {
@ -66,7 +116,24 @@ class FriendSuggest extends BaseDepository
return $this->selectOneById($this->db->lastInsertId()); return $this->selectOneById($this->db->lastInsertId());
} }
} catch (\Exception $exception) { } catch (\Exception $exception) {
throw new FriendSuggestPersistenceException(sprintf('Cannot insert/update the FriendSuggestion %d for user %d', $fsuggest->id, $fsuggest->uid), $exception); throw new FriendSuggestNotFoundException(sprintf('Cannot insert/update the FriendSuggestion %d for user %d', $fsuggest->id, $fsuggest->uid), $exception);
}
}
/**
* @param Collection\FriendSuggest $fsuggests
*
* @return bool
*
* @throws FriendSuggestNotFoundException in case the underlying storage cannot delete the suggestion
*/
public function delete(Collection\FriendSuggests $fsuggests): bool
{
try {
$ids = $fsuggests->column('id');
return $this->db->delete(self::$table_name, ['id' => $ids]);
} catch (\Exception $exception) {
throw new FriendSuggestNotFoundException('Cannot delete the FriendSuggestions', $exception);
} }
} }
} }

View File

@ -0,0 +1,11 @@
<?php
namespace Friendica\Contact\FriendSuggest\Exception;
class FriendSuggestNotFoundException extends \OutOfBoundsException
{
public function __construct($message = "", \Throwable $previous = null)
{
parent::__construct($message, 404, $previous);
}
}

View File

@ -34,8 +34,7 @@ class FriendSuggest extends BaseFactory implements ICanCreateFromTableRow
string $request = '', string $request = '',
string $photo = '', string $photo = '',
string $note = '' string $note = ''
): Entity\FriendSuggest ): Entity\FriendSuggest {
{
return $this->createFromTableRow([ return $this->createFromTableRow([
'uid' => $uid, 'uid' => $uid,
'cid' => $cid, 'cid' => $cid,
@ -46,4 +45,9 @@ class FriendSuggest extends BaseFactory implements ICanCreateFromTableRow
'note' => $note, 'note' => $note,
]); ]);
} }
public function createEmpty(int $id): Entity\FriendSuggest
{
return $this->createFromTableRow(['id' => $id]);
}
} }

View File

@ -80,7 +80,7 @@ class RemoveContent
DBA::delete('contact-relation', ['relation-cid' => $id]); DBA::delete('contact-relation', ['relation-cid' => $id]);
DBA::delete('contact-relation', ['cid' => $id]); DBA::delete('contact-relation', ['cid' => $id]);
DBA::delete('event', ['cid' => $id]); DBA::delete('event', ['cid' => $id]);
DBA::delete('fsuggest', ['cid' => $id]); DI::fsuggest()->delete(DI::fsuggest()->selectForContact($id));
DBA::delete('post-tag', ['cid' => $id]); DBA::delete('post-tag', ['cid' => $id]);
DBA::delete('user-contact', ['cid' => $id]); DBA::delete('user-contact', ['cid' => $id]);

View File

@ -21,6 +21,8 @@
namespace Friendica\Worker; namespace Friendica\Worker;
use Friendica\Contact\FriendSuggest\Collection\FriendSuggests;
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Database\DBA; use Friendica\Database\DBA;
@ -64,11 +66,13 @@ class Delivery
} }
$uid = $target_item['uid']; $uid = $target_item['uid'];
} elseif ($cmd == self::SUGGESTION) { } elseif ($cmd == self::SUGGESTION) {
$target_item = DBA::selectFirst('fsuggest', [], ['id' => $post_uriid]); try {
if (!DBA::isResult($target_item)) { $target_item = DI::fsuggest()->selectOneById($post_uriid);
} catch (FriendSuggestNotFoundException $e) {
DI::logger()->info('Cannot find FriendSuggestion', ['id' => $post_uriid]);
return; return;
} }
$uid = $target_item['uid']; $uid = $target_item->uid;
} elseif ($cmd == self::RELOCATION) { } elseif ($cmd == self::RELOCATION) {
$uid = $post_uriid; $uid = $post_uriid;
$target_item = []; $target_item = [];
@ -284,7 +288,7 @@ class Delivery
} elseif ($cmd == self::SUGGESTION) { } elseif ($cmd == self::SUGGESTION) {
$item = $target_item; $item = $target_item;
$atom = DFRN::fsuggest($item, $owner); $atom = DFRN::fsuggest($item, $owner);
DBA::delete('fsuggest', ['id' => $item['id']]); DI::fsuggest()->delete(new FriendSuggests([DI::fsuggest()->selectOneById($item['id'])]));
} elseif ($cmd == self::RELOCATION) { } elseif ($cmd == self::RELOCATION) {
$atom = DFRN::relocate($owner, $owner['uid']); $atom = DFRN::relocate($owner, $owner['uid']);
} elseif ($followup) { } elseif ($followup) {