2026-03-05 11:04:24 +00:00
|
|
|
package publisher
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"iter"
|
|
|
|
|
|
|
|
|
|
"lmika.dev/lmika/weiro/models"
|
|
|
|
|
"lmika.dev/lmika/weiro/providers/db"
|
|
|
|
|
)
|
|
|
|
|
|
2026-03-18 10:51:19 +00:00
|
|
|
// postIter returns a post iterator which returns posts in reverse chronological order.
|
2026-03-29 01:26:05 +00:00
|
|
|
func (s *Publisher) publishedPostIter(ctx context.Context, site int64) iter.Seq[models.Maybe[*models.Post]] {
|
2026-03-05 11:04:24 +00:00
|
|
|
return func(yield func(models.Maybe[*models.Post]) bool) {
|
|
|
|
|
paging := db.PagingParams{Offset: 0, Limit: 50}
|
2026-03-29 01:26:05 +00:00
|
|
|
page, err := s.db.SelectPublishedPostsOfSite(ctx, site, paging)
|
2026-03-05 11:04:24 +00:00
|
|
|
if err != nil {
|
|
|
|
|
yield(models.Maybe[*models.Post]{Err: err})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for {
|
|
|
|
|
for _, post := range page {
|
2026-03-07 22:54:46 +00:00
|
|
|
if post.State != models.StatePublished {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-05 11:04:24 +00:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-18 10:51:19 +00:00
|
|
|
|
|
|
|
|
// postIterByCategory returns a post iterator for posts in a specific category.
|
|
|
|
|
func (s *Publisher) postIterByCategory(ctx context.Context, categoryID int64) iter.Seq[models.Maybe[*models.Post]] {
|
|
|
|
|
return func(yield func(models.Maybe[*models.Post]) bool) {
|
|
|
|
|
paging := db.PagingParams{Offset: 0, Limit: 50}
|
|
|
|
|
for {
|
2026-03-29 01:26:05 +00:00
|
|
|
page, err := s.db.SelectPublishedPostsOfCategory(ctx, categoryID, paging)
|
2026-03-18 10:51:19 +00:00
|
|
|
if err != nil {
|
|
|
|
|
yield(models.Maybe[*models.Post]{Err: err})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if len(page) == 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
for _, post := range page {
|
|
|
|
|
if !yield(models.Maybe[*models.Post]{Value: post}) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
paging.Offset += paging.Limit
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|