77 lines
1.7 KiB
Go
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 string `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
|
|
}
|