1
0
mirror of https://github.com/mrusme/neonmodem.git synced 2024-12-04 14:46:37 -05:00
neonmodem/aggregator/aggregator.go
2022-12-30 03:22:54 -05:00

44 lines
792 B
Go

package aggregator
import (
"sort"
"github.com/mrusme/gobbs/models/post"
"github.com/mrusme/gobbs/ui/ctx"
)
type Aggregator struct {
ctx *ctx.Ctx
}
func New(c *ctx.Ctx) (*Aggregator, error) {
a := new(Aggregator)
a.ctx = c
return a, nil
}
func (a *Aggregator) ListPosts() ([]post.Post, []error) {
var errs []error = make([]error, len(a.ctx.Systems))
var posts []post.Post
for idx, sys := range a.ctx.Systems {
sysPosts, err := (*sys).ListPosts(idx)
if err != nil {
errs[idx] = err
continue
}
posts = append(posts, sysPosts...)
}
sort.SliceStable(posts, func(i, j int) bool {
return posts[i].CreatedAt.After(posts[j].CreatedAt)
})
return posts, errs
}
func (a *Aggregator) LoadPost(p *post.Post) error {
return (*a.ctx.Systems[p.SysIDX]).LoadPost(p)
}