6
6
use App \Entity \TodoList ;
7
7
use App \Exception \HttpClientException ;
8
8
use App \Form \TodoListType ;
9
- use App \Model \GitHubIssue ;
10
- use App \Model \ GitHubPullRequest ;
9
+ use App \Model \GitHubUrlData ;
10
+ use App \Repository \ TaskRepository ;
11
11
use App \Repository \TodoListRepository ;
12
12
use App \Security \Voter \TodoListVoter ;
13
13
use App \Service \TaskService ;
14
14
use App \Util \UrlParser ;
15
+ use Doctrine \Common \Collections \Collection ;
15
16
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
16
17
use Symfony \Component \HttpFoundation \JsonResponse ;
17
18
use Symfony \Component \HttpFoundation \Request ;
@@ -40,10 +41,8 @@ public function new(Request $request, TaskService $taskService): Response
40
41
if ($ form ->isSubmitted () && $ form ->isValid ()) {
41
42
/** @var TodoList $list */
42
43
$ list = $ form ->getData ();
43
-
44
- foreach ($ list ->getTasks () as $ task ) {
45
- $ this ->checkForGitHub ($ task , $ taskService );
46
- }
44
+ // @TODO Fix this for new tasks...
45
+ $ this ->checkForGitHub ($ list ->getTasks (), $ taskService );
47
46
48
47
$ this ->listRepository ->persist ($ list , true );
49
48
@@ -57,15 +56,13 @@ public function new(Request $request, TaskService $taskService): Response
57
56
58
57
#[IsGranted(TodoListVoter::EDIT , 'todoList ' )]
59
58
#[Route('/{id}/edit ' , name: 'list_edit ' , requirements: ['id ' => Requirement::UUID ], methods: ['GET ' , 'POST ' ])]
60
- public function edit (Request $ request , TodoList $ todoList , TaskService $ taskService ): Response
59
+ public function edit (Request $ request , TodoList $ todoList , TaskService $ taskService, TaskRepository $ taskRepository ): Response
61
60
{
62
61
$ form = $ this ->createForm (TodoListType::class, $ todoList );
63
62
$ form ->handleRequest ($ request );
64
63
65
64
if ($ form ->isSubmitted () && $ form ->isValid ()) {
66
- foreach ($ todoList ->getTasks () as $ task ) {
67
- $ this ->checkForGitHub ($ task , $ taskService );
68
- }
65
+ $ todoList ->setTasks ($ this ->checkForGitHub ($ todoList ->getTasks (), $ taskService ));
69
66
70
67
$ this ->listRepository ->flush ();
71
68
@@ -105,24 +102,42 @@ public function removeTask(TodoList $todoList, Task $task): JsonResponse
105
102
return $ this ->json (['Ok ' ]);
106
103
}
107
104
108
- protected function checkForGitHub (Task $ task , TaskService $ taskService ): void
105
+ /**
106
+ * @param Collection<int, Task> $tasks
107
+ *
108
+ * @return Collection<int, Task>
109
+ */
110
+ protected function checkForGitHub (Collection $ tasks , TaskService $ taskService ): Collection
109
111
{
110
- $ gitHubLink = UrlParser::getGitHubUrlFromText ($ task ->getName ());
112
+ $ links = [];
113
+
114
+ foreach ($ tasks as $ task ) {
115
+ $ link = UrlParser::getGitHubUrlFromText ($ task ->getName ());
111
116
112
- if (false === $ gitHubLink ) {
113
- return ;
117
+ if (!$ link instanceof GitHubUrlData) {
118
+ continue ;
119
+ }
120
+
121
+ $ links [] = $ link ;
114
122
}
115
123
116
124
try {
117
125
// We want to query GitHub to grab the information about the link
118
- $ data = $ taskService ->getGitHubDataFromUrl ($ gitHubLink );
119
- } catch (HttpClientException ) {
120
- // @TODO - Do something with this in the future...
121
- return ;
126
+ $ objects = $ taskService ->getGitHubDataFromUrl ($ links , 'rushlow-development ' , 'big-desk ' );
127
+ } catch (HttpClientException $ e ) {
128
+ throw new \RuntimeException ('getGitHubDataFromUrl() Failed. ' , previous: $ e );
122
129
}
123
130
124
- if ($ data instanceof GitHubIssue || $ data instanceof GitHubPullRequest) {
125
- $ task ->addGitHub ($ data );
131
+ foreach ($ objects as $ gitHubObject ) {
132
+ $ tasks = $ tasks ->map (function (Task $ task ) use ($ gitHubObject ) {
133
+ if (str_contains ($ task ->getName (), $ gitHubObject ->uri )) {
134
+ $ task ->addGitHub ($ gitHubObject );
135
+ }
136
+
137
+ return $ task ;
138
+ });
126
139
}
140
+
141
+ return $ tasks ;
127
142
}
128
143
}
0 commit comments