1package db
2
3import (
4 "sort"
5 "time"
6)
7
8type TimelineEvent struct {
9 *Repo
10 *Follow
11 EventAt time.Time
12}
13
14func (d *DB) MakeTimeline() ([]TimelineEvent, error) {
15 var events []TimelineEvent
16
17 repos, err := d.GetAllRepos()
18 if err != nil {
19 return nil, err
20 }
21
22 follows, err := d.GetAllFollows()
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 return events, nil
48}