implemented search of players serverside
This commit is contained in:
parent
0ddf35bc26
commit
018974266e
@ -35,6 +35,9 @@ type Repo interface {
|
|||||||
// Get all players
|
// Get all players
|
||||||
GetPlayers() ([]*model.Player, error)
|
GetPlayers() ([]*model.Player, error)
|
||||||
|
|
||||||
|
// Search players by a query
|
||||||
|
SearchPlayer(string) ([]*model.Player, error)
|
||||||
|
|
||||||
// Get all games
|
// Get all games
|
||||||
GetGames() ([]*model.Game, error)
|
GetGames() ([]*model.Game, error)
|
||||||
}
|
}
|
||||||
|
@ -277,3 +277,30 @@ func (s *SQLRepo) GetGames() ([]*model.Game, error) {
|
|||||||
|
|
||||||
return rtn, nil
|
return rtn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SQLRepo) SearchPlayer(query string) ([]*model.Player, error) {
|
||||||
|
rows, err := s.db.Query(`
|
||||||
|
SELECT id, name, elo
|
||||||
|
FROM Players
|
||||||
|
WHERE name LIKE ?
|
||||||
|
`, query+"%")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
rtn := []*model.Player{}
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var player model.Player
|
||||||
|
|
||||||
|
err = rows.Scan(&player.ID, &player.Name, &player.Elo)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
rtn = append(rtn, &player)
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn, nil
|
||||||
|
}
|
||||||
|
@ -329,15 +329,36 @@ func createShema(repo repo.Repo) graphql.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"players": &graphql.Field{
|
"players": &graphql.Field{
|
||||||
Type: graphql.NewNonNull(graphql.NewList(player)),
|
Type: graphql.NewNonNull(graphql.NewList(graphql.NewNonNull(player))),
|
||||||
Description: "Get all players",
|
Description: "Get all players",
|
||||||
|
Args: graphql.FieldConfigArgument{
|
||||||
|
"query": &graphql.ArgumentConfig{
|
||||||
|
Type: graphql.String,
|
||||||
|
DefaultValue: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
||||||
players, err := repo.GetPlayers()
|
query, ok := p.Args["query"].(string)
|
||||||
if err != nil {
|
if !ok {
|
||||||
return nil, err
|
log.Printf("Failed to parse query at players: %v", p.Args["query"])
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return players, nil
|
if query == "" {
|
||||||
|
players, err := repo.GetPlayers()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return players, nil
|
||||||
|
} else {
|
||||||
|
players, err := repo.SearchPlayer(query)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return players, nil
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"games": &graphql.Field{
|
"games": &graphql.Field{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user