Skip to content

Commit 17b9361

Browse files
committed
feat: add denormalized player online status, add to friends
1 parent c864673 commit 17b9361

File tree

18 files changed

+116
-42
lines changed

18 files changed

+116
-42
lines changed

services/player-service/api/v2/intnl/openapi.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1443,10 +1443,12 @@ components:
14431443

14441444
PlayerFriend:
14451445
type: object
1446-
required: [ playerId, username, friendsSince ]
1446+
required: [ playerId, username, online, lastOnline, friendsSince ]
14471447
properties:
14481448
playerId: { type: string }
14491449
username: { type: string }
1450+
online: { type: boolean }
1451+
lastOnline: { type: string, format: date-time }
14501452
friendsSince:
14511453
type: string
14521454
format: date-time

services/player-service/api/v2/intnl/server.gen.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/player-service/api/v2/intnl/server_relationships.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ func (s *server) GetPlayerFriends(ctx context.Context, request GetPlayerFriendsR
129129
FriendsSince: row.CreatedAt,
130130
PlayerId: row.TargetID,
131131
Username: row.Username,
132+
Online: row.Online,
133+
LastOnline: row.LastOnline,
132134
}
133135
}
134136

services/player-service/cmd/player-service/main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/go-chi/chi/v5"
1010
"github.com/hollow-cube/hc-services/libraries/common/pkg/kafkafx"
1111
"github.com/hollow-cube/hc-services/services/player-service/api/auth"
12+
"github.com/hollow-cube/hc-services/services/player-service/internal/consumers"
1213
"github.com/hollow-cube/hc-services/services/player-service/internal/db"
1314
"github.com/hollow-cube/hc-services/services/player-service/internal/pkg/model"
1415
"github.com/hollow-cube/tebex-go"
@@ -80,6 +81,9 @@ func main() {
8081
),
8182
httpfx.Module,
8283

84+
// Generic consumer (e.g., denormalized data from other services)
85+
fx.Invoke(consumers.NewConsumerSet),
86+
8387
// GRPC server (for Envoy)
8488
fx.Provide(auth.NewServer),
8589
fx.Invoke(newGrpcServer),
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package consumers
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
8+
"github.com/hollow-cube/hc-services/libraries/common/pkg/kafkafx"
9+
"github.com/hollow-cube/hc-services/services/player-service/internal/db"
10+
"github.com/hollow-cube/hc-services/services/session-service/pkg/kafkaModel"
11+
"github.com/segmentio/kafka-go"
12+
)
13+
14+
const consumerGroup = "player-service"
15+
16+
func NewConsumerSet(consumer kafkafx.Consumer, store *db.Store) {
17+
18+
// if you add more, separate into multiple files :)
19+
consumer.Subscribe(kafkafx.TopicSessionUpdates, consumerGroup, func(ctx context.Context, rawMsg kafka.Message) error {
20+
var msg kafkaModel.SessionUpdateMessage
21+
if err := json.Unmarshal(rawMsg.Value, &msg); err != nil {
22+
return err
23+
}
24+
25+
var newOnline bool
26+
switch msg.Action {
27+
case kafkaModel.Session_Create:
28+
newOnline = true
29+
case kafkaModel.Session_Delete:
30+
newOnline = false
31+
default:
32+
return nil // do nothing
33+
}
34+
35+
if err := store.UpdatePlayerData(ctx, db.UpdatePlayerDataParams{ID: msg.PlayerId, Online: &newOnline}); err != nil {
36+
return fmt.Errorf("failed to update player data: %w", err)
37+
}
38+
39+
return nil
40+
})
41+
}

services/player-service/internal/db/friends.sql.go

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/player-service/internal/db/linked_accounts.sql.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
alter table player_data add column online boolean not null default false;
2+
alter table player_data alter column online drop default;
3+
4+
comment on column player_data.online is 'Updated by observing session status messages from the session-service'

services/player-service/internal/db/models.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

services/player-service/internal/db/player_data.sql.go

Lines changed: 14 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)