volleyball support
This commit is contained in:
parent
7e1a126ead
commit
0ae3154334
|
|
@ -210,6 +210,45 @@ type CricketResultResponse struct {
|
|||
Bet365ID string `json:"bet365_id"`
|
||||
}
|
||||
|
||||
type VolleyballResultResponse struct {
|
||||
ID string `json:"id"`
|
||||
SportID string `json:"sport_id"`
|
||||
Time string `json:"time"`
|
||||
TimeStatus string `json:"time_status"`
|
||||
League struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
CC string `json:"cc"`
|
||||
} `json:"league"`
|
||||
Home struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ImageID string `json:"image_id"`
|
||||
CC string `json:"cc"`
|
||||
} `json:"home"`
|
||||
Away struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ImageID string `json:"image_id"`
|
||||
CC string `json:"cc"`
|
||||
} `json:"away"`
|
||||
SS string `json:"ss"`
|
||||
Scores struct {
|
||||
FirstSet Score `json:"1"`
|
||||
SecondSet Score `json:"2"`
|
||||
ThirdSet Score `json:"3"`
|
||||
FourthSet Score `json:"4"`
|
||||
FivethSet Score `json:"5"`
|
||||
} `json:"scores"`
|
||||
Stats struct {
|
||||
PointsWonOnServe []string `json:"points_won_on_serve"`
|
||||
LongestStreak []string `json:"longest_streak"`
|
||||
} `json:"stats"`
|
||||
InplayCreatedAt string `json:"inplay_created_at"`
|
||||
InplayUpdatedAt string `json:"inplay_updated_at"`
|
||||
Bet365ID string `json:"bet365_id"`
|
||||
}
|
||||
|
||||
type Score struct {
|
||||
Home string `json:"home"`
|
||||
Away string `json:"away"`
|
||||
|
|
|
|||
|
|
@ -114,6 +114,17 @@ const (
|
|||
CRICKET_TOP_MATCH_BOWLER CricketMarket = 30246
|
||||
)
|
||||
|
||||
type VolleyballMarket int64
|
||||
|
||||
const (
|
||||
VOLLEYBALL_GAME_LINES VolleyballMarket = 910000
|
||||
VOLLEYBALL_CORRECT_SET_SCORE VolleyballMarket = 910201
|
||||
VOLLEYBALL_MATCH_TOTAL_ODD_EVEN VolleyballMarket = 910217
|
||||
VOLLEYBALL_SET_ONE_LINES VolleyballMarket = 910204
|
||||
VOLLEYBALL_SET_ONE_TO_GO_TO_EXTRA_POINTS VolleyballMarket = 910209
|
||||
VOLLEYBALL_SET_ONE_TOTAL_ODD_EVEN VolleyballMarket = 910218
|
||||
)
|
||||
|
||||
// TODO: Move this into the database so that it can be modified dynamically
|
||||
|
||||
var SupportedMarkets = map[int64]bool{
|
||||
|
|
@ -189,16 +200,26 @@ var SupportedMarkets = map[int64]bool{
|
|||
int64(ICE_HOCKEY_ALTERNATIVE_TOTAL_TWO_WAY): false,
|
||||
|
||||
// Cricket Markets
|
||||
int64(CRICKET_TO_WIN_THE_MATCH): true,
|
||||
int64(CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even): true,
|
||||
int64(CRICKET_FIRST_INNINIGS_SCORE): true,
|
||||
int64(CRICKET_TO_WIN_THE_MATCH): true,
|
||||
|
||||
int64(CRICKET_INNINGS_OF_MATCH_BOWLED_OUT): false,
|
||||
int64(CRICKET_FIRST_OVER_TOTAL_RUNS): false,
|
||||
int64(CRICKET_TEAM_TOP_BATTER): false,
|
||||
int64(CRICKET_TEAM_TOP_BOWLE): false,
|
||||
int64(CRICKET_PLAYER_OF_THE_MATCH): false,
|
||||
int64(CRICKET_FIRST_WICKET_METHOD): false,
|
||||
int64(CRICKET_TOP_MATCH_BATTER): false,
|
||||
int64(CRICKET_TOP_MATCH_BOWLER): false,
|
||||
int64(CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even): false,
|
||||
int64(CRICKET_FIRST_INNINIGS_SCORE): false,
|
||||
int64(CRICKET_INNINGS_OF_MATCH_BOWLED_OUT): false,
|
||||
int64(CRICKET_FIRST_OVER_TOTAL_RUNS): false,
|
||||
int64(CRICKET_TEAM_TOP_BATTER): false,
|
||||
int64(CRICKET_TEAM_TOP_BOWLE): false,
|
||||
int64(CRICKET_PLAYER_OF_THE_MATCH): false,
|
||||
int64(CRICKET_FIRST_WICKET_METHOD): false,
|
||||
int64(CRICKET_TOP_MATCH_BATTER): false,
|
||||
int64(CRICKET_TOP_MATCH_BOWLER): false,
|
||||
|
||||
// Volleyball Markets
|
||||
int64(VOLLEYBALL_GAME_LINES): false,
|
||||
|
||||
int64(VOLLEYBALL_CORRECT_SET_SCORE): true,
|
||||
int64(VOLLEYBALL_MATCH_TOTAL_ODD_EVEN): true,
|
||||
|
||||
int64(VOLLEYBALL_SET_ONE_LINES): false,
|
||||
int64(VOLLEYBALL_SET_ONE_TO_GO_TO_EXTRA_POINTS): false,
|
||||
int64(VOLLEYBALL_SET_ONE_TOTAL_ODD_EVEN): false,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -708,47 +708,3 @@ func evaluateTiedAfterRegulation(outcome domain.BetOutcome, scores []struct{ Hom
|
|||
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid oddname: %s", outcome.OddName)
|
||||
}
|
||||
|
||||
// Cricket evalations
|
||||
func evaluateInningScore(outcome domain.BetOutcome, score struct{ Home, Away int }) (domain.OutcomeStatus, error) {
|
||||
var inningsScore int
|
||||
if outcome.OddName == "1" {
|
||||
inningsScore = score.Home
|
||||
} else if outcome.OddName == "2" {
|
||||
inningsScore = score.Away
|
||||
} else {
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid odd header: %s", outcome.OddHeader)
|
||||
}
|
||||
|
||||
parts := strings.Fields(outcome.OddHeader)
|
||||
if len(parts) != 2 {
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid odd format: %s", outcome.OddHeader)
|
||||
}
|
||||
|
||||
evalType := parts[0]
|
||||
|
||||
threshold, err := strconv.ParseFloat(parts[1], 64)
|
||||
if err != nil {
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid threshold value: %s", parts[1])
|
||||
}
|
||||
|
||||
switch evalType {
|
||||
case "Over":
|
||||
if float64(inningsScore) > threshold {
|
||||
return domain.OUTCOME_STATUS_WIN, nil
|
||||
}
|
||||
return domain.OUTCOME_STATUS_LOSS, nil
|
||||
case "Under":
|
||||
if float64(inningsScore) < threshold {
|
||||
return domain.OUTCOME_STATUS_WIN, nil
|
||||
}
|
||||
return domain.OUTCOME_STATUS_LOSS, nil
|
||||
case "Exactly":
|
||||
if float64(inningsScore) == threshold {
|
||||
return domain.OUTCOME_STATUS_WIN, nil
|
||||
}
|
||||
return domain.OUTCOME_STATUS_LOSS, nil
|
||||
default:
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid comparison operator: %s", evalType)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,6 +226,12 @@ func (s *Service) fetchResult(ctx context.Context, eventID, oddID, marketID, spo
|
|||
s.logger.Error("Failed to parse cricket", "event id", eventID, "market_id", marketID, "error", err)
|
||||
return domain.CreateResult{}, err
|
||||
}
|
||||
case domain.VOLLEYBALL:
|
||||
result, err = s.parseVolleyball(resultResp.Results[0], eventID, oddID, marketID, outcome)
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to parse cricket", "event id", eventID, "market_id", marketID, "error", err)
|
||||
return domain.CreateResult{}, err
|
||||
}
|
||||
default:
|
||||
s.logger.Error("Unsupported sport", "sport", sportID)
|
||||
return domain.CreateResult{}, fmt.Errorf("unsupported sport: %v", sportID)
|
||||
|
|
@ -271,9 +277,6 @@ func (s *Service) parseFootball(resultRes json.RawMessage, eventID, oddID, marke
|
|||
func (s *Service) parseBasketball(response json.RawMessage, eventID, oddID, marketID int64, outcome domain.BetOutcome) (domain.CreateResult, error) {
|
||||
var basketBallRes domain.BasketballResultResponse
|
||||
|
||||
// TODO: here !!
|
||||
fmt.Println(string(response))
|
||||
|
||||
if err := json.Unmarshal(response, &basketBallRes); err != nil {
|
||||
s.logger.Error("Failed to unmarshal football result", "event_id", eventID, "error", err)
|
||||
return domain.CreateResult{}, err
|
||||
|
|
@ -355,6 +358,34 @@ func (s *Service) parseCricket(response json.RawMessage, eventID, oddID, marketI
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) parseVolleyball(response json.RawMessage, eventID, oddID, marketID int64, outcome domain.BetOutcome) (domain.CreateResult, error) {
|
||||
var volleyballRes domain.VolleyballResultResponse
|
||||
|
||||
if err := json.Unmarshal(response, &volleyballRes); err != nil {
|
||||
s.logger.Error("Failed to unmarshal football result", "event_id", eventID, "error", err)
|
||||
return domain.CreateResult{}, err
|
||||
}
|
||||
if volleyballRes.TimeStatus != "3" {
|
||||
s.logger.Warn("Match not yet completed", "event_id", eventID)
|
||||
return domain.CreateResult{}, fmt.Errorf("match not yet completed")
|
||||
}
|
||||
|
||||
status, err := s.evaluateVolleyballOutcome(outcome, volleyballRes)
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to evaluate outcome", "event_id", eventID, "market_id", marketID, "error", err)
|
||||
return domain.CreateResult{}, err
|
||||
}
|
||||
|
||||
return domain.CreateResult{
|
||||
BetOutcomeID: 0,
|
||||
EventID: eventID,
|
||||
OddID: oddID,
|
||||
MarketID: marketID,
|
||||
Status: status,
|
||||
}, nil
|
||||
|
||||
}
|
||||
|
||||
func parseScore(home string, away string) struct{ Home, Away int } {
|
||||
homeVal, _ := strconv.Atoi(strings.TrimSpace(home))
|
||||
awaVal, _ := strconv.Atoi(strings.TrimSpace(away))
|
||||
|
|
@ -537,10 +568,26 @@ func (s *Service) evaluateCricketOutcome(outcome domain.BetOutcome, res domain.C
|
|||
switch outcome.MarketID {
|
||||
case int64(domain.CRICKET_TO_WIN_THE_MATCH):
|
||||
return evaluateFullTimeResult(outcome, score)
|
||||
case int64(domain.CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even):
|
||||
return evaluateGoalsOddEven(outcome, score)
|
||||
case int64(domain.CRICKET_FIRST_INNINIGS_SCORE):
|
||||
return evaluateInningScore(outcome, score)
|
||||
}
|
||||
|
||||
return domain.OUTCOME_STATUS_PENDING, nil
|
||||
}
|
||||
|
||||
func (s *Service) evaluateVolleyballOutcome(outcome domain.BetOutcome, res domain.VolleyballResultResponse) (domain.OutcomeStatus, error) {
|
||||
if !domain.SupportedMarkets[outcome.MarketID] {
|
||||
s.logger.Warn("Unsupported market type", "market_name", outcome.MarketName)
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("unsupported market type: %s", outcome.MarketName)
|
||||
}
|
||||
|
||||
score := parseSS(res.SS)
|
||||
|
||||
switch outcome.MarketID {
|
||||
// TODO: new Game Lines for volleyball
|
||||
|
||||
case int64(domain.VOLLEYBALL_CORRECT_SET_SCORE):
|
||||
return evaluateCorrectScore(outcome, score)
|
||||
case int64(domain.VOLLEYBALL_MATCH_TOTAL_ODD_EVEN):
|
||||
return evaluateGoalsOddEven(outcome, score)
|
||||
}
|
||||
|
||||
return domain.OUTCOME_STATUS_PENDING, nil
|
||||
|
|
|
|||
256
q
Normal file
256
q
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
[1mdiff --git a/internal/domain/result.go b/internal/domain/result.go[m
|
||||
[1mindex e43476b..def8719 100644[m
|
||||
[1m--- a/internal/domain/result.go[m
|
||||
[1m+++ b/internal/domain/result.go[m
|
||||
[36m@@ -210,6 +210,45 @@[m [mtype CricketResultResponse struct {[m
|
||||
Bet365ID string `json:"bet365_id"`[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32mtype VolleyballResultResponse struct {[m
|
||||
[32m+[m [32mID string `json:"id"`[m
|
||||
[32m+[m [32mSportID string `json:"sport_id"`[m
|
||||
[32m+[m [32mTime string `json:"time"`[m
|
||||
[32m+[m [32mTimeStatus string `json:"time_status"`[m
|
||||
[32m+[m [32mLeague struct {[m
|
||||
[32m+[m [32mID string `json:"id"`[m
|
||||
[32m+[m [32mName string `json:"name"`[m
|
||||
[32m+[m [32mCC string `json:"cc"`[m
|
||||
[32m+[m [32m} `json:"league"`[m
|
||||
[32m+[m [32mHome struct {[m
|
||||
[32m+[m [32mID string `json:"id"`[m
|
||||
[32m+[m [32mName string `json:"name"`[m
|
||||
[32m+[m [32mImageID string `json:"image_id"`[m
|
||||
[32m+[m [32mCC string `json:"cc"`[m
|
||||
[32m+[m [32m} `json:"home"`[m
|
||||
[32m+[m [32mAway struct {[m
|
||||
[32m+[m [32mID string `json:"id"`[m
|
||||
[32m+[m [32mName string `json:"name"`[m
|
||||
[32m+[m [32mImageID string `json:"image_id"`[m
|
||||
[32m+[m [32mCC string `json:"cc"`[m
|
||||
[32m+[m [32m} `json:"away"`[m
|
||||
[32m+[m [32mSS string `json:"ss"`[m
|
||||
[32m+[m [32mScores struct {[m
|
||||
[32m+[m [32mFirstSet Score `json:"1"`[m
|
||||
[32m+[m [32mSecondSet Score `json:"2"`[m
|
||||
[32m+[m [32mThirdSet Score `json:"3"`[m
|
||||
[32m+[m [32mFourthSet Score `json:"4"`[m
|
||||
[32m+[m [32mFivethSet Score `json:"5"`[m
|
||||
[32m+[m [32m} `json:"scores"`[m
|
||||
[32m+[m [32mStats struct {[m
|
||||
[32m+[m [32mPointsWonOnServe []string `json:"points_won_on_serve"`[m
|
||||
[32m+[m [32mLongestStreak []string `json:"longest_streak"`[m
|
||||
[32m+[m [32m} `json:"stats"`[m
|
||||
[32m+[m [32mInplayCreatedAt string `json:"inplay_created_at"`[m
|
||||
[32m+[m [32mInplayUpdatedAt string `json:"inplay_updated_at"`[m
|
||||
[32m+[m [32mBet365ID string `json:"bet365_id"`[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
type Score struct {[m
|
||||
Home string `json:"home"`[m
|
||||
Away string `json:"away"`[m
|
||||
[1mdiff --git a/internal/domain/sportmarket.go b/internal/domain/sportmarket.go[m
|
||||
[1mindex f442f9c..fc25e36 100644[m
|
||||
[1m--- a/internal/domain/sportmarket.go[m
|
||||
[1m+++ b/internal/domain/sportmarket.go[m
|
||||
[36m@@ -114,6 +114,17 @@[m [mconst ([m
|
||||
CRICKET_TOP_MATCH_BOWLER CricketMarket = 30246[m
|
||||
)[m
|
||||
[m
|
||||
[32m+[m[32mtype VolleyballMarket int64[m
|
||||
[32m+[m
|
||||
[32m+[m[32mconst ([m
|
||||
[32m+[m [32mVOLLEYBALL_GAME_LINES VolleyballMarket = 910000[m
|
||||
[32m+[m [32mVOLLEYBALL_CORRECT_SET_SCORE VolleyballMarket = 910201[m
|
||||
[32m+[m [32mVOLLEYBALL_MATCH_TOTAL_ODD_EVEN VolleyballMarket = 910217[m
|
||||
[32m+[m [32mVOLLEYBALL_SET_ONE_LINES VolleyballMarket = 910204[m
|
||||
[32m+[m [32mVOLLEYBALL_SET_ONE_TO_GO_TO_EXTRA_POINTS VolleyballMarket = 910209[m
|
||||
[32m+[m [32mVOLLEYBALL_SET_ONE_TOTAL_ODD_EVEN VolleyballMarket = 910218[m
|
||||
[32m+[m[32m)[m
|
||||
[32m+[m
|
||||
// TODO: Move this into the database so that it can be modified dynamically[m
|
||||
[m
|
||||
var SupportedMarkets = map[int64]bool{[m
|
||||
[36m@@ -189,16 +200,26 @@[m [mvar SupportedMarkets = map[int64]bool{[m
|
||||
int64(ICE_HOCKEY_ALTERNATIVE_TOTAL_TWO_WAY): false,[m
|
||||
[m
|
||||
// Cricket Markets[m
|
||||
[31m- int64(CRICKET_TO_WIN_THE_MATCH): true,[m
|
||||
[31m- int64(CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even): true,[m
|
||||
[31m- int64(CRICKET_FIRST_INNINIGS_SCORE): true,[m
|
||||
[31m-[m
|
||||
[31m- int64(CRICKET_INNINGS_OF_MATCH_BOWLED_OUT): false,[m
|
||||
[31m- int64(CRICKET_FIRST_OVER_TOTAL_RUNS): false,[m
|
||||
[31m- int64(CRICKET_TEAM_TOP_BATTER): false,[m
|
||||
[31m- int64(CRICKET_TEAM_TOP_BOWLE): false,[m
|
||||
[31m- int64(CRICKET_PLAYER_OF_THE_MATCH): false,[m
|
||||
[31m- int64(CRICKET_FIRST_WICKET_METHOD): false,[m
|
||||
[31m- int64(CRICKET_TOP_MATCH_BATTER): false,[m
|
||||
[31m- int64(CRICKET_TOP_MATCH_BOWLER): false,[m
|
||||
[32m+[m [32mint64(CRICKET_TO_WIN_THE_MATCH): true,[m
|
||||
[32m+[m
|
||||
[32m+[m [32mint64(CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even): false,[m
|
||||
[32m+[m [32mint64(CRICKET_FIRST_INNINIGS_SCORE): false,[m
|
||||
[32m+[m [32mint64(CRICKET_INNINGS_OF_MATCH_BOWLED_OUT): false,[m
|
||||
[32m+[m [32mint64(CRICKET_FIRST_OVER_TOTAL_RUNS): false,[m
|
||||
[32m+[m [32mint64(CRICKET_TEAM_TOP_BATTER): false,[m
|
||||
[32m+[m [32mint64(CRICKET_TEAM_TOP_BOWLE): false,[m
|
||||
[32m+[m [32mint64(CRICKET_PLAYER_OF_THE_MATCH): false,[m
|
||||
[32m+[m [32mint64(CRICKET_FIRST_WICKET_METHOD): false,[m
|
||||
[32m+[m [32mint64(CRICKET_TOP_MATCH_BATTER): false,[m
|
||||
[32m+[m [32mint64(CRICKET_TOP_MATCH_BOWLER): false,[m
|
||||
[32m+[m
|
||||
[32m+[m [32m// Volleyball Markets[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_GAME_LINES): false,[m
|
||||
[32m+[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_CORRECT_SET_SCORE): true,[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_MATCH_TOTAL_ODD_EVEN): true,[m
|
||||
[32m+[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_SET_ONE_LINES): false,[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_SET_ONE_TO_GO_TO_EXTRA_POINTS): false,[m
|
||||
[32m+[m [32mint64(VOLLEYBALL_SET_ONE_TOTAL_ODD_EVEN): false,[m
|
||||
}[m
|
||||
[1mdiff --git a/internal/services/result/eval.go b/internal/services/result/eval.go[m
|
||||
[1mindex 8c21390..5d7cd66 100644[m
|
||||
[1m--- a/internal/services/result/eval.go[m
|
||||
[1m+++ b/internal/services/result/eval.go[m
|
||||
[36m@@ -708,47 +708,3 @@[m [mfunc evaluateTiedAfterRegulation(outcome domain.BetOutcome, scores []struct{ Hom[m
|
||||
[m
|
||||
return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid oddname: %s", outcome.OddName)[m
|
||||
}[m
|
||||
[31m-[m
|
||||
[31m-// Cricket evalations[m
|
||||
[31m-func evaluateInningScore(outcome domain.BetOutcome, score struct{ Home, Away int }) (domain.OutcomeStatus, error) {[m
|
||||
[31m- var inningsScore int[m
|
||||
[31m- if outcome.OddName == "1" {[m
|
||||
[31m- inningsScore = score.Home[m
|
||||
[31m- } else if outcome.OddName == "2" {[m
|
||||
[31m- inningsScore = score.Away[m
|
||||
[31m- } else {[m
|
||||
[31m- return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid odd header: %s", outcome.OddHeader)[m
|
||||
[31m- }[m
|
||||
[31m-[m
|
||||
[31m- parts := strings.Fields(outcome.OddHeader)[m
|
||||
[31m- if len(parts) != 2 {[m
|
||||
[31m- return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid odd format: %s", outcome.OddHeader)[m
|
||||
[31m- }[m
|
||||
[31m-[m
|
||||
[31m- evalType := parts[0][m
|
||||
[31m-[m
|
||||
[31m- threshold, err := strconv.ParseFloat(parts[1], 64)[m
|
||||
[31m- if err != nil {[m
|
||||
[31m- return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid threshold value: %s", parts[1])[m
|
||||
[31m- }[m
|
||||
[31m-[m
|
||||
[31m- switch evalType {[m
|
||||
[31m- case "Over":[m
|
||||
[31m- if float64(inningsScore) > threshold {[m
|
||||
[31m- return domain.OUTCOME_STATUS_WIN, nil[m
|
||||
[31m- }[m
|
||||
[31m- return domain.OUTCOME_STATUS_LOSS, nil[m
|
||||
[31m- case "Under":[m
|
||||
[31m- if float64(inningsScore) < threshold {[m
|
||||
[31m- return domain.OUTCOME_STATUS_WIN, nil[m
|
||||
[31m- }[m
|
||||
[31m- return domain.OUTCOME_STATUS_LOSS, nil[m
|
||||
[31m- case "Exactly":[m
|
||||
[31m- if float64(inningsScore) == threshold {[m
|
||||
[31m- return domain.OUTCOME_STATUS_WIN, nil[m
|
||||
[31m- }[m
|
||||
[31m- return domain.OUTCOME_STATUS_LOSS, nil[m
|
||||
[31m- default:[m
|
||||
[31m- return domain.OUTCOME_STATUS_PENDING, fmt.Errorf("invalid comparison operator: %s", evalType)[m
|
||||
[31m- }[m
|
||||
[31m-}[m
|
||||
[1mdiff --git a/internal/services/result/service.go b/internal/services/result/service.go[m
|
||||
[1mindex fcbff6b..92886c3 100644[m
|
||||
[1m--- a/internal/services/result/service.go[m
|
||||
[1m+++ b/internal/services/result/service.go[m
|
||||
[36m@@ -226,6 +226,12 @@[m [mfunc (s *Service) fetchResult(ctx context.Context, eventID, oddID, marketID, spo[m
|
||||
s.logger.Error("Failed to parse cricket", "event id", eventID, "market_id", marketID, "error", err)[m
|
||||
return domain.CreateResult{}, err[m
|
||||
}[m
|
||||
[32m+[m [32mcase domain.VOLLEYBALL:[m
|
||||
[32m+[m [32mresult, err = s.parseVolleyball(resultResp.Results[0], eventID, oddID, marketID, outcome)[m
|
||||
[32m+[m [32mif err != nil {[m
|
||||
[32m+[m [32ms.logger.Error("Failed to parse cricket", "event id", eventID, "market_id", marketID, "error", err)[m
|
||||
[32m+[m [32mreturn domain.CreateResult{}, err[m
|
||||
[32m+[m [32m}[m
|
||||
default:[m
|
||||
s.logger.Error("Unsupported sport", "sport", sportID)[m
|
||||
return domain.CreateResult{}, fmt.Errorf("unsupported sport: %v", sportID)[m
|
||||
[36m@@ -271,9 +277,6 @@[m [mfunc (s *Service) parseFootball(resultRes json.RawMessage, eventID, oddID, marke[m
|
||||
func (s *Service) parseBasketball(response json.RawMessage, eventID, oddID, marketID int64, outcome domain.BetOutcome) (domain.CreateResult, error) {[m
|
||||
var basketBallRes domain.BasketballResultResponse[m
|
||||
[m
|
||||
[31m- // TODO: here !![m
|
||||
[31m- fmt.Println(string(response))[m
|
||||
[31m-[m
|
||||
if err := json.Unmarshal(response, &basketBallRes); err != nil {[m
|
||||
s.logger.Error("Failed to unmarshal football result", "event_id", eventID, "error", err)[m
|
||||
return domain.CreateResult{}, err[m
|
||||
[36m@@ -355,6 +358,34 @@[m [mfunc (s *Service) parseCricket(response json.RawMessage, eventID, oddID, marketI[m
|
||||
}, nil[m
|
||||
}[m
|
||||
[m
|
||||
[32m+[m[32mfunc (s *Service) parseVolleyball(response json.RawMessage, eventID, oddID, marketID int64, outcome domain.BetOutcome) (domain.CreateResult, error) {[m
|
||||
[32m+[m [32mvar volleyballRes domain.VolleyballResultResponse[m
|
||||
[32m+[m
|
||||
[32m+[m [32mif err := json.Unmarshal(response, &volleyballRes); err != nil {[m
|
||||
[32m+[m [32ms.logger.Error("Failed to unmarshal football result", "event_id", eventID, "error", err)[m
|
||||
[32m+[m [32mreturn domain.CreateResult{}, err[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m [32mif volleyballRes.TimeStatus != "3" {[m
|
||||
[32m+[m [32ms.logger.Warn("Match not yet completed", "event_id", eventID)[m
|
||||
[32m+[m [32mreturn domain.CreateResult{}, fmt.Errorf("match not yet completed")[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m
|
||||
[32m+[m [32mstatus, err := s.evaluateVolleyballOutcome(outcome, volleyballRes)[m
|
||||
[32m+[m [32mif err != nil {[m
|
||||
[32m+[m [32ms.logger.Error("Failed to evaluate outcome", "event_id", eventID, "market_id", marketID, "error", err)[m
|
||||
[32m+[m [32mreturn domain.CreateResult{}, err[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m
|
||||
[32m+[m [32mreturn domain.CreateResult{[m
|
||||
[32m+[m [32mBetOutcomeID: 0,[m
|
||||
[32m+[m [32mEventID: eventID,[m
|
||||
[32m+[m [32mOddID: oddID,[m
|
||||
[32m+[m [32mMarketID: marketID,[m
|
||||
[32m+[m [32mStatus: status,[m
|
||||
[32m+[m [32m}, nil[m
|
||||
[32m+[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
func parseScore(home string, away string) struct{ Home, Away int } {[m
|
||||
homeVal, _ := strconv.Atoi(strings.TrimSpace(home))[m
|
||||
awaVal, _ := strconv.Atoi(strings.TrimSpace(away))[m
|
||||
[36m@@ -537,10 +568,27 @@[m [mfunc (s *Service) evaluateCricketOutcome(outcome domain.BetOutcome, res domain.C[m
|
||||
switch outcome.MarketID {[m
|
||||
case int64(domain.CRICKET_TO_WIN_THE_MATCH):[m
|
||||
return evaluateFullTimeResult(outcome, score)[m
|
||||
[31m- case int64(domain.CRICKET_FIRST_OVER_TOTAL_RUNS_Odd_Even):[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m
|
||||
[32m+[m [32mreturn domain.OUTCOME_STATUS_PENDING, nil[m
|
||||
[32m+[m[32m}[m
|
||||
[32m+[m
|
||||
[32m+[m[32mfunc (s *Service) evaluateVolleyballOutcome(outcome domain.BetOutcome, res domain.VolleyballResultResponse) (domain.OutcomeStatus, error) {[m
|
||||
[32m+[m [32mif !domain.SupportedMarkets[outcome.MarketID] {[m
|
||||
[32m+[m [32ms.logger.Warn("Unsupported market type", "market_name", outcome.MarketName)[m
|
||||
[32m+[m [32mreturn domain.OUTCOME_STATUS_PENDING, fmt.Errorf("unsupported market type: %s", outcome.MarketName)[m
|
||||
[32m+[m [32m}[m
|
||||
[32m+[m
|
||||
[32m+[m [32mscore := parseSS(res.SS)[m
|
||||
[32m+[m
|
||||
[32m+[m [32mswitch outcome.MarketID {[m
|
||||
[32m+[m [32m// new Game line since its different from basket ball[m
|
||||
[32m+[m [32mcase int64(domain.VOLLEYBALL_GAME_LINES):[m
|
||||
[32m+[m [32mreturn evaluateGameLines(outcome, score)[m
|
||||
[32m+[m [32mcase int64(domain.VOLLEYBALL_CORRECT_SET_SCORE):[m
|
||||
[32m+[m [32mreturn evaluateCorrectScore(outcome, score)[m
|
||||
[32m+[m [32mcase int64(domain.VOLLEYBALL_MATCH_TOTAL_ODD_EVEN):[m
|
||||
return evaluateGoalsOddEven(outcome, score)[m
|
||||
[31m- case int64(domain.CRICKET_FIRST_INNINIGS_SCORE):[m
|
||||
[31m- return evaluateInningScore(outcome, score)[m
|
||||
}[m
|
||||
[m
|
||||
return domain.OUTCOME_STATUS_PENDING, nil[m
|
||||
Loading…
Reference in New Issue
Block a user