-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCreateRepositoryByPullRequest.php
More file actions
56 lines (49 loc) · 1.63 KB
/
CreateRepositoryByPullRequest.php
File metadata and controls
56 lines (49 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
namespace App\Actions\Repository;
use App\Actions\Github\Repository\FetchRepository;
use App\DTO\Github\Repository\RepositoryData;
use App\DTO\RepositoryData as DTORepositoryData;
use App\Models\PullRequest;
use App\Models\Repository;
use App\Services\Github\PullRequestService;
use App\Services\Repository\RepositoryService;
class CreateRepositoryByPullRequest
{
public function __construct(protected RepositoryService $repositoryService)
{
}
/**
* @param PullRequest $pullRequest
*
* @return Repository
*/
public function execute(PullRequest $pullRequest): Repository
{
$repository = $this->repositoryService->getRepositoryByFullName(
$pullRequest->repository_name
);
if (!is_null($repository)) {
return $repository;
}
[
'username' => $username,
'repository' => $repository,
] = app(PullRequestService::class)->getRegexMatch($pullRequest->html_url);
$repository = app(FetchRepository::class)
->execute($username, $repository)
->dtoOrFail();
$repositoryData = RepositoryData::from($repository);
$data = DTORepositoryData::from($repositoryData)->toArray();
$data['user_id'] = $pullRequest->user_id;
$data['owner_third_party_id'] = $repositoryData->owner->id;
$repository = Repository::withTrashed()->updateOrCreate(
[
'node_id' => $data['node_id'],
'full_name' => $data['full_name'],
],
$data
);
$repository->restore();
return $repository;
}
}