|
3 | 3 | namespace App\Http\Controllers\Teams; |
4 | 4 |
|
5 | 5 | use App\Http\Controllers\Controller; |
| 6 | +use App\Http\Requests\Teams\AcceptTeamInvitationRequest; |
6 | 7 | use App\Http\Responses\MessageResponse; |
7 | 8 | use App\Models\TeamInvitation; |
8 | | -use App\Models\User; |
9 | | -use Illuminate\Http\Request; |
10 | 9 | use Illuminate\Http\Response; |
11 | 10 | use Illuminate\Support\Facades\DB; |
12 | | -use Illuminate\Validation\ValidationException; |
| 11 | +use Knuckles\Scribe\Attributes\Authenticated; |
13 | 12 | use Knuckles\Scribe\Attributes\Endpoint; |
14 | 13 | use Knuckles\Scribe\Attributes\Group; |
15 | 14 | use Knuckles\Scribe\Attributes\Response as ScribeResponse; |
16 | 15 |
|
17 | 16 | #[Group('Team Invitations')] |
| 17 | +#[Authenticated] |
18 | 18 | class AcceptTeamInvitationController extends Controller |
19 | 19 | { |
20 | | - #[Endpoint('Accept an invitation', 'Accept a team invitation using the signed link delivered to the invitee by email. The link must be valid, unexpired, and resolve to an existing user account.')] |
| 20 | + #[Endpoint('Accept an invitation', 'Accept a pending team invitation for the authenticated user.')] |
21 | 21 | #[ScribeResponse(['message' => 'Invitation accepted successfully.'], description: 'Invitation accepted')] |
22 | | - #[ScribeResponse(status: Response::HTTP_FORBIDDEN, description: 'Invalid signature or no matching user.')] |
23 | | - #[ScribeResponse(status: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Invitation already accepted or expired.')] |
24 | | - public function __invoke(Request $request, TeamInvitation $invitation): MessageResponse |
| 22 | + #[ScribeResponse(status: Response::HTTP_UNPROCESSABLE_ENTITY, description: 'Invitation already accepted, expired, or sent to a different email address.')] |
| 23 | + public function __invoke(AcceptTeamInvitationRequest $request, TeamInvitation $invitation): MessageResponse |
25 | 24 | { |
26 | | - if ($invitation->isAccepted() || $invitation->isExpired()) { |
27 | | - throw ValidationException::withMessages([ |
28 | | - 'invitation' => __('This invitation is no longer valid.'), |
29 | | - ]); |
30 | | - } |
31 | | - |
32 | | - $user = User::query() |
33 | | - ->whereRaw('LOWER(email) = ?', [strtolower($invitation->email)]) |
34 | | - ->first(); |
35 | | - |
36 | | - abort_if($user === null, Response::HTTP_FORBIDDEN); |
| 25 | + $user = $request->user(); |
37 | 26 |
|
38 | 27 | DB::transaction(function () use ($user, $invitation) { |
39 | 28 | $invitation->team->memberships()->firstOrCreate( |
|
0 commit comments