package resources import ( "fmt" "net/url" "path" "github.com/dgraph-io/badger/v3" "github.com/go-fed/activity/streams" ) func RenderOutbox(name, domain string, db *badger.DB) (map[string]interface{}, error) { id, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox")) if err != nil { return nil, fmt.Errorf("could not partse url: %w", err) } first, err := url.Parse(path.Join("https://", domain, "actors", name, "outbox", "?=page=true")) if err != nil { return nil, fmt.Errorf("could not partse url: %w", err) } oc := streams.NewActivityStreamsOrderedCollection() idProp := streams.NewJSONLDIdProperty() idProp.Set(id) oc.SetJSONLDId(idProp) var i int db.View(func(txn *badger.Txn) error { it := txn.NewIterator(badger.DefaultIteratorOptions) defer it.Close() prefix := []byte("outbox:sample") for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { item := it.Item() // k := item.Key() err := item.Value(func(v []byte) error { i++ // fmt.Printf("key=%s, value=%s\n", k, v) return nil }) if err != nil { return err } } return nil }) itemsProp := streams.NewActivityStreamsTotalItemsProperty() itemsProp.Set(i) oc.SetActivityStreamsTotalItems(itemsProp) ocProp := streams.NewActivityStreamsFirstProperty() ocProp.SetIRI(first) oc.SetActivityStreamsFirst(ocProp) return streams.Serialize(oc) }