This commit is contained in:
@@ -15,6 +15,7 @@ type CharactersArgs struct {
|
||||
Names *[]string
|
||||
Author *string
|
||||
Search *string
|
||||
Logged *bool
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +40,7 @@ func (r *QueryResolver) Characters(ctx context.Context, args *CharactersArgs) ([
|
||||
names = *filter.Names
|
||||
}
|
||||
|
||||
characters, err = character.ListFilter(ids, nicks, names, filter.Author, filter.Search)
|
||||
characters, err = character.ListFilter(ids, nicks, names, filter.Author, filter.Search, filter.Logged)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -38,6 +38,9 @@ input CharactersFilter {
|
||||
|
||||
# Filter by text search matching against the character's description
|
||||
search: String
|
||||
|
||||
# Filter by whether they've been part of a log.
|
||||
logged: Boolean
|
||||
}
|
||||
|
||||
# Input for adding characters
|
||||
|
||||
@@ -14,6 +14,8 @@ import (
|
||||
|
||||
var collection *mgo.Collection
|
||||
|
||||
var logsCollection *mgo.Collection
|
||||
|
||||
// Character is a common data model representing an RP character or NPC.
|
||||
type Character struct {
|
||||
ID string `json:"id" bson:"_id"`
|
||||
@@ -155,9 +157,31 @@ func ListIDs(ids ...string) ([]Character, error) {
|
||||
}
|
||||
|
||||
// ListFilter lists all logs matching the filters.
|
||||
func ListFilter(ids []string, nicks []string, names []string, author *string, search *string) ([]Character, error) {
|
||||
func ListFilter(ids []string, nicks []string, names []string, author *string, search *string, logged *bool) ([]Character, error) {
|
||||
query := bson.M{}
|
||||
|
||||
if logged != nil {
|
||||
loggedIDs := make([]string, 0, 64)
|
||||
err := logsCollection.Find(bson.M{"characterIds": bson.M{"$ne": nil}}).Distinct("characterIds", &loggedIDs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(ids) > 0 {
|
||||
newIds := make([]string, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
for _, loggedID := range loggedIDs {
|
||||
if id == loggedID {
|
||||
newIds = append(newIds, id)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
ids = newIds
|
||||
} else {
|
||||
ids = loggedIDs
|
||||
}
|
||||
}
|
||||
if len(ids) > 0 {
|
||||
query["_id"] = bson.M{"$in": ids}
|
||||
}
|
||||
@@ -256,5 +280,7 @@ func init() {
|
||||
if err != nil {
|
||||
log.Fatalln("init common.characters:", err)
|
||||
}
|
||||
|
||||
logsCollection = db.C("logbot3.logs")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user