GraphQL API and utilities for the rpdata project
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package comments
import ( "crypto/rand" "encoding/binary" "strconv"
"git.aiterp.net/rpdata/api/internal/store" "git.aiterp.net/rpdata/api/models" "github.com/globalsign/mgo" )
var collection *mgo.Collection
func find(query interface{}) (models.Comment, error) { comment := models.Comment{} err := collection.Find(query).One(&comment)
return comment, err }
func list(query interface{}, limit int) ([]models.Comment, error) { allocSize := 32 if limit >= 0 { allocSize = limit } else { limit = 0 }
comments := make([]models.Comment, 0, allocSize) err := collection.Find(query).Sort("createdDate").Limit(limit).All(&comments) if err != nil { return nil, err }
return comments, nil }
func makeCommentID() string { result := "SCC" offset := 0 data := make([]byte, 48)
rand.Read(data) for len(result) < 32 { result += strconv.FormatUint(binary.LittleEndian.Uint64(data[offset:]), 36) offset += 8
if offset >= 48 { rand.Read(data) offset = 0 } }
return result[:32] }
func init() { store.HandleInit(func(db *mgo.Database) { collection = db.C("story.comments")
collection.EnsureIndexKey("chapterId") collection.EnsureIndexKey("author") collection.EnsureIndexKey("createdDate") }) }
|