Skip to content

Commit 49bc96a

Browse files
authored
chore: merge pull request #5 from ABGEO/feat/enhance-timeline-data
enhance timeline data
2 parents f3419f8 + 1156b02 commit 49bc96a

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

apps/api/internal/service/event.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"net/http"
1111
"slices"
1212
"sort"
13+
"time"
1314

1415
"github.com/google/uuid"
1516

@@ -121,21 +122,24 @@ func (s *Event) fetchAvatar(ctx context.Context, url string) (*http.Response, er
121122

122123
func (s *Event) calculateDailyFollowerChanges(events []model.AggregatedEvent) []dto.DailyFollowerChange {
123124
dailyChangesMap := s.calculateDailyFollowerChangesMap(events)
125+
startDate := events[0].Date
126+
endDate := time.Now()
127+
fullChangesMap := s.fillDailyFollowerChangesGaps(startDate, endDate, dailyChangesMap)
124128

125-
result := slices.Collect(maps.Values(dailyChangesMap))
129+
result := slices.Collect(maps.Values(fullChangesMap))
126130
sort.Slice(result, func(i, j int) bool {
127131
return result[i].Date.Before(result[j].Date)
128132
})
129133

130134
return result
131135
}
132136

133-
func (s *Event) calculateDailyFollowerChangesMap(events []model.AggregatedEvent) map[int64]dto.DailyFollowerChange {
137+
func (s *Event) calculateDailyFollowerChangesMap(events []model.AggregatedEvent) map[string]dto.DailyFollowerChange {
134138
totalFollowers := 0
135-
dailyChanges := make(map[int64]dto.DailyFollowerChange, len(events))
139+
dailyChanges := make(map[string]dto.DailyFollowerChange, len(events))
136140

137141
for _, event := range events {
138-
index := event.Date.Unix()
142+
index := event.Date.Format("2006-01-02")
139143

140144
change, ok := dailyChanges[index]
141145
if !ok {
@@ -159,3 +163,30 @@ func (s *Event) calculateDailyFollowerChangesMap(events []model.AggregatedEvent)
159163

160164
return dailyChanges
161165
}
166+
167+
func (s *Event) fillDailyFollowerChangesGaps(
168+
startDate time.Time,
169+
endDate time.Time,
170+
dailyChanges map[string]dto.DailyFollowerChange,
171+
) map[string]dto.DailyFollowerChange {
172+
timeline := make(map[string]dto.DailyFollowerChange)
173+
lastTotalFollowers := 0
174+
175+
for currentDate := startDate; !currentDate.After(endDate); currentDate = currentDate.AddDate(0, 0, 1) {
176+
dateKey := currentDate.Format("2006-01-02")
177+
178+
if change, exists := dailyChanges[dateKey]; exists {
179+
timeline[dateKey] = change
180+
lastTotalFollowers = change.Total
181+
182+
continue
183+
}
184+
185+
timeline[dateKey] = dto.DailyFollowerChange{
186+
Date: currentDate,
187+
Total: lastTotalFollowers,
188+
}
189+
}
190+
191+
return timeline
192+
}

libs/chart/src/components/axis.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ function addAxis(
1818
.attr('transform', `translate(0,${height - margins.bottom})`)
1919
.call(
2020
d3
21-
.axisBottom(xScale)
22-
.ticks(width / 80)
21+
.axisBottom<Date>(xScale)
22+
.ticks(width / 50)
23+
.tickFormat(d3.timeFormat('%d %b'))
2324
.tickSizeOuter(0)
2425
);
2526

2627
svg
2728
.append('g')
2829
.attr('transform', `translate(${margins.left},0)`)
29-
.call(d3.axisLeft(yScale).ticks(height / 40));
30+
.call(d3.axisLeft(yScale).ticks(height / 50));
3031
}
3132

3233
export { addAxis };

0 commit comments

Comments
 (0)