Move deleteRoom() to RoomService

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2022-10-02 11:46:31 +02:00
parent ac1cd08412
commit 2200896573
No known key found for this signature in database
GPG key ID: C400AAF20C1BB6FC
10 changed files with 62 additions and 53 deletions

View file

@ -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++;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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

View file

@ -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()],
));
}
}
}

View file

@ -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

View file

@ -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',