119 lines
3.7 KiB
Go
119 lines
3.7 KiB
Go
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(),
|
||
}
|
||
}
|