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.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.1 KiB
						
					
					
				
								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
							 | 
						|
								}
							 |