add entity, mapper and service for subscriptions_webpush
This commit is contained in:
parent
b36b13703b
commit
f994a182d3
5 changed files with 142 additions and 2 deletions
|
@ -10,7 +10,6 @@ class Subscription extends Entity implements JsonSerializable {
|
||||||
protected $userId;
|
protected $userId;
|
||||||
protected $collectionName;
|
protected $collectionName;
|
||||||
protected $transport;
|
protected $transport;
|
||||||
protected $data;
|
|
||||||
protected $creationTimestamp;
|
protected $creationTimestamp;
|
||||||
protected $expirationTimestamp;
|
protected $expirationTimestamp;
|
||||||
|
|
||||||
|
@ -25,7 +24,6 @@ class Subscription extends Entity implements JsonSerializable {
|
||||||
'userId' => $this->userId,
|
'userId' => $this->userId,
|
||||||
'collectionName' => $this->collectionName,
|
'collectionName' => $this->collectionName,
|
||||||
'transport' => $this->transport,
|
'transport' => $this->transport,
|
||||||
'data' => $this->data,
|
|
||||||
'creationTimestamp' => $this->creationTimestamp,
|
'creationTimestamp' => $this->creationTimestamp,
|
||||||
'expirationTimestamp' => $this->expirationTimestamp
|
'expirationTimestamp' => $this->expirationTimestamp
|
||||||
];
|
];
|
||||||
|
|
23
lib/Db/WebPushSubscription.php
Normal file
23
lib/Db/WebPushSubscription.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DavPush\Db;
|
||||||
|
|
||||||
|
use JsonSerializable;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
|
||||||
|
class WebPushSubscription extends Entity implements JsonSerializable {
|
||||||
|
protected $subscriptionId;
|
||||||
|
protected $pushResource;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
$this->addType('subscriptionId','integer');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jsonSerialize(): array {
|
||||||
|
return [
|
||||||
|
'subscriptionId' => $this->subscriptionId,
|
||||||
|
'pushResource' => $this->pushResource,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
49
lib/Db/WebPushSubscriptionMapper.php
Normal file
49
lib/Db/WebPushSubscriptionMapper.php
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DavPush\Db;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
use OCP\AppFramework\Db\QBMapper;
|
||||||
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
|
||||||
|
class WebPushSubscriptionMapper extends QBMapper {
|
||||||
|
public const TABLENAME = 'dav_push_subscriptions_webpush';
|
||||||
|
|
||||||
|
public function __construct(IDBConnection $db) {
|
||||||
|
parent::__construct($db, self::TABLENAME, WebPushSubscription::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $subscriptionId
|
||||||
|
* @return Entity|WebPushSubscription
|
||||||
|
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function findBySubscriptionId(int $subscriptionId): Subscription {
|
||||||
|
/* @var $qb IQueryBuilder */
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from(self::TABLENAME)
|
||||||
|
->where($qb->expr()->eq('subscription_id', $qb->createNamedParameter($subscriptionId, IQueryBuilder::PARAM_INT)));
|
||||||
|
|
||||||
|
return $this->findEntity($qb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $pushResource
|
||||||
|
* @return Entity|WebPushSubscription
|
||||||
|
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||||
|
* @throws DoesNotExistException
|
||||||
|
*/
|
||||||
|
public function findByPushResource(string $pushResource): Subscription {
|
||||||
|
/* @var $qb IQueryBuilder */
|
||||||
|
$qb = $this->db->getQueryBuilder();
|
||||||
|
$qb->select('*')
|
||||||
|
->from(self::TABLENAME)
|
||||||
|
->where($qb->expr()->eq('push_resource', $qb->createNamedParameter($pushResource)));
|
||||||
|
|
||||||
|
return $this->findEntity($qb);
|
||||||
|
}
|
||||||
|
}
|
6
lib/Errors/WebPushSubscriptionNotFound.php
Normal file
6
lib/Errors/WebPushSubscriptionNotFound.php
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DavPush\Errors;
|
||||||
|
|
||||||
|
class WebPushSubscriptionNotFound extends NotFoundException {
|
||||||
|
}
|
64
lib/Service/WebPushSubscriptionService.php
Normal file
64
lib/Service/WebPushSubscriptionService.php
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DavPush\Service;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
|
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||||
|
|
||||||
|
use OCA\DavPush\Errors\WebPushSubscriptionNotFound;
|
||||||
|
|
||||||
|
use OCA\DavPush\Db\WebPushSubscription;
|
||||||
|
use OCA\DavPush\Db\WebPushSubscriptionMapper;
|
||||||
|
|
||||||
|
class WebPushSubscriptionService {
|
||||||
|
public function __construct(
|
||||||
|
private WebPushSubscriptionMapper $mapper
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleException(Exception $e): void {
|
||||||
|
if ($e instanceof DoesNotExistException ||
|
||||||
|
$e instanceof MultipleObjectsReturnedException) {
|
||||||
|
throw new WebPushSubscriptionNotFound($e->getMessage());
|
||||||
|
} else {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findBySubscriptionId(int $subscriptionId): ?WebPushSubscription {
|
||||||
|
try {
|
||||||
|
return $this->mapper->findBySubscriptionId($subscriptionId);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->handleException($e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findByPushResource(string $pushResource): ?WebPushSubscription {
|
||||||
|
try {
|
||||||
|
return $this->mapper->findByPushResource($pushResource);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->handleException($e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(int $subscriptionId, string $pushResource): WebPushSubscription {
|
||||||
|
$webPushSubscription = new WebPushSubscription();
|
||||||
|
$webPushSubscription->setSubscriptionId($subscriptionId);
|
||||||
|
$webPushSubscription->setPushResource($pushResource);
|
||||||
|
$webPushSubscription = $this->mapper->insert($webPushSubscription);
|
||||||
|
|
||||||
|
return $webPushSubscription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteBySubscriptionId(int $subscriptionId): ?WebPushSubscription {
|
||||||
|
try {
|
||||||
|
$webPushSubscription = $this->mapper->findBySubscriptionId($subscriptionId);
|
||||||
|
$this->mapper->delete($webPushSubscription);
|
||||||
|
return $webPushSubscription;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->handleException($e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue