Completed
Push — master ( 5b54fc...16c96d )
by Bertrand
14:42
created

InviteUsersInOrganization::invite()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 14
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 10
nc 5
nop 2
dl 0
loc 14
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
4
namespace App\Src\UseCases\Domain\Organizations\Invitation;
5
6
7
use App\Mail\InvitationLinkToOrganization;
8
use App\Src\UseCases\Domain\Organizations\Model\Invitation;
9
use App\Src\UseCases\Domain\Ports\InvitationRepository;
10
use App\Src\UseCases\Domain\Ports\OrganizationRepository;
11
use Illuminate\Support\Facades\Mail;
12
13
class InviteUsersInOrganization
14
{
15
    private $organizationRepository;
16
    private $invitationRepository;
17
18
    public function __construct(
19
        OrganizationRepository $organizationRepository,
20
        InvitationRepository $invitationRepository
21
    )
22
    {
23
        $this->organizationRepository = $organizationRepository;
24
        $this->invitationRepository = $invitationRepository;
25
    }
26
27
    public function invite(string $organizationId, array $users)
28
    {
29
        $invitations = [];
30
        $organization = $this->organizationRepository->get($organizationId);
31
        foreach($users as $user){
32
            $email = $user['email'];
33
            $firstname = isset($user['firstname']) ? $user['firstname'] : '';
34
            $lastname = isset($user['lastname']) ? $user['lastname'] : '';
35
36
            $invitations[] = $invitation = new Invitation($organizationId, $email, $firstname, $lastname);
37
            $this->invitationRepository->add($invitation);
38
            Mail::to($email)->send(new InvitationLinkToOrganization($invitation->hash(), $email, $organization->name(), $firstname, $lastname));
39
        }
40
        return $invitations;
41
    }
42
}
43