package queries import ( "context" "errors" "git.aiterp.net/rpdata/api/graphql/loader" "git.aiterp.net/rpdata/api/graphql/resolver/types" "git.aiterp.net/rpdata/api/model/character" ) // CharactersArgs is args for characters query type CharactersArgs struct { IDs *[]string Nicks *[]string Author *string } // Characters resolves the characters query func (r *QueryResolver) Characters(ctx context.Context, args *CharactersArgs) ([]*types.CharacterResolver, error) { var chars []character.Character var err error loader := loader.FromContext(ctx) if loader == nil { return nil, errors.New("no loader") } switch { case args.IDs != nil: chars, err = character.ListIDs(*args.IDs...) case args.Nicks != nil: chars, err = character.ListNicks(*args.Nicks...) case args.Author != nil: chars, err = character.ListAuthor(*args.Author) default: chars, err = character.List() } if err != nil { return nil, err } resolvers := make([]*types.CharacterResolver, 0, len(chars)) for i := range chars { if chars[i].ID == "" { continue } resolvers = append(resolvers, &types.CharacterResolver{C: chars[i]}) } return resolvers, nil }