weiro/services/publisher/iter.go

38 lines
913 B
Go
Raw Permalink Normal View History

2026-03-05 11:04:24 +00:00
package publisher
import (
"context"
"iter"
"lmika.dev/lmika/weiro/models"
"lmika.dev/lmika/weiro/providers/db"
)
// PostIter returns a post iterator which returns posts in reverse chronological order.
func (s *Publisher) postIter(ctx context.Context, site int64) iter.Seq[models.Maybe[*models.Post]] {
return func(yield func(models.Maybe[*models.Post]) bool) {
paging := db.PagingParams{Offset: 0, Limit: 50}
page, err := s.db.SelectPostsOfSite(ctx, site, false, paging)
if err != nil {
yield(models.Maybe[*models.Post]{Err: err})
return
}
for {
for _, post := range page {
if !yield(models.Maybe[*models.Post]{Value: post}) {
return
}
}
paging.Offset += paging.Limit
page, err = s.db.SelectPostsOfSite(ctx, site, false, paging)
if err != nil {
yield(models.Maybe[*models.Post]{Err: err})
return
} else if len(page) == 0 {
return
}
}
}
}