Added arn to the main repository
This commit is contained in:
65
arn/HasPosts.go
Normal file
65
arn/HasPosts.go
Normal file
@ -0,0 +1,65 @@
|
||||
package arn
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
// HasPosts includes a list of Post IDs.
|
||||
type hasPosts struct {
|
||||
PostIDs []string `json:"posts"`
|
||||
}
|
||||
|
||||
// AddPost adds a post to the object.
|
||||
func (obj *hasPosts) AddPost(postID string) {
|
||||
obj.PostIDs = append(obj.PostIDs, postID)
|
||||
}
|
||||
|
||||
// RemovePost removes a post from the object.
|
||||
func (obj *hasPosts) RemovePost(postID string) bool {
|
||||
for index, item := range obj.PostIDs {
|
||||
if item == postID {
|
||||
obj.PostIDs = append(obj.PostIDs[:index], obj.PostIDs[index+1:]...)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Posts returns a slice of all posts.
|
||||
func (obj *hasPosts) Posts() []*Post {
|
||||
objects := DB.GetMany("Post", obj.PostIDs)
|
||||
posts := make([]*Post, 0, len(objects))
|
||||
|
||||
for _, post := range objects {
|
||||
if post == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
posts = append(posts, post.(*Post))
|
||||
}
|
||||
|
||||
return posts
|
||||
}
|
||||
|
||||
// PostsRelevantFirst returns a slice of all posts sorted by relevance.
|
||||
func (obj *hasPosts) PostsRelevantFirst(count int) []*Post {
|
||||
original := obj.Posts()
|
||||
newPosts := make([]*Post, len(original))
|
||||
copy(newPosts, original)
|
||||
|
||||
sort.Slice(newPosts, func(i, j int) bool {
|
||||
return newPosts[i].Created > newPosts[j].Created
|
||||
})
|
||||
|
||||
if count >= 0 && len(newPosts) > count {
|
||||
newPosts = newPosts[:count]
|
||||
}
|
||||
|
||||
return newPosts
|
||||
}
|
||||
|
||||
// CountPosts returns the number of posts written for this object.
|
||||
func (obj *hasPosts) CountPosts() int {
|
||||
return len(obj.PostIDs)
|
||||
}
|
Reference in New Issue
Block a user