graph, rpdata-server: Started on new GraphQL implementation.
the build failed

This commit is contained in:
2018-09-13 21:13:05 +02:00
parent 2e5162a29b
commit 9978d7380b
16 changed files with 482 additions and 14 deletions
+61 -2
View File
@@ -26,6 +26,25 @@ type Character struct {
Description string `json:"description" bson:"description"`
}
// Filter is used to filter the list of characters
type Filter struct {
IDs []string `json:"ids"`
Nicks []string `json:"nicks"`
Names []string `json:"names"`
Author *string `json:"author"`
Search *string `json:"search"`
Logged *bool `json:"logged"`
}
// Nick gets the character's nick.
func (character *Character) Nick() *string {
if len(character.Nicks[0]) == 0 {
return nil
}
return &character.Nicks[0]
}
// HasNick returns true if the character has that nick
func (character *Character) HasNick(nick string) bool {
for i := range character.Nicks {
@@ -136,8 +155,48 @@ func FindName(name string) (Character, error) {
}
// List lists all characters
func List() ([]Character, error) {
return list(bson.M{})
func List(filter *Filter) ([]Character, error) {
query := bson.M{}
if filter != nil {
if len(filter.IDs) > 1 {
query["id"] = bson.M{"$in": filter.IDs}
} else if len(filter.IDs) == 1 {
query["id"] = filter.IDs[0]
}
if len(filter.Nicks) > 1 {
query["nicks"] = bson.M{"$in": filter.Nicks}
} else if len(filter.Nicks) == 1 {
query["nicks"] = filter.Nicks[0]
}
if len(filter.Names) > 1 {
query["$or"] = bson.M{
"name": bson.M{"$in": filter.Names},
"shortName": bson.M{"$in": filter.Names},
}
} else if len(filter.Names) == 1 {
query["$or"] = bson.M{
"name": filter.Names[0],
"shortName": filter.Names[0],
}
}
if filter.Logged != nil {
query["logged"] = *filter.Logged
}
if filter.Author != nil {
query["author"] = *filter.Author
}
if filter.Search != nil {
query["$text"] = bson.M{"$search": *filter.Search}
}
}
return list(query)
}
// ListAuthor lists all characters by author