implemented search of players serverside
This commit is contained in:
parent
0ddf35bc26
commit
018974266e
@ -35,6 +35,9 @@ type Repo interface {
|
||||
// Get all players
|
||||
GetPlayers() ([]*model.Player, error)
|
||||
|
||||
// Search players by a query
|
||||
SearchPlayer(string) ([]*model.Player, error)
|
||||
|
||||
// Get all games
|
||||
GetGames() ([]*model.Game, error)
|
||||
}
|
||||
|
@ -277,3 +277,30 @@ func (s *SQLRepo) GetGames() ([]*model.Game, error) {
|
||||
|
||||
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{
|
||||
Type: graphql.NewNonNull(graphql.NewList(player)),
|
||||
Type: graphql.NewNonNull(graphql.NewList(graphql.NewNonNull(player))),
|
||||
Description: "Get all players",
|
||||
Args: graphql.FieldConfigArgument{
|
||||
"query": &graphql.ArgumentConfig{
|
||||
Type: graphql.String,
|
||||
DefaultValue: "",
|
||||
},
|
||||
},
|
||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
||||
players, err := repo.GetPlayers()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
query, ok := p.Args["query"].(string)
|
||||
if !ok {
|
||||
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{
|
||||
|
Loading…
x
Reference in New Issue
Block a user