Loading server/api_tournament.go +3 −1 Original line number Diff line number Diff line Loading @@ -298,10 +298,12 @@ func (s *ApiServer) WriteTournamentRecord(ctx context.Context, in *api.WriteTour return nil, status.Error(codes.NotFound, "Tournament not found or has ended.") } record, err := TournamentRecordWrite(ctx, s.logger, s.db, s.leaderboardCache, s.leaderboardRankCache, in.GetTournamentId(), userID, username, in.GetRecord().GetScore(), in.GetRecord().GetSubscore(), in.GetRecord().GetMetadata(), in.GetRecord().GetOperator()) record, err := TournamentRecordWrite(ctx, s.logger, s.db, s.leaderboardCache, s.leaderboardRankCache, userID, in.GetTournamentId(), userID, username, in.GetRecord().GetScore(), in.GetRecord().GetSubscore(), in.GetRecord().GetMetadata(), in.GetRecord().GetOperator()) if err != nil { if err == ErrTournamentMaxSizeReached { return nil, status.Error(codes.FailedPrecondition, "Tournament has reached max size.") } else if err == ErrTournamentAuthoritative { return nil, status.Error(codes.PermissionDenied, "Tournament only allows authoritative score submissions.") } else if err == ErrTournamentWriteMaxNumScoreReached { return nil, status.Error(codes.FailedPrecondition, "Reached allowed max number of score attempts.") } else if err == ErrTournamentWriteJoinRequired { Loading server/core_tournament.go +6 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import ( var ( ErrTournamentNotFound = errors.New("tournament not found") ErrTournamentAuthoritative = errors.New("tournament only allows authoritative submissions") ErrTournamentMaxSizeReached = errors.New("tournament max size reached") ErrTournamentOutsideDuration = errors.New("tournament outside of duration") ErrTournamentWriteMaxNumScoreReached = errors.New("max number score count reached") Loading Loading @@ -364,12 +365,16 @@ func TournamentRecordsList(ctx context.Context, logger *zap.Logger, db *sql.DB, return recordList, nil } func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, leaderboardCache LeaderboardCache, rankCache LeaderboardRankCache, tournamentId string, ownerId uuid.UUID, username string, score, subscore int64, metadata string, overrideOperator api.Operator) (*api.LeaderboardRecord, error) { func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, leaderboardCache LeaderboardCache, rankCache LeaderboardRankCache, caller uuid.UUID, tournamentId string, ownerId uuid.UUID, username string, score, subscore int64, metadata string, overrideOperator api.Operator) (*api.LeaderboardRecord, error) { leaderboard := leaderboardCache.Get(tournamentId) if leaderboard == nil || !leaderboard.IsTournament() { return nil, ErrTournamentNotFound } if leaderboard.Authoritative && caller != uuid.Nil { return nil, ErrTournamentAuthoritative } nowTime := time.Now().UTC() nowUnix := nowTime.Unix() Loading server/runtime_go_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -1937,7 +1937,7 @@ func (n *RuntimeGoNakamaModule) TournamentRecordWrite(ctx context.Context, id, o operator = api.Operator(*overrideOperator) } return TournamentRecordWrite(ctx, n.logger, n.db, n.leaderboardCache, n.leaderboardRankCache, id, owner, username, score, subscore, metadataStr, operator) return TournamentRecordWrite(ctx, n.logger, n.db, n.leaderboardCache, n.leaderboardRankCache, uuid.Nil, id, owner, username, score, subscore, metadataStr, operator) } func (n *RuntimeGoNakamaModule) TournamentRecordsHaystack(ctx context.Context, id, ownerID string, limit int, expiry int64) ([]*api.LeaderboardRecord, error) { Loading server/runtime_javascript_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -4975,7 +4975,7 @@ func (n *runtimeJavascriptNakamaModule) tournamentRecordWrite(r *goja.Runtime) f } } record, err := TournamentRecordWrite(context.Background(), n.logger, n.db, n.leaderboardCache, n.rankCache, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) record, err := TournamentRecordWrite(context.Background(), n.logger, n.db, n.leaderboardCache, n.rankCache, uuid.Nil, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) if err != nil { panic(r.NewGoError(fmt.Errorf("error writing tournament record: %v", err.Error()))) } Loading server/runtime_lua_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -6488,7 +6488,7 @@ func (n *RuntimeLuaNakamaModule) tournamentRecordWrite(l *lua.LState) int { return 0 } record, err := TournamentRecordWrite(l.Context(), n.logger, n.db, n.leaderboardCache, n.rankCache, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) record, err := TournamentRecordWrite(l.Context(), n.logger, n.db, n.leaderboardCache, n.rankCache, uuid.Nil, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) if err != nil { l.RaiseError("error writing tournament record: %v", err.Error()) return 0 Loading Loading
server/api_tournament.go +3 −1 Original line number Diff line number Diff line Loading @@ -298,10 +298,12 @@ func (s *ApiServer) WriteTournamentRecord(ctx context.Context, in *api.WriteTour return nil, status.Error(codes.NotFound, "Tournament not found or has ended.") } record, err := TournamentRecordWrite(ctx, s.logger, s.db, s.leaderboardCache, s.leaderboardRankCache, in.GetTournamentId(), userID, username, in.GetRecord().GetScore(), in.GetRecord().GetSubscore(), in.GetRecord().GetMetadata(), in.GetRecord().GetOperator()) record, err := TournamentRecordWrite(ctx, s.logger, s.db, s.leaderboardCache, s.leaderboardRankCache, userID, in.GetTournamentId(), userID, username, in.GetRecord().GetScore(), in.GetRecord().GetSubscore(), in.GetRecord().GetMetadata(), in.GetRecord().GetOperator()) if err != nil { if err == ErrTournamentMaxSizeReached { return nil, status.Error(codes.FailedPrecondition, "Tournament has reached max size.") } else if err == ErrTournamentAuthoritative { return nil, status.Error(codes.PermissionDenied, "Tournament only allows authoritative score submissions.") } else if err == ErrTournamentWriteMaxNumScoreReached { return nil, status.Error(codes.FailedPrecondition, "Reached allowed max number of score attempts.") } else if err == ErrTournamentWriteJoinRequired { Loading
server/core_tournament.go +6 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import ( var ( ErrTournamentNotFound = errors.New("tournament not found") ErrTournamentAuthoritative = errors.New("tournament only allows authoritative submissions") ErrTournamentMaxSizeReached = errors.New("tournament max size reached") ErrTournamentOutsideDuration = errors.New("tournament outside of duration") ErrTournamentWriteMaxNumScoreReached = errors.New("max number score count reached") Loading Loading @@ -364,12 +365,16 @@ func TournamentRecordsList(ctx context.Context, logger *zap.Logger, db *sql.DB, return recordList, nil } func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, leaderboardCache LeaderboardCache, rankCache LeaderboardRankCache, tournamentId string, ownerId uuid.UUID, username string, score, subscore int64, metadata string, overrideOperator api.Operator) (*api.LeaderboardRecord, error) { func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, leaderboardCache LeaderboardCache, rankCache LeaderboardRankCache, caller uuid.UUID, tournamentId string, ownerId uuid.UUID, username string, score, subscore int64, metadata string, overrideOperator api.Operator) (*api.LeaderboardRecord, error) { leaderboard := leaderboardCache.Get(tournamentId) if leaderboard == nil || !leaderboard.IsTournament() { return nil, ErrTournamentNotFound } if leaderboard.Authoritative && caller != uuid.Nil { return nil, ErrTournamentAuthoritative } nowTime := time.Now().UTC() nowUnix := nowTime.Unix() Loading
server/runtime_go_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -1937,7 +1937,7 @@ func (n *RuntimeGoNakamaModule) TournamentRecordWrite(ctx context.Context, id, o operator = api.Operator(*overrideOperator) } return TournamentRecordWrite(ctx, n.logger, n.db, n.leaderboardCache, n.leaderboardRankCache, id, owner, username, score, subscore, metadataStr, operator) return TournamentRecordWrite(ctx, n.logger, n.db, n.leaderboardCache, n.leaderboardRankCache, uuid.Nil, id, owner, username, score, subscore, metadataStr, operator) } func (n *RuntimeGoNakamaModule) TournamentRecordsHaystack(ctx context.Context, id, ownerID string, limit int, expiry int64) ([]*api.LeaderboardRecord, error) { Loading
server/runtime_javascript_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -4975,7 +4975,7 @@ func (n *runtimeJavascriptNakamaModule) tournamentRecordWrite(r *goja.Runtime) f } } record, err := TournamentRecordWrite(context.Background(), n.logger, n.db, n.leaderboardCache, n.rankCache, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) record, err := TournamentRecordWrite(context.Background(), n.logger, n.db, n.leaderboardCache, n.rankCache, uuid.Nil, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) if err != nil { panic(r.NewGoError(fmt.Errorf("error writing tournament record: %v", err.Error()))) } Loading
server/runtime_lua_nakama.go +1 −1 Original line number Diff line number Diff line Loading @@ -6488,7 +6488,7 @@ func (n *RuntimeLuaNakamaModule) tournamentRecordWrite(l *lua.LState) int { return 0 } record, err := TournamentRecordWrite(l.Context(), n.logger, n.db, n.leaderboardCache, n.rankCache, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) record, err := TournamentRecordWrite(l.Context(), n.logger, n.db, n.leaderboardCache, n.rankCache, uuid.Nil, id, userID, username, score, subscore, metadataStr, api.Operator(overrideOperator)) if err != nil { l.RaiseError("error writing tournament record: %v", err.Error()) return 0 Loading