Completed
Push — master ( 0cd623...76b2d2 )
by Mahmoud
05:30
created

CloseTimeTrackAction::run()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 1
eloc 5
nc 1
nop 1
1
<?php
2
3
namespace App\Containers\Tracker\Actions;
4
5
use App\Containers\Tracker\Tasks\FindPendingTimeTrackerByUserIdTask;
6
use App\Containers\Tracker\Tasks\UpdateTimeTrackerToCloseTask;
7
use App\Containers\User\Tasks\FindUserByVisitorIdTask;
8
use App\Port\Task\Abstracts\Task;
9
10
/**
11
 * Class CloseTimeTrackAction.
12
 *
13
 * @author Mahmoud Zalt <[email protected]>
14
 */
15
class CloseTimeTrackAction extends Task
16
{
17
18
    /**
19
     * @var  \App\Containers\User\Tasks\FindUserByVisitorIdTask
20
     */
21
    private $findUserByVisitorIdTask;
22
23
    /**
24
     * @var  \App\Containers\Tracker\Tasks\FindPendingTimeTrackerByUserIdTask
25
     */
26
    private $findPendingTimeTrackerByUserIdTask;
27
28
    /**
29
     * @var  \App\Containers\Tracker\Tasks\UpdateTimeTrackerToCloseTask
30
     */
31
    private $updateTimeTrackerToCloseTask;
32
33
    /**
34
     * CloseTimeTrackAction constructor.
35
     *
36
     * @param \App\Containers\User\Tasks\FindUserByVisitorIdTask               $findUserByVisitorIdTask
37
     * @param \App\Containers\Tracker\Tasks\FindPendingTimeTrackerByUserIdTask $findPendingTimeTrackerByUserIdTask
38
     * @param \App\Containers\Tracker\Tasks\UpdateTimeTrackerToCloseTask       $updateTimeTrackerToCloseTask
39
     */
40
    public function __construct(
41
        FindUserByVisitorIdTask $findUserByVisitorIdTask,
42
        FindPendingTimeTrackerByUserIdTask $findPendingTimeTrackerByUserIdTask,
43
        UpdateTimeTrackerToCloseTask $updateTimeTrackerToCloseTask
44
    ) {
45
        $this->findUserByVisitorIdTask = $findUserByVisitorIdTask;
46
        $this->findPendingTimeTrackerByUserIdTask = $findPendingTimeTrackerByUserIdTask;
47
        $this->updateTimeTrackerToCloseTask = $updateTimeTrackerToCloseTask;
48
    }
49
50
    /**
51
     * @param $visitorId
52
     *
53
     * @return  mixed
54
     */
55
    public function run($visitorId)
56
    {
57
        // find the user by visitor ID to get his real ID
58
        $user = $this->findUserByVisitorIdTask->run($visitorId);
59
60
        // find the pending to close track for this user
61
        $timeTracker = $this->findPendingTimeTrackerByUserIdTask->run($user->id);
62
63
        // update the record with the closing data
64
        $this->updateTimeTrackerToCloseTask->run($timeTracker);
65
66
        return $timeTracker;
67
    }
68
}
69