This microservice is specialized on storing statistics data per for each existing player in Open Matchmaking platform.
- Requires a storage for the data per each player, separately from Authorization / Authentication microservice
- Necessary to track a player progress after each game and perform certain actions on this data
- The data can be easily denormalized depends on your use cases
- The stored data can be used for analytics and tracking for a state of the game (balance, the most picked characters and so on)
Field name | Field type | Constraints | Description |
---|---|---|---|
player_id | UUID | PK | A database unique object identifier (same as in Authorization / Authentication microservice) |
games | Integer | NOT NULL | Total number of games played |
wins | Integer | NOT NULL | Total number of games when the player won |
loses | Integer | NOT NULL | Total number of games when the player was defeated |
rating | Integer | NOT NULL | An actual rating of the player |
Also the table can have an extra fields in database (for example, extra columns/documents in NoSQL or a nested JSON/HStore field in RDBMS) that can be used for providing for a detail information about the player.
Method | Endpoint | Usage | Returns |
---|---|---|---|
GET | /player-statistics/api/health-check | Health check endpoint for API Gateways | "OK" |
Exchange name | Exchange type | Options |
---|---|---|
open-matchmaking.player-stats.statistic.init.direct | direct | durable=True, passive=False, auto_delete=False |
open-matchmaking.player-stats.statistic.retrieve.direct | direct | durable=True, passive=False, auto_delete=False |
open-matchmaking.player-stats.statistic.update.direct | direct | durable=True, passive=False, auto_delete=False |
Queue name | Queue options | Exchange name | Usage | Returns |
---|---|---|---|---|
player-stats.statistic.init | durable=True, passive=False, exclusive=False, auto_delete=False | open-matchmaking.player-stats.statistic.init.direct | Initializes statistics from an empty state for the new player | Statistics or a validation error |
player-stats.statistic.retrieve | durable=True, passive=False, exclusive=False, auto_delete=False | open-matchmaking.player-stats.statistic.retrieve.direct | Returns the player statistics | Statistics or a validation error |
player-stats.statistic.update | durable=True, passive=False, exclusive=False, auto_delete=False | open-matchmaking.player-stats.statistic.update.direct | Updates the player statistics | Statistics or a validation error |
For initializing and resetting the player statistics a developer should send a message to the player-stats.statistic.init
queue with content inside in JSON format and content_type=application/json
in headers. The message content contains the following fields:
Field name | Parent | Description | Type |
---|---|---|---|
player_id | Stores a unique identifier of the player. | UUID as string |
An example of the request between microservices directly
{
"player_id": "507f1f77aabbccd000000001"
}
An example of the response:
{
"content": {
"id": "507f1f77aabbccd000000000",
"player_id": "507f1f77aabbccd000000001",
"total_games": 0,
"wins": 0,
"loses": 0,
"rating": 0
},
"event-name": "init-player"
}
For getting the player statistics a developer should send a message to the player-stats.statistic.retrieve
queue with content inside in JSON format and content_type=application/json
in headers. The message content contains the following fields:
Field name | Parent | Description | Type |
---|---|---|---|
player_id | Stores a unique identifier of the player. | UUID as string |
An example of the request between microservices directly:
{
"player_id": "507f1f77aabbccd000000001"
}
An example of the response:
{
"content": {
"id": "507f1f77aabbccd000000000",
"player_id": "507f1f77aabbccd000000001",
"total_games": 10,
"wins": 6,
"loses": 4,
"rating": 2676
},
"event-name": "init-player"
}
For updating the player statistics a developer should send a message to the player-stats.statistic.update
queue with content inside in JSON format and content_type=application/json
in headers. The message content contains the following fields:
Field name | Parent | Description | Type |
---|---|---|---|
player_id | Stores a unique identifier of the player. | UUID as string | |
total_games | Total amount of games, already finished by the player. | Integer | |
wins | Total number of wins. | Integer | |
loses | Total number of defeats. | Integer | |
rating | Current rating in competitive mode. | Integer |
An example of the request between microservices directly:
{
"player_id": "507f1f77aabbccd000000001",
"total_games": 11,
"wins": 6,
"loses": 5,
"rating": 2648
}
An example of the response:
{
"content": {
"id": "507f1f77aabbccd000000000",
"player_id": "507f1f77aabbccd000000001",
"total_games": 11,
"wins": 6,
"loses": 5,
"rating": 2648
},
"event-name": "init-player"
}