Skip to content

Commit f76cced

Browse files
committed
updated code coverage
1 parent 6ef758d commit f76cced

File tree

1 file changed

+114
-9
lines changed

1 file changed

+114
-9
lines changed

coverage/coverage.html

Lines changed: 114 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,33 +144,87 @@
144144
<pre class="file" id="file2" style="display: none">package domain_service
145145

146146
import (
147+
"sync"
148+
147149
domain_model "github.com/mmadariaga/go-api/internal/domain/model"
148150
)
149151

150152
type GetDriversByRaceDependencies interface {
151153
FetchDriversByRace(raceId int) ([]domain_model.Driver, error)
152154
}
153155

156+
type fetchDriversResponse struct {
157+
raceId int
158+
response []domain_model.Driver
159+
error error
160+
}
161+
154162
func GetDriversByRace(races []domain_model.Race, dependencies GetDriversByRaceDependencies) (map[int][]domain_model.Driver, error) <span class="cov8" title="1">{
155163

156164
driversByRace := make(map[int][]domain_model.Driver)
157165

166+
var waitGroup sync.WaitGroup
167+
respChannel := make(chan fetchDriversResponse, 8)
168+
158169
for _, race := range races </span><span class="cov8" title="1">{
159-
result, error := dependencies.FetchDriversByRace(race.Id)
160-
if error != nil </span><span class="cov8" title="1">{
161-
return nil, error
170+
waitGroup.Add(1)
171+
go fetchDrivers(
172+
race.Id,
173+
dependencies,
174+
respChannel,
175+
&amp;waitGroup,
176+
)
177+
}</span>
178+
179+
<span class="cov8" title="1">go func() </span><span class="cov8" title="1">{
180+
waitGroup.Wait()
181+
close(respChannel)
182+
}</span>()
183+
184+
<span class="cov8" title="1">for resp := range respChannel </span><span class="cov8" title="1">{
185+
186+
if resp.error != nil </span><span class="cov8" title="1">{
187+
return nil, resp.error
162188
}</span>
163189

164-
<span class="cov8" title="1">driversByRace[race.Id] = result</span>
190+
<span class="cov8" title="1">driversByRace[resp.raceId] = resp.response</span>
165191
}
166192

167193
<span class="cov8" title="1">return driversByRace, nil</span>
168194
}
195+
196+
func fetchDrivers(
197+
raceId int,
198+
dependencies GetDriversByRaceDependencies,
199+
respChan chan&lt;- fetchDriversResponse,
200+
waitGroup *sync.WaitGroup,
201+
) <span class="cov8" title="1">{
202+
defer waitGroup.Done()
203+
204+
result, error := dependencies.FetchDriversByRace(raceId)
205+
206+
if error != nil </span><span class="cov8" title="1">{
207+
respChan &lt;- fetchDriversResponse{
208+
raceId: raceId,
209+
response: nil,
210+
error: error,
211+
}
212+
return
213+
}</span>
214+
215+
<span class="cov8" title="1">respChan &lt;- fetchDriversResponse{
216+
raceId: raceId,
217+
response: result,
218+
error: nil,
219+
}</span>
220+
}
169221
</pre>
170222

171223
<pre class="file" id="file3" style="display: none">package domain_service
172224

173225
import (
226+
"sync"
227+
174228
domain_model "github.com/mmadariaga/go-api/internal/domain/model"
175229
)
176230

@@ -179,6 +233,12 @@
179233
FetchPodiumByRace(raceId int, drivers []domain_model.Driver) ([3]domain_model.Podium, error)
180234
}
181235

236+
type fetchPodiumsResponse struct {
237+
raceId int
238+
response [3]domain_model.Podium
239+
error error
240+
}
241+
182242
func GetPodiumByRace(
183243
races []domain_model.Race,
184244
dependencies GetPodiumByRaceDependencies,
@@ -191,17 +251,62 @@
191251
return nil, error
192252
}</span>
193253

194-
<span class="cov8" title="1">for _, race := range races </span><span class="cov8" title="1">{
195-
result, error := dependencies.FetchPodiumByRace(race.Id, drivers[race.Id])
196-
if error != nil </span><span class="cov8" title="1">{
197-
return nil, error
254+
<span class="cov8" title="1">var waitGroup sync.WaitGroup
255+
respChannel := make(chan fetchPodiumsResponse, 8)
256+
for _, race := range races </span><span class="cov8" title="1">{
257+
waitGroup.Add(1)
258+
go fetchPodiums(
259+
race.Id,
260+
drivers[race.Id],
261+
dependencies,
262+
respChannel,
263+
&amp;waitGroup,
264+
)
265+
}</span>
266+
267+
<span class="cov8" title="1">go func() </span><span class="cov8" title="1">{
268+
waitGroup.Wait()
269+
close(respChannel)
270+
}</span>()
271+
272+
<span class="cov8" title="1">for resp := range respChannel </span><span class="cov8" title="1">{
273+
274+
if resp.error != nil </span><span class="cov8" title="1">{
275+
return nil, resp.error
198276
}</span>
199277

200-
<span class="cov8" title="1">podiumsByRace[race.Id] = result</span>
278+
<span class="cov8" title="1">podiumsByRace[resp.raceId] = resp.response</span>
201279
}
202280

203281
<span class="cov8" title="1">return podiumsByRace, nil</span>
204282
}
283+
284+
func fetchPodiums(
285+
raceId int,
286+
drivers []domain_model.Driver,
287+
dependencies GetPodiumByRaceDependencies,
288+
respChan chan&lt;- fetchPodiumsResponse,
289+
waitGroup *sync.WaitGroup,
290+
) <span class="cov8" title="1">{
291+
defer waitGroup.Done()
292+
293+
result, error := dependencies.FetchPodiumByRace(raceId, drivers)
294+
295+
if error != nil </span><span class="cov8" title="1">{
296+
respChan &lt;- fetchPodiumsResponse{
297+
raceId: raceId,
298+
response: [3]domain_model.Podium{},
299+
error: error,
300+
}
301+
return
302+
}</span>
303+
304+
<span class="cov8" title="1">respChan &lt;- fetchPodiumsResponse{
305+
raceId: raceId,
306+
response: result,
307+
error: nil,
308+
}</span>
309+
}
205310
</pre>
206311

207312
</div>

0 commit comments

Comments
 (0)