implemented search of players serverside

This commit is contained in:
Niklas Kapelle 2025-05-08 15:33:39 +02:00
parent 0ddf35bc26
commit 018974266e
Signed by: niklas
GPG Key ID: 4EB651B36D841D16
3 changed files with 56 additions and 5 deletions

View File

@ -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)
}

View File

@ -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
}

View File

@ -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{