Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow to filter listGames query #740

Merged
merged 3 commits into from
Jun 14, 2020
Merged

Conversation

janKir
Copy link
Contributor

@janKir janKir commented Jun 13, 2020

This PR ( based on issue #735 ) adds createdAt and updatedAt fields to the metadata containing numeric timestamps. Furthermore, the following query parameters were given to the listGames endpoint: isGameover, updatedBefore, updatedAfter.

remaining tasks

  • implement filter in the included storage adapters

@janKir janKir marked this pull request as ready for review June 13, 2020 22:34
Copy link
Member

@delucis delucis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @janKir! This mostly looks solid, I just have one request regarding how the filter parameters are passed to the API endpoint.

src/server/api.ts Show resolved Hide resolved
@delucis delucis merged commit 3c8777b into boardgameio:0.40.0 Jun 14, 2020
delucis added a commit that referenced this pull request Jun 17, 2020
#740 added the ability to pass query string parameters to the 
listMatches API endpoint to filter the matches returned. This adds 
support for building the relevant query string to the lobby client’s 
listMatches method.
nicolodavis pushed a commit that referenced this pull request Jul 10, 2020
* feat(server): Create types for Lobby API data

Closes #707

This creates types for data returned by the Lobby API and uses them to 
type the response bodies in the server-side router.

* refactor(types): Include min and max players options in Game interface

* refactor(lobby): Convert connection class to Typescript

* feat(lobby): Create a plain JS LobbyClient

LobbyClient is a lightweight wrapper around `fetch` calls to a 
boardgame.io Lobby API server. Apart from the server’s base URL, it is 
stateless and serves mainly to allow argument validation and to abstract 
away a few request details. Unlike plain fetch, requests will throw 
errors if they don’t return `ok` (i.e. status 2xx).

* refactor(lobby): Use new LobbyClient class in React lobby connection

* fix(lobby): Include missing import for React types

* docs(api): Update Lobby docs to convert game to match more thoroughly

* docs: Correct inline documentation block

* docs: Update Lobby docs

- Add examples with the plain JS client
- Move the server config details to the Server doc

* feat(lobby): Add support for listMatches filtering to client

#740 added the ability to pass query string parameters to the 
listMatches API endpoint to filter the matches returned. This adds 
support for building the relevant query string to the lobby client’s 
listMatches method.
@delucis delucis mentioned this pull request Jul 10, 2020
nicolodavis added a commit that referenced this pull request Sep 1, 2020
* feat(server): Expose API router (#698)

BREAKING CHANGES: Previously a custom `uuid` function used by the Lobby API to generate game IDs could be passed in the `lobbyConfig` option on `server.run`. This must now be passed directly to the server:

```js
const server = Server({
  uuid: () => 'id',
});
```

### All commits

* Expose API router
* refactor(server): Pass uuid directly to Server and createRouter
* docs(server): Move uuid from lobbyConfig on run to Server options

Co-authored-by: delucis <swithinbank@gmail.com>

* fix(api): Expose gameover metadata in rooms endpoints. (#666)

* fix(api): Expose gameover metadata in rooms endpoints.

This adds the `gameover` metadata, if it exists, to both the all rooms and single room query endpoints.

Fixes #665.

* Refactor game metadata redacting into a function.

Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

* refactor(server): Use the term "match" in the API and Lobby (#704)

Closes #703

* GameMetadata -> MatchMetadata

* rooms -> matches

* API exposes `matchID`, make Lobby use that instead of `gameID` or `roomID`.

* CreateGame -> CreateMatch

* gameID, roomID -> matchID

* Document Lobby API endpoints.

* nextRoomID -> nextMatchID

* Update error messages.

* gameList -> matchList

* Use "match" wherever it makes sense in lobby code.

* Replace "room" with "match" in documentation.

* Rename 'game' to 'match' in comments and test names.

Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

* doesGameRequireAuthentication -> doesMatchRequireAuthentication

* Rename gameID to matchID in database interface functions.

Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

* Merge branch 'master' into 0.40.0

* feat(server): allow to filter listGames query (#740)

* add createdAt, updatedAt to metadata, add listGames filters

* case-insensitive boolean parsing

* implement inmemory listGames filter

* feat: Add plain JS lobby client (#728)

* feat(server): Create types for Lobby API data

Closes #707

This creates types for data returned by the Lobby API and uses them to 
type the response bodies in the server-side router.

* refactor(types): Include min and max players options in Game interface

* refactor(lobby): Convert connection class to Typescript

* feat(lobby): Create a plain JS LobbyClient

LobbyClient is a lightweight wrapper around `fetch` calls to a 
boardgame.io Lobby API server. Apart from the server’s base URL, it is 
stateless and serves mainly to allow argument validation and to abstract 
away a few request details. Unlike plain fetch, requests will throw 
errors if they don’t return `ok` (i.e. status 2xx).

* refactor(lobby): Use new LobbyClient class in React lobby connection

* fix(lobby): Include missing import for React types

* docs(api): Update Lobby docs to convert game to match more thoroughly

* docs: Correct inline documentation block

* docs: Update Lobby docs

- Add examples with the plain JS client
- Move the server config details to the Server doc

* feat(lobby): Add support for listMatches filtering to client

#740 added the ability to pass query string parameters to the 
listMatches API endpoint to filter the matches returned. This adds 
support for building the relevant query string to the lobby client’s 
listMatches method.

* test(lobby): Fix type error in Lobby connection test

Add `createdAt` and `updatedAt` fields to mock match data

* test(db): Fix coverage for InMemory storage class

* test(master): Fix muddled updatedAt/gameover tests

Two tests for gameover & updatedAt in match metadata were 
mislabelled/mixed up a bit. This tidies up the confusion and in the 
process improves test coverage.

* test(api): Add coverage for invalid query params when listing matches

* feat: Improve consistency around “match” instead of “game” (#765)

* refactor: Rename `gameID` to `matchID` in clients & transports

* docs: Update to replace `gameID` with `matchID`

* docs: Update example code to use `matchID` instead of `gameID`

* refactor: `gameMetadata` → `matchMetadata` in clients & transports

* refactor: `matchMetadata` → `matchData`

* refactor(types): `MatchMetadata` → `MatchData`

* fix test

Co-authored-by: Clemens Wolff <clewolff@microsoft.com>
Co-authored-by: Adrian Gaudebert <adrian@gaudebert.fr>
Co-authored-by: janKir <9143877+janKir@users.noreply.github.com>
Co-authored-by: Nicolo John Davis <nicolodavis@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants