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.
60 lines
1.2 KiB
60 lines
1.2 KiB
package queries
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.aiterp.net/rpdata/api/graphql/resolver/types"
|
|
"git.aiterp.net/rpdata/api/model/character"
|
|
)
|
|
|
|
// CharactersArgs is args for characters query
|
|
type CharactersArgs struct {
|
|
Filter *struct {
|
|
IDs *[]string
|
|
Nicks *[]string
|
|
Names *[]string
|
|
Author *string
|
|
Search *string
|
|
Logged *bool
|
|
}
|
|
}
|
|
|
|
// Characters resolves the characters query
|
|
func (r *QueryResolver) Characters(ctx context.Context, args *CharactersArgs) ([]*types.CharacterResolver, error) {
|
|
var characters []character.Character
|
|
var err error
|
|
|
|
filter := args.Filter
|
|
if filter != nil {
|
|
var ids []string
|
|
var nicks []string
|
|
var names []string
|
|
|
|
if filter.IDs != nil {
|
|
ids = *filter.IDs
|
|
}
|
|
if filter.Nicks != nil {
|
|
nicks = *filter.Nicks
|
|
}
|
|
if filter.Names != nil {
|
|
names = *filter.Names
|
|
}
|
|
|
|
characters, err = character.ListFilter(ids, nicks, names, filter.Author, filter.Search, filter.Logged)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
characters, err = character.List()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
resolvers := make([]*types.CharacterResolver, 0, len(characters))
|
|
for _, character := range characters {
|
|
resolvers = append(resolvers, &types.CharacterResolver{C: character})
|
|
}
|
|
|
|
return resolvers, nil
|
|
}
|