Skip to content

Commit

Permalink
fix: invites for users previously removed
Browse files Browse the repository at this point in the history
  • Loading branch information
jxjj committed Jan 23, 2025
1 parent d496f13 commit b8e1e9c
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions app/Http/Controllers/DeckInviteController.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,24 +43,29 @@ public function __invoke(Request $request, Deck $deck)
abort(403, 'User does not have permission to invite to this deck.');
}

$userId = $request->user()->id;
$existingMembership = DeckMembership::where('deck_id', $deck->id)
->where('user_id', $request->user()->id)
->where('user_id', $userId)
->withTrashed()
->first();

// only create/update a new membership if the user is not already a
// member, or the role is a promotion (e.g. viewer -> editor)
// we don't want to accidentally demote owners if they click
// on their own invite link
if (! $existingMembership || $existingMembership->isRoleAPromotion($validated['role'])) {
DeckMembership::updateOrCreate([
if (! $existingMembership) {
DeckMembership::create([
'deck_id' => $deck->id,
'user_id' => $request->user()->id,
], [
'user_id' => $userId,
'role' => $validated['role'],
]);
} elseif ($existingMembership->trashed()) {
$existingMembership->restore();
$existingMembership->update([
'role' => $validated['role'],
]);
} elseif ($existingMembership->isRoleAPromotion($validated['role'])) {
$existingMembership->update([
'role' => $validated['role'],
]);
}

// redirect to the deck
return redirect("/decks/{$deck->id}");
}
}

0 comments on commit b8e1e9c

Please sign in to comment.