38 lines
913 B
Go
38 lines
913 B
Go
|
|
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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|