summaryrefslogtreecommitdiffstats
path: root/lib/Db/NewsMapper.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Db/NewsMapper.php')
-rw-r--r--lib/Db/NewsMapper.php84
1 files changed, 70 insertions, 14 deletions
diff --git a/lib/Db/NewsMapper.php b/lib/Db/NewsMapper.php
index 4fa001f31..14913c1be 100644
--- a/lib/Db/NewsMapper.php
+++ b/lib/Db/NewsMapper.php
@@ -14,47 +14,101 @@
namespace OCA\News\Db;
use OCA\News\Utility\Time;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Db\MultipleObjectsReturnedException;
+use OCP\AppFramework\Db\QBMapper;
use OCP\IDBConnection;
use OCP\AppFramework\Db\Mapper;
use OCP\AppFramework\Db\Entity;
+/**
+ * Class NewsMapper
+ *
+ * @package OCA\News\Db
+ */
abstract class NewsMapper extends Mapper
{
+ const TABLE_NAME = '';
/**
* @var Time
*/
private $time;
+ /**
+ * NewsMapper constructor.
+ *
+ * @param IDBConnection $db Database connection
+ * @param Time $time Time class
+ * @param string $entity Entity class
+ */
public function __construct(
IDBConnection $db,
- $table,
- $entity,
- Time $time
+ Time $time,
+ string $entity
) {
- parent::__construct($db, $table, $entity);
+ parent::__construct($db, static::TABLE_NAME, $entity);
$this->time = $time;
}
- public function update(Entity $entity)
+ public function update(Entity $entity): Entity
{
$entity->setLastModified($this->time->getMicroTime());
return parent::update($entity);
}
- public function insert(Entity $entity)
+ public function insert(Entity $entity): Entity
{
$entity->setLastModified($this->time->getMicroTime());
return parent::insert($entity);
}
/**
- * @param int $id the id of the feed
- * @param string $userId the id of the user
+ * Remove deleted items.
+ *
+ * @return void
+ */
+ public function purgeDeleted(): void
+ {
+ $builder = $this->db->getQueryBuilder();
+ $builder->delete($this->tableName)
+ ->where('deleted_at != 0')
+ ->execute()
+ ->execute();
+ }
+
+ abstract public function find(string $userId, int $id);
+
+ /**
+ * Find all items.
*
- * @return \OCP\AppFramework\Db\Entity
+ * @return Entity[]
*/
- abstract public function find($id, $userId);
+ abstract public function findAll(): array;
+
+ /**
+ * Find all items for a user.
+ *
+ * @param string $userId ID of the user
+ *
+ * @return Entity[]
+ */
+ abstract public function findAllFromUser(string $userId): array;
+
+ /**
+ * Find item for a user.
+ *
+ * @param string $userId ID of the user
+ * @param int $id ID of the item
+ *
+ * @return Feed
+ *
+ * @throws DoesNotExistException The item is not found
+ * @throws MultipleObjectsReturnedException Multiple items found
+ */
+ abstract public function findFromUser(string $userId, int $id): Entity;
+
+
/**
* Performs a SELECT query with all arguments appened to the WHERE clause
@@ -64,12 +118,14 @@ abstract class NewsMapper extends Mapper
* Important: This method does not filter marked as deleted rows!
*
* @param array $search an assoc array from property to filter value
- * @param int $limit
+ * @param int|null $limit Output limit
+ * @param int|null $offset Output offset
+ *
+ * @depreacted Legacy function
*
- * @paran int $offset
* @return array
*/
- public function where(array $search = [], $limit = null, $offset = null)
+ public function where(array $search = [], ?int $limit = null, ?int $offset = null)
{
$entity = new $this->entityClass();
@@ -80,7 +136,7 @@ abstract class NewsMapper extends Mapper
// accidental Sql injection
if (!property_exists($entity, $property)) {
$msg = 'Property ' . $property . ' does not exist on '
- . $this->entityClass;
+ . $this->entityClass;
throw new \BadFunctionCallException($msg);
}