diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/api/trello.go | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/internal/api/trello.go b/internal/api/trello.go index 899f6df..cecf0dc 100644 --- a/internal/api/trello.go +++ b/internal/api/trello.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net/http" + "sync" "time" "task-dashboard/internal/models" @@ -193,16 +194,28 @@ func (c *TrelloClient) GetBoardsWithCards(ctx context.Context) ([]models.Board, return nil, err } - // Fetch cards for each board + var wg sync.WaitGroup + sem := make(chan struct{}, 5) // Limit to 5 concurrent requests + for i := range boards { - cards, err := c.GetCards(ctx, boards[i].ID) - if err != nil { - // Log error but continue with other boards - continue - } - boards[i].Cards = cards + wg.Add(1) + go func(i int) { + defer wg.Done() + + // Acquire semaphore + sem <- struct{}{} + defer func() { <-sem }() + + cards, err := c.GetCards(ctx, boards[i].ID) + if err == nil { + // It is safe to write to specific indices of the slice concurrently + boards[i].Cards = cards + } + }(i) } + wg.Wait() + return boards, nil } |
