2026-06-12 19:40:21 +08:00

119 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package client
import (
"context"
"google.golang.org/grpc"
robotv1 "hyapp.local/api/proto/robot/v1"
"hyapp/pkg/appcode"
dicedomain "hyapp/services/game-service/internal/domain/dice"
)
// GameRobotClient 是 game-service 到 robot-service 的薄适配层;旧 dice service 只依赖领域 Robot不直接依赖 robot proto。
type GameRobotClient struct {
client robotv1.GameRobotServiceClient
}
func NewGameRobotClient(conn *grpc.ClientConn) *GameRobotClient {
return &GameRobotClient{client: robotv1.NewGameRobotServiceClient(conn)}
}
func (c *GameRobotClient) PickActiveDiceRobot(ctx context.Context, appCode string, gameID string, matchID string, excludeUserIDs []int64, nowMS int64) (dicedomain.Robot, error) {
resp, err := c.client.PickGameRobot(ctx, &robotv1.PickGameRobotRequest{
Meta: robotMeta(appCode),
GameId: gameID,
MatchId: matchID,
SelectedAtMs: nowMS,
ExcludeUserIds: excludeUserIDs,
})
if err != nil {
return dicedomain.Robot{}, err
}
return diceRobotFromProto(resp.GetRobot()), nil
}
func (c *GameRobotClient) ListDiceRobots(ctx context.Context, appCode string, gameID string, status string, pageSize int32, cursor string) ([]dicedomain.Robot, string, error) {
resp, err := c.client.ListGameRobots(ctx, &robotv1.ListGameRobotsRequest{
Meta: robotMeta(appCode),
GameId: gameID,
Status: status,
PageSize: pageSize,
Cursor: cursor,
})
if err != nil {
return nil, "", err
}
items := make([]dicedomain.Robot, 0, len(resp.GetRobots()))
for _, item := range resp.GetRobots() {
items = append(items, diceRobotFromProto(item))
}
return items, resp.GetNextCursor(), nil
}
func (c *GameRobotClient) RegisterDiceRobots(ctx context.Context, appCode string, gameID string, userIDs []int64, adminID int64, nowMS int64) ([]dicedomain.Robot, error) {
resp, err := c.client.RegisterGameRobots(ctx, &robotv1.RegisterGameRobotsRequest{
Meta: robotMetaWithActor(appCode, adminID),
GameId: gameID,
UserIds: userIDs,
})
if err != nil {
return nil, err
}
items := make([]dicedomain.Robot, 0, len(resp.GetRobots()))
for _, item := range resp.GetRobots() {
items = append(items, diceRobotFromProto(item))
}
return items, nil
}
func (c *GameRobotClient) SetDiceRobotStatus(ctx context.Context, appCode string, gameID string, userID int64, status string, nowMS int64) (dicedomain.Robot, error) {
resp, err := c.client.SetGameRobotStatus(ctx, &robotv1.SetGameRobotStatusRequest{
Meta: robotMeta(appCode),
GameId: gameID,
UserId: userID,
Status: status,
})
if err != nil {
return dicedomain.Robot{}, err
}
return diceRobotFromProto(resp.GetRobot()), nil
}
func (c *GameRobotClient) DeleteDiceRobot(ctx context.Context, appCode string, gameID string, userID int64) error {
_, err := c.client.DeleteGameRobot(ctx, &robotv1.DeleteGameRobotRequest{
Meta: robotMeta(appCode),
GameId: gameID,
UserId: userID,
})
return err
}
func robotMeta(appCode string) *robotv1.RequestMeta {
return robotMetaWithActor(appCode, 0)
}
func robotMetaWithActor(appCode string, actorUserID int64) *robotv1.RequestMeta {
return &robotv1.RequestMeta{
Caller: "game-service",
ActorUserId: actorUserID,
AppCode: appcode.Normalize(appCode),
}
}
func diceRobotFromProto(item *robotv1.Robot) dicedomain.Robot {
if item == nil {
return dicedomain.Robot{}
}
return dicedomain.Robot{
AppCode: item.GetAppCode(),
GameID: item.GetGameId(),
UserID: item.GetUserId(),
Status: item.GetStatus(),
CreatedByAdminID: item.GetCreatedByAdminId(),
CreatedAtMS: item.GetCreatedAtMs(),
UpdatedAtMS: item.GetUpdatedAtMs(),
LastUsedAtMS: item.GetLastUsedAtMs(),
UsedCount: item.GetUsedCount(),
}
}