flag abused odd
This commit is contained in:
parent
f63e35fb4e
commit
1c3f575195
|
|
@ -101,6 +101,10 @@ WHERE (event_id = $1)
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM bet_outcomes
|
FROM bet_outcomes
|
||||||
WHERE bet_id = $1;
|
WHERE bet_id = $1;
|
||||||
|
-- name: GetBetOutcomeCountByOddID :one
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM bet_outcomes
|
||||||
|
WHERE odd_id = $1;
|
||||||
-- name: GetBetCountByUserID :one
|
-- name: GetBetCountByUserID :one
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM bets
|
FROM bets
|
||||||
|
|
|
||||||
|
|
@ -410,6 +410,19 @@ func (q *Queries) GetBetOutcomeByEventID(ctx context.Context, arg GetBetOutcomeB
|
||||||
return items, nil
|
return items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const GetBetOutcomeCountByOddID = `-- name: GetBetOutcomeCountByOddID :one
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM bet_outcomes
|
||||||
|
WHERE odd_id = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetBetOutcomeCountByOddID(ctx context.Context, oddID int64) (int64, error) {
|
||||||
|
row := q.db.QueryRow(ctx, GetBetOutcomeCountByOddID, oddID)
|
||||||
|
var count int64
|
||||||
|
err := row.Scan(&count)
|
||||||
|
return count, err
|
||||||
|
}
|
||||||
|
|
||||||
const GetBetsForCashback = `-- name: GetBetsForCashback :many
|
const GetBetsForCashback = `-- name: GetBetsForCashback :many
|
||||||
SELECT id, amount, total_odds, status, user_id, is_shop_bet, cashed_out, outcomes_hash, fast_code, processed, created_at, updated_at, full_name, phone_number, outcomes
|
SELECT id, amount, total_odds, status, user_id, is_shop_bet, cashed_out, outcomes_hash, fast_code, processed, created_at, updated_at, full_name, phone_number, outcomes
|
||||||
FROM bet_with_outcomes
|
FROM bet_with_outcomes
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,15 @@ func (s *Store) GetBetCountByOutcomesHash(ctx context.Context, outcomesHash stri
|
||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Store) GetBetOutcomeCountByOddID(ctx context.Context, oddID int64) (int64, error) {
|
||||||
|
count, err := s.queries.GetBetOutcomeCountByOddID(ctx, oddID)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return count, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Store) UpdateCashOut(ctx context.Context, id int64, cashedOut bool) error {
|
func (s *Store) UpdateCashOut(ctx context.Context, id int64, cashedOut bool) error {
|
||||||
err := s.queries.UpdateCashOut(ctx, dbgen.UpdateCashOutParams{
|
err := s.queries.UpdateCashOut(ctx, dbgen.UpdateCashOutParams{
|
||||||
ID: id,
|
ID: id,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ type BetStore interface {
|
||||||
GetBetByFastCode(ctx context.Context, fastcode string) (domain.GetBet, error)
|
GetBetByFastCode(ctx context.Context, fastcode string) (domain.GetBet, error)
|
||||||
GetBetOutcomeByEventID(ctx context.Context, eventID int64, is_filtered bool) ([]domain.BetOutcome, error)
|
GetBetOutcomeByEventID(ctx context.Context, eventID int64, is_filtered bool) ([]domain.BetOutcome, error)
|
||||||
GetBetOutcomeByBetID(ctx context.Context, betID int64) ([]domain.BetOutcome, error)
|
GetBetOutcomeByBetID(ctx context.Context, betID int64) ([]domain.BetOutcome, error)
|
||||||
|
GetBetOutcomeCountByOddID(ctx context.Context, oddID int64) (int64, error)
|
||||||
GetBetCountByUserID(ctx context.Context, userID int64, outcomesHash string) (int64, error)
|
GetBetCountByUserID(ctx context.Context, userID int64, outcomesHash string) (int64, error)
|
||||||
GetBetCountByOutcomesHash(ctx context.Context, outcomesHash string) (int64, error)
|
GetBetCountByOutcomesHash(ctx context.Context, outcomesHash string) (int64, error)
|
||||||
UpdateCashOut(ctx context.Context, id int64, cashedOut bool) error
|
UpdateCashOut(ctx context.Context, id int64, cashedOut bool) error
|
||||||
|
|
|
||||||
|
|
@ -398,6 +398,36 @@ func (s *Service) PlaceBet(ctx context.Context, req domain.CreateBetReq, userID
|
||||||
return domain.CreateBetRes{}, err
|
return domain.CreateBetRes{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i := range outcomes {
|
||||||
|
// flag odds with large amount of users betting on them
|
||||||
|
count, err := s.betStore.GetBetOutcomeCountByOddID(ctx, outcomes[i].OddID)
|
||||||
|
if err != nil {
|
||||||
|
s.mongoLogger.Error("failed to get count of bet outcome",
|
||||||
|
zap.Int64("bet_id", bet.ID),
|
||||||
|
zap.Int64("odd_id", outcomes[i].OddID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return domain.CreateBetRes{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: fetch cap from settings in db
|
||||||
|
if count > 20 {
|
||||||
|
flag := domain.CreateFlagReq{
|
||||||
|
BetID: 0,
|
||||||
|
OddID: outcomes[i].OddID,
|
||||||
|
Reason: fmt.Sprintf("too many users targeting odd - (%d)", outcomes[i].OddID),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := s.betStore.CreateFlag(ctx, flag)
|
||||||
|
if err != nil {
|
||||||
|
s.mongoLogger.Error("failed to create flag for bet",
|
||||||
|
zap.Int64("bet_id", bet.ID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// flag bets that have more than three outcomes
|
// flag bets that have more than three outcomes
|
||||||
if len(outcomes) > 3 {
|
if len(outcomes) > 3 {
|
||||||
flag := domain.CreateFlagReq{
|
flag := domain.CreateFlagReq{
|
||||||
|
|
@ -425,9 +455,7 @@ func (s *Service) PlaceBet(ctx context.Context, req domain.CreateBetReq, userID
|
||||||
return domain.CreateBetRes{}, err
|
return domain.CreateBetRes{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("total bet count: ", total_bet_count)
|
if total_bet_count > 10 {
|
||||||
|
|
||||||
if total_bet_count > 3 {
|
|
||||||
flag := domain.CreateFlagReq{
|
flag := domain.CreateFlagReq{
|
||||||
BetID: bet.ID,
|
BetID: bet.ID,
|
||||||
OddID: 0,
|
OddID: 0,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user