Something went wrong. Try again.
forked from tangled.org/core
Something went wrong. Try again.
Go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081package db
import ( "sort" "time")
type TimelineEvent struct { *Repo *Follow *Star
EventAt time.Time
// optional: populate only if Repo is a fork Source *Repo}
// TODO: this gathers heterogenous events from different sources and aggregates// them in code; if we did this entirely in sql, we could order and limit and paginate easilyfunc MakeTimeline(e Execer) ([]TimelineEvent, error) { var events []TimelineEvent limit := 50
repos, err := GetAllRepos(e, limit) if err != nil { return nil, err }
follows, err := GetAllFollows(e, limit) if err != nil { return nil, err }
stars, err := GetAllStars(e, limit) if err != nil { return nil, err }
for _, repo := range repos { var sourceRepo *Repo if repo.Source != "" { sourceRepo, err = GetRepoByAtUri(e, repo.Source) if err != nil { return nil, err } }
events = append(events, TimelineEvent{ Repo: &repo, EventAt: repo.Created, Source: sourceRepo, }) }
for _, follow := range follows { events = append(events, TimelineEvent{ Follow: &follow, EventAt: follow.FollowedAt, }) }
for _, star := range stars { events = append(events, TimelineEvent{ Star: &star, EventAt: star.Created, }) }
sort.Slice(events, func(i, j int) bool { return events[i].EventAt.After(events[j].EventAt) })
// Limit the slice to 100 events if len(events) > limit { events = events[:limit] }
return events, nil}