77 lines
1.7 KiB
Go

package arn
import "github.com/aerogo/nano"
// ActivityCreate is a user activity that creates something.
type ActivityCreate struct {
ObjectType string `json:"objectType"`
ObjectID ID `json:"objectId"`
hasID
hasCreator
}
// NewActivityCreate creates a new activity.
func NewActivityCreate(objectType string, objectID string, userID UserID) *ActivityCreate {
return &ActivityCreate{
hasID: hasID{
ID: GenerateID("ActivityCreate"),
},
hasCreator: hasCreator{
Created: DateTimeUTC(),
CreatedBy: userID,
},
ObjectType: objectType,
ObjectID: objectID,
}
}
// Object returns the object that was created.
func (activity *ActivityCreate) Object() Likeable {
obj, _ := DB.Get(activity.ObjectType, activity.ObjectID)
return obj.(Likeable)
}
// Postable casts the object to the Postable interface.
func (activity *ActivityCreate) Postable() Postable {
return activity.Object().(Postable)
}
// TypeName returns the type name.
func (activity *ActivityCreate) TypeName() string {
return "ActivityCreate"
}
// Self returns the object itself.
func (activity *ActivityCreate) Self() Loggable {
return activity
}
// StreamActivityCreates returns a stream of all ActivityCreate objects.
func StreamActivityCreates() <-chan *ActivityCreate {
channel := make(chan *ActivityCreate, nano.ChannelBufferSize)
go func() {
for obj := range DB.All("ActivityCreate") {
channel <- obj.(*ActivityCreate)
}
close(channel)
}()
return channel
}
// FilterActivityCreates filters all ActivityCreates by a custom function.
func FilterActivityCreates(filter func(Activity) bool) []Activity {
var filtered []Activity
for obj := range StreamActivityCreates() {
if filter(obj) {
filtered = append(filtered, obj)
}
}
return filtered
}