namespace Friendica\Contact\FriendSuggest\Depository;
+use Friendica\BaseCollection;
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\Factory;
-use Friendica\Contact\FriendSuggest\Entity;
use Friendica\Database\Database;
use Friendica\Network\HTTPException\NotFoundException;
use Psr\Log\LoggerInterface;
return parent::_selectOne($condition, $params);
}
+ /**
+ * @param array $condition
+ * @param array $params
+ *
+ * @return Collection\FriendSuggests
+ *
+ * @throws \Exception
+ */
+ private function select(array $condition, array $params = []): Collection\FriendSuggests
+ {
+ 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
{
- return $this->selectOne(['id' => $id]);
+ 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
{
try {
return $this->selectOneById($this->db->lastInsertId());
}
} 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);
}
}
}
namespace Friendica\Worker;
+use Friendica\Contact\FriendSuggest\Collection\FriendSuggests;
+use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Database\DBA;
}
$uid = $target_item['uid'];
} elseif ($cmd == self::SUGGESTION) {
- $target_item = DBA::selectFirst('fsuggest', [], ['id' => $post_uriid]);
- if (!DBA::isResult($target_item)) {
+ try {
+ $target_item = DI::fsuggest()->selectOneById($post_uriid);
+ } catch (FriendSuggestNotFoundException $e) {
+ DI::logger()->info('Cannot find FriendSuggestion', ['id' => $post_uriid]);
return;
}
- $uid = $target_item['uid'];
+ $uid = $target_item->uid;
} elseif ($cmd == self::RELOCATION) {
$uid = $post_uriid;
$target_item = [];
} elseif ($cmd == self::SUGGESTION) {
$item = $target_item;
$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) {
$atom = DFRN::relocate($owner, $owner['uid']);
} elseif ($followup) {