cloud_bbb/lib/Service/RoomShareService.php

101 lines
2.6 KiB
PHP
Raw Normal View History

<?php
namespace OCA\BigBlueButton\Service;
use Exception;
use OCA\BigBlueButton\Db\RoomShare;
use OCA\BigBlueButton\Db\RoomShareMapper;
2020-09-18 14:46:11 +02:00
use OCA\BigBlueButton\Event\RoomShareCreatedEvent;
2020-09-23 12:33:09 +02:00
2020-09-18 14:46:11 +02:00
use OCA\BigBlueButton\Event\RoomShareDeletedEvent;
2020-09-23 12:33:09 +02:00
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\EventDispatcher\IEventDispatcher;
class RoomShareService {
/** @var RoomShareMapper */
private $mapper;
2020-09-18 14:46:11 +02:00
/** @var IEventDispatcher */
private $eventDispatcher;
public function __construct(
RoomShareMapper $mapper,
IEventDispatcher $eventDispatcher) {
$this->mapper = $mapper;
2020-09-18 14:46:11 +02:00
$this->eventDispatcher = $eventDispatcher;
}
public function findAll(int $roomId): array {
return $this->mapper->findAll($roomId);
}
private function handleException(Exception $e): void {
if ($e instanceof DoesNotExistException ||
$e instanceof MultipleObjectsReturnedException) {
throw new RoomShareNotFound($e->getMessage());
} else {
throw $e;
}
}
public function find($id): RoomShare {
try {
return $this->mapper->find($id);
} catch (Exception $e) {
$this->handleException($e);
}
}
public function create(int $roomId, int $shareType, string $shareWith, int $permission): RoomShare {
try {
$roomShare = $this->mapper->findByRoomAndEntity($roomId, $shareWith, $shareType);
return $this->update($roomShare->getId(), $roomId, $shareType, $shareWith, $permission);
} catch (DoesNotExistException $e) {
$roomShare = new RoomShare();
$roomShare->setRoomId($roomId);
$roomShare->setShareType($shareType);
$roomShare->setShareWith($shareWith);
$roomShare->setPermission($permission);
2020-09-18 14:46:11 +02:00
$createdRoomShare = $this->mapper->insert($roomShare);
$this->eventDispatcher->dispatch(RoomShareCreatedEvent::class, new RoomShareCreatedEvent($createdRoomShare));
return $createdRoomShare;
}
}
public function update(int $id, int $roomId, int $shareType, string $shareWith, int $permission): RoomShare {
try {
$roomShare = $this->mapper->find($id);
$roomShare->setRoomId($roomId);
$roomShare->setShareType($shareType);
$roomShare->setShareWith($shareWith);
$roomShare->setPermission($permission);
return $this->mapper->update($roomShare);
} catch (Exception $e) {
$this->handleException($e);
}
}
public function delete(int $id): RoomShare {
try {
$roomShare = $this->mapper->find($id);
$this->mapper->delete($roomShare);
2020-09-18 14:46:11 +02:00
$this->eventDispatcher->dispatch(RoomShareDeletedEvent::class, new RoomShareDeletedEvent($roomShare));
return $roomShare;
} catch (Exception $e) {
$this->handleException($e);
}
}
}