Skip to content

Commit db914e7

Browse files
phenpessoatobiasehlert
authored andcommitted
properly handle errors on houseFetcher (#38)
1 parent cb9420c commit db914e7

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

src/TibiaHousesOverviewV3.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,28 @@ func TibiaHousesOverviewV3(c *gin.Context) {
5454
var (
5555
// Creating empty vars
5656
HouseData, GuildhallData []House
57+
Errors []error
5758

5859
// Channels
5960
done = make(chan struct{})
6061
housesChan = make(chan House)
6162
guildhallsChan = make(chan House)
63+
errorsChan = make(chan error)
6264

6365
baseURL = "https://www.tibia.com/community/?subtopic=houses&world=" + TibiadataQueryEscapeStringV3(world) + "&town=" + TibiadataQueryEscapeStringV3(town) + "&type="
6466
)
6567

66-
go houseFetcher(c, baseURL, "houses", done, housesChan)
67-
go houseFetcher(c, baseURL, "guildhalls", done, guildhallsChan)
68+
go houseFetcher(baseURL, "houses", done, housesChan, errorsChan)
69+
go houseFetcher(baseURL, "guildhalls", done, guildhallsChan, errorsChan)
6870

6971
for n := 2; n > 0; {
7072
select {
7173
case h := <-housesChan:
7274
HouseData = append(HouseData, h)
7375
case gh := <-guildhallsChan:
7476
GuildhallData = append(GuildhallData, gh)
77+
case err := <-errorsChan:
78+
Errors = append(Errors, err)
7579
case <-done:
7680
n--
7781
}
@@ -80,8 +84,13 @@ func TibiaHousesOverviewV3(c *gin.Context) {
8084
close(done)
8185
close(guildhallsChan)
8286
close(housesChan)
87+
close(errorsChan)
88+
89+
if len(Errors) > 0 {
90+
TibiaDataAPIHandleOtherResponse(c, http.StatusBadGateway, "TibiaHousesOverviewV3", gin.H{"error": Errors[0].Error()})
91+
return
92+
}
8393

84-
//
8594
// Build the data-blob
8695
jsonData := JSONData{
8796
Houses{
@@ -100,14 +109,17 @@ func TibiaHousesOverviewV3(c *gin.Context) {
100109
TibiaDataAPIHandleSuccessResponse(c, "TibiaHousesOverviewV3", jsonData)
101110
}
102111

103-
func houseFetcher(c *gin.Context, baseURL, houseType string, done chan struct{}, outputChan chan House) {
112+
func houseFetcher(baseURL, houseType string, done chan struct{}, outputChan chan House, errorsChan chan error) {
113+
defer func() {
114+
done <- struct{}{}
115+
}()
116+
104117
// Getting data with TibiadataHTMLDataCollectorV3
105118
TibiadataRequest.URL = baseURL + TibiadataQueryEscapeStringV3(houseType)
106119
BoxContentHTML, err := TibiadataHTMLDataCollectorV3(TibiadataRequest)
107-
108-
// return error (e.g. for maintenance mode)
109120
if err != nil {
110-
TibiaDataAPIHandleOtherResponse(c, http.StatusBadGateway, "TibiaHousesOverviewV3", gin.H{"error": err.Error()})
121+
// return error (e.g. for maintenance mode)
122+
errorsChan <- err
111123
return
112124
}
113125

@@ -176,6 +188,4 @@ func houseFetcher(c *gin.Context, baseURL, houseType string, done chan struct{},
176188
}
177189
}
178190
})
179-
180-
done <- struct{}{}
181191
}

0 commit comments

Comments
 (0)