mirror of
https://github.com/nextcloud/spreed.git
synced 2025-12-18 05:20:50 +01:00
Move deleteRoom() to RoomService
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
ac1cd08412
commit
2200896573
10 changed files with 62 additions and 53 deletions
|
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||
namespace OCA\Talk\BackgroundJob;
|
||||
|
||||
use OCA\Talk\Service\ParticipantService;
|
||||
use OCA\Talk\Service\RoomService;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
use OCA\Talk\Manager;
|
||||
|
|
@ -39,17 +40,16 @@ use Psr\Log\LoggerInterface;
|
|||
*/
|
||||
class RemoveEmptyRooms extends TimedJob {
|
||||
protected Manager $manager;
|
||||
|
||||
protected RoomService $roomService;
|
||||
protected ParticipantService $participantService;
|
||||
|
||||
protected LoggerInterface $logger;
|
||||
|
||||
protected IUserMountCache $userMountCache;
|
||||
|
||||
protected int $numDeletedRooms = 0;
|
||||
|
||||
public function __construct(ITimeFactory $timeFactory,
|
||||
Manager $manager,
|
||||
RoomService $roomService,
|
||||
ParticipantService $participantService,
|
||||
LoggerInterface $logger,
|
||||
IUserMountCache $userMountCache) {
|
||||
|
|
@ -60,6 +60,7 @@ class RemoveEmptyRooms extends TimedJob {
|
|||
$this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
|
||||
|
||||
$this->manager = $manager;
|
||||
$this->roomService = $roomService;
|
||||
$this->participantService = $participantService;
|
||||
$this->logger = $logger;
|
||||
$this->userMountCache = $userMountCache;
|
||||
|
|
@ -115,7 +116,7 @@ class RemoveEmptyRooms extends TimedJob {
|
|||
}
|
||||
|
||||
private function doDeleteRoom(Room $room): void {
|
||||
$room->deleteRoom();
|
||||
$this->roomService->deleteRoom($room);
|
||||
$this->numDeletedRooms++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ class Create extends Base {
|
|||
$this->setMessageExpiration($room, (int) $messageExpiration);
|
||||
}
|
||||
} catch (InvalidArgumentException $e) {
|
||||
$room->deleteRoom();
|
||||
$this->roomService->deleteRoom($room);
|
||||
|
||||
$output->writeln(sprintf('<error>%s</error>', $e->getMessage()));
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ class Delete extends Base {
|
|||
return 1;
|
||||
}
|
||||
|
||||
$room->deleteRoom();
|
||||
$this->roomService->deleteRoom($room);
|
||||
|
||||
$output->writeln('<info>Room successfully deleted.</info>');
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -909,7 +909,7 @@ class RoomController extends AEnvironmentAwareController {
|
|||
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
$this->room->deleteRoom();
|
||||
$this->roomService->deleteRoom($this->room);
|
||||
|
||||
return new DataResponse([]);
|
||||
}
|
||||
|
|
@ -1201,7 +1201,7 @@ class RoomController extends AEnvironmentAwareController {
|
|||
Participant::MODERATOR,
|
||||
Participant::OWNER,
|
||||
], true)) {
|
||||
$room->deleteRoom();
|
||||
$this->roomService->deleteRoom($room);
|
||||
return new DataResponse();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,22 +55,22 @@ use OCP\Server;
|
|||
class Manager {
|
||||
public const EVENT_TOKEN_GENERATE = self::class . '::generateNewToken';
|
||||
|
||||
private IDBConnection $db;
|
||||
private IConfig $config;
|
||||
private Config $talkConfig;
|
||||
private IAppManager $appManager;
|
||||
private AttendeeMapper $attendeeMapper;
|
||||
private SessionMapper $sessionMapper;
|
||||
private ParticipantService $participantService;
|
||||
private ISecureRandom $secureRandom;
|
||||
private IUserManager $userManager;
|
||||
private IGroupManager $groupManager;
|
||||
private ICommentsManager $commentsManager;
|
||||
private TalkSession $talkSession;
|
||||
private IEventDispatcher $dispatcher;
|
||||
protected IDBConnection $db;
|
||||
protected IConfig $config;
|
||||
protected Config $talkConfig;
|
||||
protected IAppManager $appManager;
|
||||
protected AttendeeMapper $attendeeMapper;
|
||||
protected SessionMapper $sessionMapper;
|
||||
protected ParticipantService $participantService;
|
||||
protected ISecureRandom $secureRandom;
|
||||
protected IUserManager $userManager;
|
||||
protected IGroupManager $groupManager;
|
||||
protected ICommentsManager $commentsManager;
|
||||
protected TalkSession $talkSession;
|
||||
protected IEventDispatcher $dispatcher;
|
||||
protected ITimeFactory $timeFactory;
|
||||
private IHasher $hasher;
|
||||
private IL10N $l;
|
||||
protected IHasher $hasher;
|
||||
protected IL10N $l;
|
||||
|
||||
public function __construct(IDBConnection $db,
|
||||
IConfig $config,
|
||||
|
|
@ -383,7 +383,7 @@ class Manager {
|
|||
$rooms = $this->getRoomsForUser($user->getUID());
|
||||
foreach ($rooms as $room) {
|
||||
if ($this->participantService->getNumberOfUsers($room) === 1) {
|
||||
$room->deleteRoom();
|
||||
Server::get(RoomService::class)->deleteRoom($room);
|
||||
} else {
|
||||
$this->participantService->removeUser($room, $user, Room::PARTICIPANT_REMOVED);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ use OCA\Talk\Exceptions\RoomNotFoundException;
|
|||
use OCA\Talk\Participant;
|
||||
use OCA\Talk\Room;
|
||||
use OCA\Talk\Service\ParticipantService;
|
||||
use OCA\Talk\Service\RoomService;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Server;
|
||||
|
||||
|
|
@ -171,6 +172,8 @@ class Listener {
|
|||
return;
|
||||
}
|
||||
|
||||
$room->deleteRoom();
|
||||
$roomService = Server::get(RoomService::class);
|
||||
|
||||
$roomService->deleteRoom($room);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
26
lib/Room.php
26
lib/Room.php
|
|
@ -28,7 +28,6 @@ declare(strict_types=1);
|
|||
namespace OCA\Talk;
|
||||
|
||||
use OCA\Talk\Events\ModifyRoomEvent;
|
||||
use OCA\Talk\Events\RoomEvent;
|
||||
use OCA\Talk\Events\SignalingRoomPropertiesEvent;
|
||||
use OCA\Talk\Exceptions\ParticipantNotFoundException;
|
||||
use OCA\Talk\Model\Attendee;
|
||||
|
|
@ -41,7 +40,6 @@ use OCP\Comments\IComment;
|
|||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Log\Audit\CriticalActionPerformedEvent;
|
||||
use OCP\Security\IHasher;
|
||||
use OCP\Server;
|
||||
|
||||
|
|
@ -684,30 +682,6 @@ class Room {
|
|||
return $this->manager->createParticipantObject($this, $row);
|
||||
}
|
||||
|
||||
public function deleteRoom(): void {
|
||||
$event = new RoomEvent($this);
|
||||
$this->dispatcher->dispatch(self::EVENT_BEFORE_ROOM_DELETE, $event);
|
||||
$delete = $this->db->getQueryBuilder();
|
||||
|
||||
// Delete attendees
|
||||
$delete->delete('talk_attendees')
|
||||
->where($delete->expr()->eq('room_id', $delete->createNamedParameter($this->getId(), IQueryBuilder::PARAM_INT)));
|
||||
$delete->executeStatement();
|
||||
|
||||
// Delete room
|
||||
$delete->delete('talk_rooms')
|
||||
->where($delete->expr()->eq('id', $delete->createNamedParameter($this->getId(), IQueryBuilder::PARAM_INT)));
|
||||
$delete->executeStatement();
|
||||
|
||||
$this->dispatcher->dispatch(self::EVENT_AFTER_ROOM_DELETE, $event);
|
||||
if (class_exists(CriticalActionPerformedEvent::class)) {
|
||||
$this->dispatcher->dispatchTyped(new CriticalActionPerformedEvent(
|
||||
'Conversation "%s" deleted',
|
||||
['name' => $this->getName()],
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $newName Currently it is only allowed to rename: self::TYPE_GROUP, self::TYPE_PUBLIC
|
||||
* @param string|null $oldName
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ use InvalidArgumentException;
|
|||
use OCA\Talk\Chat\ChatManager;
|
||||
use OCA\Talk\Events\ModifyLobbyEvent;
|
||||
use OCA\Talk\Events\ModifyRoomEvent;
|
||||
use OCA\Talk\Events\RoomEvent;
|
||||
use OCA\Talk\Events\VerifyRoomPasswordEvent;
|
||||
use OCA\Talk\Exceptions\RoomNotFoundException;
|
||||
use OCA\Talk\Manager;
|
||||
|
|
@ -41,6 +42,7 @@ use OCP\EventDispatcher\IEventDispatcher;
|
|||
use OCP\HintException;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\Log\Audit\CriticalActionPerformedEvent;
|
||||
use OCP\Security\Events\ValidatePasswordPolicyEvent;
|
||||
use OCP\Security\IHasher;
|
||||
use OCP\Share\IManager as IShareManager;
|
||||
|
|
@ -566,4 +568,28 @@ class RoomService {
|
|||
|
||||
return (bool) $update->executeStatement();
|
||||
}
|
||||
|
||||
public function deleteRoom(Room $room): void {
|
||||
$event = new RoomEvent($room);
|
||||
$this->dispatcher->dispatch(Room::EVENT_BEFORE_ROOM_DELETE, $event);
|
||||
$delete = $this->db->getQueryBuilder();
|
||||
|
||||
// Delete attendees
|
||||
$delete->delete('talk_attendees')
|
||||
->where($delete->expr()->eq('room_id', $delete->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT)));
|
||||
$delete->executeStatement();
|
||||
|
||||
// Delete room
|
||||
$delete->delete('talk_rooms')
|
||||
->where($delete->expr()->eq('id', $delete->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT)));
|
||||
$delete->executeStatement();
|
||||
|
||||
$this->dispatcher->dispatch(Room::EVENT_AFTER_ROOM_DELETE, $event);
|
||||
if (class_exists(CriticalActionPerformedEvent::class)) {
|
||||
$this->dispatcher->dispatchTyped(new CriticalActionPerformedEvent(
|
||||
'Conversation "%s" deleted',
|
||||
['name' => $room->getName()],
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ use OCA\Talk\BackgroundJob\RemoveEmptyRooms;
|
|||
use OCA\Talk\Manager;
|
||||
use OCA\Talk\Room;
|
||||
use OCA\Talk\Service\ParticipantService;
|
||||
use OCA\Talk\Service\RoomService;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\Files\Config\IUserMountCache;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
|
@ -39,6 +40,8 @@ class RemoveEmptyRoomsTest extends TestCase {
|
|||
protected $timeFactory;
|
||||
/** @var Manager|MockObject */
|
||||
protected $manager;
|
||||
/** @var RoomService|MockObject */
|
||||
protected $roomService;
|
||||
/** @var ParticipantService|MockObject */
|
||||
protected $participantService;
|
||||
/** @var LoggerInterface|MockObject */
|
||||
|
|
@ -51,6 +54,7 @@ class RemoveEmptyRoomsTest extends TestCase {
|
|||
|
||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||
$this->manager = $this->createMock(Manager::class);
|
||||
$this->roomService = $this->createMock(RoomService::class);
|
||||
$this->participantService = $this->createMock(ParticipantService::class);
|
||||
$this->loggerInterface = $this->createMock(LoggerInterface::class);
|
||||
$this->userMountCache = $this->createMock(IUserMountCache::class);
|
||||
|
|
@ -60,6 +64,7 @@ class RemoveEmptyRoomsTest extends TestCase {
|
|||
return new RemoveEmptyRooms(
|
||||
$this->timeFactory,
|
||||
$this->manager,
|
||||
$this->roomService,
|
||||
$this->participantService,
|
||||
$this->loggerInterface,
|
||||
$this->userMountCache
|
||||
|
|
|
|||
|
|
@ -669,13 +669,13 @@ class BackendNotifierTest extends TestCase {
|
|||
]);
|
||||
}
|
||||
|
||||
public function testRoomDelete() {
|
||||
public function testRoomDelete(): void {
|
||||
$room = $this->manager->createRoom(Room::TYPE_PUBLIC);
|
||||
$this->participantService->addUsers($room, [[
|
||||
'actorType' => 'users',
|
||||
'actorId' => $this->userId,
|
||||
]]);
|
||||
$room->deleteRoom();
|
||||
$this->roomService->deleteRoom($room);
|
||||
|
||||
$this->assertMessageWasSent($room, [
|
||||
'type' => 'delete',
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue