forked from tangled.org/core
this repo has no description
1package db 2 3import ( 4 "sort" 5 "time" 6) 7 8type TimelineEvent struct { 9 *Repo 10 *Follow 11 *Star 12 EventAt time.Time 13} 14 15// TODO: this gathers heterogenous events from different sources and aggregates 16// them in code; if we did this entirely in sql, we could order and limit and paginate easily 17func MakeTimeline(e Execer) ([]TimelineEvent, error) { 18 var events []TimelineEvent 19 limit := 50 20 21 repos, err := GetAllRepos(e, limit) 22 if err != nil { 23 return nil, err 24 } 25 26 follows, err := GetAllFollows(e, limit) 27 if err != nil { 28 return nil, err 29 } 30 31 stars, err := GetAllStars(e, limit) 32 if err != nil { 33 return nil, err 34 } 35 36 for _, repo := range repos { 37 events = append(events, TimelineEvent{ 38 Repo: &repo, 39 EventAt: repo.Created, 40 }) 41 } 42 43 for _, follow := range follows { 44 events = append(events, TimelineEvent{ 45 Follow: &follow, 46 EventAt: follow.FollowedAt, 47 }) 48 } 49 50 for _, star := range stars { 51 events = append(events, TimelineEvent{ 52 Star: &star, 53 EventAt: star.Created, 54 }) 55 } 56 57 sort.Slice(events, func(i, j int) bool { 58 return events[i].EventAt.After(events[j].EventAt) 59 }) 60 61 // Limit the slice to 100 events 62 if len(events) > limit { 63 events = events[:limit] 64 } 65 66 return events, nil 67}