Add f7push v0.1: FCM device registry and push API for F7cloud.

Portable occ-based config, OCS endpoints for APK registration, notification relay, and server-side push dispatch.
This commit is contained in:
root
2026-05-24 10:26:36 +03:00
commit df4e2dddec
17 changed files with 1005 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace OCA\F7Push\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method string getUserId()
* @method void setUserId(string $userId)
* @method string getDeviceId()
* @method void setDeviceId(string $deviceId)
* @method string getFcmToken()
* @method void setFcmToken(string $fcmToken)
* @method string getPlatform()
* @method void setPlatform(string $platform)
* @method string getClientApp()
* @method void setClientApp(string $clientApp)
* @method int getCreatedAt()
* @method void setCreatedAt(int $createdAt)
* @method int getLastSeen()
* @method void setLastSeen(int $lastSeen)
*/
class Device extends Entity {
protected $userId = '';
protected $deviceId = '';
protected $fcmToken = '';
protected $platform = 'android';
protected $clientApp = 'f7cloud-apk';
protected $createdAt = 0;
protected $lastSeen = 0;
protected static $propertyTypes = [
'id' => 'integer',
'userId' => 'string',
'deviceId' => 'string',
'fcmToken' => 'string',
'platform' => 'string',
'clientApp' => 'string',
'createdAt' => 'integer',
'lastSeen' => 'integer',
];
}
+53
View File
@@ -0,0 +1,53 @@
<?php
declare(strict_types=1);
namespace OCA\F7Push\Db;
use OCP\AppFramework\Db\QBMapper;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
/** @extends QBMapper<Device> */
class DeviceMapper extends QBMapper {
public function __construct(IDBConnection $db) {
parent::__construct($db, 'f7push_devices', Device::class);
}
/**
* @return Device[]
*/
public function findByUser(string $userId): array {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
return $this->findEntities($qb);
}
public function findByUserAndDevice(string $userId, string $deviceId): Device {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)))
->andWhere($qb->expr()->eq('device_id', $qb->createNamedParameter($deviceId, IQueryBuilder::PARAM_STR)));
return $this->findEntity($qb);
}
public function deleteByUserAndDevice(string $userId, string $deviceId): void {
try {
$device = $this->findByUserAndDevice($userId, $deviceId);
$this->delete($device);
} catch (DoesNotExistException|MultipleObjectsReturnedException) {
}
}
public function deleteAllForUser(string $userId): void {
$qb = $this->db->getQueryBuilder();
$qb->delete($this->getTableName())
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
$qb->executeStatement();
}
}