1package db
2
3import (
4 "sort"
5 "time"
6)
7
8type TimelineEvent struct {
9 *Repo
10 *Follow
11 EventAt time.Time
12}
13
14func MakeTimeline(e Execer) ([]TimelineEvent, error) {
15 var events []TimelineEvent
16
17 repos, err := GetAllRepos(e)
18 if err != nil {
19 return nil, err
20 }
21
22 follows, err := GetAllFollows(e)
23 if err != nil {
24 return nil, err
25 }
26
27 for _, repo := range repos {
28 events = append(events, TimelineEvent{
29 Repo: &repo,
30 Follow: nil,
31 EventAt: repo.Created,
32 })
33 }
34
35 for _, follow := range follows {
36 events = append(events, TimelineEvent{
37 Repo: nil,
38 Follow: &follow,
39 EventAt: follow.FollowedAt,
40 })
41 }
42
43 sort.Slice(events, func(i, j int) bool {
44 return events[i].EventAt.After(events[j].EventAt)
45 })
46
47 // Limit the slice to 100 events
48 if len(events) > 50 {
49 events = events[:50]
50 }
51
52 return events, nil
53}