Skip to content

Commit 7988d5d

Browse files
provokateurinbackportbot[bot]
authored andcommitted
refactor(Sharing): Move transaction check from SharingManager to SharingBackend
refactor(Sharing): Move transaction check from SharingManager to SharingBackend Signed-off-by: provokateurin <kate@provokateurin.de> [skip ci]
1 parent 7ab103f commit 7988d5d

2 files changed

Lines changed: 52 additions & 46 deletions

File tree

lib/private/Sharing/SharingBackend.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public function __construct(
6565

6666
#[\Override]
6767
public function createShare(string $id, ShareUser $owner, \DateTimeImmutable $lastUpdated): void {
68+
$this->assertInTransaction();
69+
6870
$qb = $this->connection->getQueryBuilder();
6971
$qb
7072
->insert('sharing_share')
@@ -80,6 +82,8 @@ public function createShare(string $id, ShareUser $owner, \DateTimeImmutable $la
8082

8183
#[\Override]
8284
public function onOwnerDeleted(ShareUser $owner): array {
85+
$this->assertInTransaction();
86+
8387
$qb = $this->connection->getQueryBuilder();
8488
$qb
8589
->selectDistinct('id')
@@ -114,6 +118,8 @@ public function onOwnerDeleted(ShareUser $owner): array {
114118

115119
#[\Override]
116120
public function updateShareState(string $id, ShareState $state): void {
121+
$this->assertInTransaction();
122+
117123
$qb = $this->connection->getQueryBuilder();
118124
$rowCount = $qb
119125
->update('sharing_share')
@@ -127,6 +133,8 @@ public function updateShareState(string $id, ShareState $state): void {
127133

128134
#[\Override]
129135
public function updateShareUserStatus(string $id, string $userId, ShareUserStatus $userStatus): void {
136+
$this->assertInTransaction();
137+
130138
$qb = $this->connection->getQueryBuilder();
131139
$rowCount = $qb
132140
->update('sharing_share_user_status')
@@ -149,6 +157,8 @@ public function updateShareUserStatus(string $id, string $userId, ShareUserStatu
149157

150158
#[\Override]
151159
public function addShareSource(string $id, ShareSource $source): void {
160+
$this->assertInTransaction();
161+
152162
try {
153163
$qb = $this->connection->getQueryBuilder();
154164
$qb
@@ -173,6 +183,8 @@ public function addShareSource(string $id, ShareSource $source): void {
173183

174184
#[\Override]
175185
public function removeShareSource(string $id, ShareSource $source): void {
186+
$this->assertInTransaction();
187+
176188
$qb = $this->connection->getQueryBuilder();
177189
$rowCount = $qb
178190
->delete('sharing_share_sources')
@@ -187,6 +199,8 @@ public function removeShareSource(string $id, ShareSource $source): void {
187199

188200
#[\Override]
189201
public function onSourceDeleted(ShareSource $source): array {
202+
$this->assertInTransaction();
203+
190204
$qb = $this->connection->getQueryBuilder();
191205
$result = $qb
192206
->selectDistinct('share_id')
@@ -215,6 +229,8 @@ public function onSourceDeleted(ShareSource $source): array {
215229

216230
#[\Override]
217231
public function addShareRecipient(string $id, ShareRecipient $recipient): void {
232+
$this->assertInTransaction();
233+
218234
if ($recipient->secret === null) {
219235
throw new RuntimeException('The secret must not be null.');
220236
}
@@ -255,6 +271,8 @@ public function addShareRecipient(string $id, ShareRecipient $recipient): void {
255271

256272
#[\Override]
257273
public function removeShareRecipient(string $id, ShareRecipient $recipient): void {
274+
$this->assertInTransaction();
275+
258276
$qb = $this->connection->getQueryBuilder();
259277
$rowCount = $qb
260278
->delete('sharing_share_recipients')
@@ -276,6 +294,8 @@ public function removeShareRecipient(string $id, ShareRecipient $recipient): voi
276294

277295
#[\Override]
278296
public function onRecipientDeleted(ShareRecipient $recipient): array {
297+
$this->assertInTransaction();
298+
279299
$qb = $this->connection->getQueryBuilder();
280300
$result = $qb
281301
->selectDistinct('share_id')
@@ -318,6 +338,8 @@ public function onRecipientDeleted(ShareRecipient $recipient): array {
318338

319339
#[\Override]
320340
public function onInitiatorDeleted(ShareUser $initiator): array {
341+
$this->assertInTransaction();
342+
321343
$qb = $this->connection->getQueryBuilder();
322344
$qb
323345
->selectDistinct('share_id')
@@ -363,6 +385,8 @@ public function onInitiatorDeleted(ShareUser $initiator): array {
363385

364386
#[\Override]
365387
public function updateShareRecipientSecret(string $id, ShareRecipient $recipient, string $secret): void {
388+
$this->assertInTransaction();
389+
366390
$qb = $this->connection->getQueryBuilder();
367391
$rowCount = $qb
368392
->update('sharing_share_recipients')
@@ -385,6 +409,8 @@ public function updateShareRecipientSecret(string $id, ShareRecipient $recipient
385409

386410
#[\Override]
387411
public function updateShareProperty(string $id, ShareProperty $property): ?string {
412+
$this->assertInTransaction();
413+
388414
$value = $property->value;
389415

390416
$propertyType = $this->registry->getPropertyTypes()[$property->class];
@@ -436,6 +462,8 @@ public function updateShareProperty(string $id, ShareProperty $property): ?strin
436462

437463
#[\Override]
438464
public function updateSharePermission(string $id, SharePermission $permission): void {
465+
$this->assertInTransaction();
466+
439467
$qb = $this->connection->getQueryBuilder();
440468
$rowCount = $qb
441469
->update('sharing_share_permissions')
@@ -460,6 +488,8 @@ public function updateSharePermission(string $id, SharePermission $permission):
460488

461489
#[\Override]
462490
public function updateShareRecipientPermission(string $id, ShareRecipient $recipient, SharePermission $permission): void {
491+
$this->assertInTransaction();
492+
463493
$qb = $this->connection->getQueryBuilder();
464494
$result = $qb
465495
->select('id')
@@ -506,6 +536,8 @@ public function updateShareRecipientPermission(string $id, ShareRecipient $recip
506536

507537
#[\Override]
508538
public function selectSharePermissionPreset(string $id, string $permissionPresetClass): void {
539+
$this->assertInTransaction();
540+
509541
$qb = $this->connection->getQueryBuilder();
510542
$qb
511543
->update('sharing_share_permissions')
@@ -531,6 +563,8 @@ public function selectSharePermissionPreset(string $id, string $permissionPreset
531563

532564
#[\Override]
533565
public function deleteShare(string $id): void {
566+
$this->assertInTransaction();
567+
534568
$qb = $this->connection->getQueryBuilder();
535569
$rowCount = $qb
536570
->delete('sharing_share')
@@ -545,6 +579,8 @@ public function deleteShare(string $id): void {
545579

546580
#[\Override]
547581
public function getShare(ShareAccessContext $accessContext, string $id): Share {
582+
$this->assertInTransaction();
583+
548584
$shares = $this->list($accessContext, $id, null, null, null, null, null, null);
549585
if (count($shares) !== 1) {
550586
throw new ShareNotFoundException();
@@ -563,11 +599,15 @@ public function getShares(
563599
?string $lastShareID,
564600
?int $limit,
565601
): array {
602+
$this->assertInTransaction();
603+
566604
return $this->list($accessContext, null, $filterSourceTypeClass, $filterSourceTypeValue, $filterState, $filterUserStatus, $lastShareID, $limit);
567605
}
568606

569607
#[\Override]
570608
public function hasShare(string $id): bool {
609+
$this->assertInTransaction();
610+
571611
$qb = $this->connection->getQueryBuilder();
572612

573613
$result = $qb
@@ -581,6 +621,8 @@ public function hasShare(string $id): bool {
581621

582622
#[\Override]
583623
public function getShareOwner(string $id): ShareUser {
624+
$this->assertInTransaction();
625+
584626
$qb = $this->connection->getQueryBuilder();
585627
$qb
586628
->select('owner_user_id', 'owner_instance')
@@ -608,6 +650,8 @@ public function getShareOwner(string $id): ShareUser {
608650
*/
609651
#[\Override]
610652
public function setLastUpdated(array $ids, \DateTimeImmutable $lastUpdated): void {
653+
$this->assertInTransaction();
654+
611655
foreach (array_chunk($ids, 1000) as $chunk) {
612656
$qb = $this->connection->getQueryBuilder();
613657

@@ -1258,6 +1302,8 @@ private function getShareCompatiblePermissionTypeClasses(array $sources): array
12581302

12591303
#[\Override]
12601304
public function ensureDefaults(array $shares): array {
1305+
$this->assertInTransaction();
1306+
12611307
$defaultSet = false;
12621308
foreach ($shares as &$share) {
12631309
$shareSourceTypeClasses = array_map(fn (ShareSource $source): string => $source->class, $share->sources);
@@ -1376,4 +1422,10 @@ private static function parseTimestamp(string $timestampMs): \DateTimeImmutable
13761422

13771423
return $time;
13781424
}
1425+
1426+
private function assertInTransaction(): void {
1427+
if (!$this->connection->inTransaction()) {
1428+
throw new RuntimeException('The SharingBackend can only be used inside a transaction.');
1429+
}
1430+
}
13791431
}

0 commit comments

Comments
 (0)