Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
InvitationController
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 create
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Http\Controllers\v1;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\Auth\User;
7use App\Http\Models\Invitation;
8use App\Http\Requests\InvitationFormRequest;
9use Illuminate\Http\JsonResponse;
10use Illuminate\Notifications\Notifiable;
11
12class InvitationController extends Controller
13{
14    use Notifiable;
15
16    public function create(InvitationFormRequest $request): JsonResponse
17    {
18        $data = $request->validated();
19        $user = $request->user();
20        $userId = $user->getKey();
21
22        $referral_key = $user->referral_key;
23        if (! $referral_key) {
24            $referral_key = uniqid();
25            User::where('_id', $userId)->update([
26                'referral_key' => $referral_key,
27            ]);
28        }
29
30        $invited_emails = explode(',', $data['invited_email']);
31
32        $invitation_request = array_merge(
33            $request->except(
34                'invited_email'
35            )
36        );
37
38        dispatch(function () use ($invited_emails, $referral_key, $data, $invitation_request, $userId) {
39            foreach ($invited_emails as $invited_email) {
40                $invitation_data = $invitation_request;
41                $invitation_data['user_id'] = $userId;
42                $invitation_data['status'] = 'Pending';
43                $invitation_data['email'] = $invited_email;
44                $invitation_data['referral_key'] = $referral_key;
45                $invitation = Invitation::create($invitation_data);
46
47                $invitation_data['first_name'] = $data['first_name'];
48                $invitation_data['last_name'] = $data['last_name'];
49                $invitation_data['personal_message'] = $data['personal_message'];
50                $invitation_data['invitation_id'] = $invitation['_id'];
51                $invitation->sendInvitationEmail($invitation_data);
52            }
53        });
54
55        return response()->json(true);
56    }
57}