# frozen_string_literal: true # encoding: utf-8 # Options: =begin Date: 2026-11-07 04:01:07 Version: 10.42 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://s4w2.api.bettor.webhop.biz #MakePartial: True #MakeVirtual: True #MakeInternal: False #MakeDataContractsExtensible: False #AddReturnMarker: True #AddDescriptionAsComments: True #AddDataContractAttributes: False #AddIndexesToDataMembers: False #AddGeneratedCodeAttributes: False #AddResponseStatus: False #AddImplicitVersion: #InitializeCollections: False #ExportValueTypes: False IncludeTypes: GetDrawDignostics.* #ExcludeTypes: #AddNamespaces: #AddDefaultXmlNamespace: http://schemas.servicestack.net/types =end require 'json' require 'servicestack' module LocationOptimizationLevel NONE = 0 LOW = 1 MEDIUM = 2 HIGH = 3 end module SortingOrder NONE = 0 ASCENDING = 1 DESCENDING = 2 end module StakeCategory PICKEREL = 0 FISH = 1 SALMON = 2 TUNA = 3 SHARK = 4 WHALE = 5 NONE = -1 end module ResponseStatus FAILURE = 0 SUCCESS = 1 end module SyphonType LOCATION = 0 BETTOR = 1 end module IReturn def response_type() = T def get_type_name() = 'IReturn' end class Ref include ServiceStack::DTO # @return [String] attr_accessor :id # @return [String] attr_accessor :val def self.properties { id: { name: 'id' }, val: { name: 'val' }, } end end class BettingApp include ServiceStack::DTO # @return [String] attr_accessor :name # @return [String] attr_accessor :version def self.properties { name: { name: 'name' }, version: { name: 'version' }, } end end class RefEx < Ref # @return [RecordDictionary] attr_accessor :data def self.properties { data: { name: 'data', type: RecordDictionary }, } end end class Origin include ServiceStack::DTO # @return [BettingApp] attr_accessor :application # @return [String] attr_accessor :ip # @return [RefEx] attr_accessor :organization # @return [Ref] attr_accessor :region # @return [Ref] attr_accessor :location_group # @return [RefEx] attr_accessor :location # @return [RefEx] attr_accessor :device # @return [Ref] attr_accessor :clerk def self.properties { application: { name: 'application', type: BettingApp }, ip: { name: 'ip' }, organization: { name: 'organization', type: RefEx }, region: { name: 'region', type: Ref }, location_group: { name: 'locationGroup', type: Ref }, location: { name: 'location', type: RefEx }, device: { name: 'device', type: RefEx }, clerk: { name: 'clerk', type: Ref }, } end end class Bet include ServiceStack::DTO # @return [String] attr_accessor :id # @return [Integer] attr_accessor :ordinal_of_available_round_to_assign_to # @return [String] attr_accessor :content # @return [BigDecimal] attr_accessor :stake # @return [Dictionary] attr_accessor :payload def self.properties { id: { name: 'id' }, ordinal_of_available_round_to_assign_to: { name: 'ordinalOfAvailableRoundToAssignTo' }, content: { name: 'content' }, stake: { name: 'stake' }, payload: { name: 'payload' }, } end end class Pool include ServiceStack::DTO # @return [Integer] attr_accessor :id # @return [String] attr_accessor :name # @return [BigDecimal] attr_accessor :treshold def self.properties { id: { name: 'id' }, name: { name: 'name' }, treshold: { name: 'treshold' }, } end end class ThresholdInterval include ServiceStack::DTO # @return [BigDecimal] attr_accessor :start # @return [BigDecimal] attr_accessor :end def self.properties { start: { name: 'start' }, end: { name: 'end' }, } end end class WinCountOrderProbability include ServiceStack::DTO # @return [SortingOrder] attr_accessor :order # @return [Integer] attr_accessor :probability def self.properties { order: { name: 'order' }, probability: { name: 'probability' }, } end end class PoolCaps include ServiceStack::DTO # @return [BigDecimal] attr_accessor :plus_coef # @return [BigDecimal] attr_accessor :minus_coef # @return [BigDecimal] attr_accessor :max_amount_in_prevalent_stakes def self.properties { plus_coef: { name: 'plusCoef' }, minus_coef: { name: 'minusCoef' }, max_amount_in_prevalent_stakes: { name: 'maxAmountInPrevalentStakes' }, } end end class PoolSettings include ServiceStack::DTO # @return [Integer] attr_accessor :id # @return [String] attr_accessor :name # @return [TrueClass] attr_accessor :is_active # @return [BigDecimal] attr_accessor :contribution_to_round_pool_pct # @return [PoolCaps] attr_accessor :caps def self.properties { id: { name: 'id' }, name: { name: 'name' }, is_active: { name: 'isActive' }, contribution_to_round_pool_pct: { name: 'contributionToRoundPoolPct' }, caps: { name: 'caps', type: PoolCaps }, } end end class CategoryThreshold include ServiceStack::DTO # @return [StakeCategory] attr_accessor :category # @return [BigDecimal] attr_accessor :threshold def self.properties { category: { name: 'category' }, threshold: { name: 'threshold' }, } end end class HighRollerSettings include ServiceStack::DTO # @return [RecordList] attr_accessor :pools # @return [RecordList] attr_accessor :category_thresholds def self.properties { pools: { name: 'pools', type: RecordList }, category_thresholds: { name: 'categoryThresholds', type: RecordList }, } end end class SyphonBlacklists include ServiceStack::DTO # @return [RecordList] attr_accessor :locations # @return [RecordList] attr_accessor :players def self.properties { locations: { name: 'locations', type: RecordList }, players: { name: 'players', type: RecordList }, } end end class AntiSyphonConfig include ServiceStack::DTO # @return [BigDecimal] attr_accessor :combination_count_per_round_threshold_pct # @return [RecordList] attr_accessor :excluded_locations # @return [SyphonBlacklists] attr_accessor :blacklists # @return [TrueClass] attr_accessor :include_round_pct_as_bettor_syphon_criteria # @return [TrueClass] attr_accessor :is_active def self.properties { combination_count_per_round_threshold_pct: { name: 'combinationCountPerRoundThresholdPct' }, excluded_locations: { name: 'excludedLocations', type: RecordList }, blacklists: { name: 'blacklists', type: SyphonBlacklists }, include_round_pct_as_bettor_syphon_criteria: { name: 'includeRoundPctAsBettorSyphonCriteria' }, is_active: { name: 'isActive' }, } end end class FraudDetectionConfiguration include ServiceStack::DTO # @return [AntiSyphonConfig] attr_accessor :anti_syphon def self.properties { anti_syphon: { name: 'antiSyphon', type: AntiSyphonConfig }, } end end class DebugConfiguration include ServiceStack::DTO # @return [TrueClass] attr_accessor :log_location_stats # @return [TrueClass] attr_accessor :log_bettor_stats def self.properties { log_location_stats: { name: 'logLocationStats' }, log_bettor_stats: { name: 'logBettorStats' }, } end end class JP5WinnerCooldownPolicyConfig include ServiceStack::DTO # @return [TrueClass] attr_accessor :is_active # @return [Integer] attr_accessor :cooldown_interval_in_days def self.properties { is_active: { name: 'isActive' }, cooldown_interval_in_days: { name: 'cooldownIntervalInDays' }, } end end class AccumulatorConfiguration include ServiceStack::DTO # @return [RecordList] attr_accessor :pools # @return [BigDecimal] attr_accessor :prevalent_stake # @return [BigDecimal] attr_accessor :purge_threshold_modifier # @return [LocationOptimizationLevel] attr_accessor :location_optimization_level # @return [ThresholdInterval] attr_accessor :jack_pot5_threshold_interval # @return [Integer] attr_accessor :deviation_category_span_in_pct # @return [BigDecimal] attr_accessor :deviation_category_threshold_amount # @return [BigDecimal] attr_accessor :round_pool_circuit_breaker_threshold # @return [Integer] attr_accessor :low_win_count_affinity_in_pct # @return [RecordList] attr_accessor :win_count_order_affinity # @return [HighRollerSettings] attr_accessor :high_roller_settings # @return [TrueClass] attr_accessor :overflow_coefficient_pools_to_round # @return [TrueClass] attr_accessor :anti_syphon_protection_override # @return [FraudDetectionConfiguration] attr_accessor :fraud_detection_config # @return [DebugConfiguration] attr_accessor :debug_config # @return [JP5WinnerCooldownPolicyConfig] attr_accessor :j_p5_winner_cooldown_policy def self.properties { pools: { name: 'pools', type: RecordList }, prevalent_stake: { name: 'prevalentStake' }, purge_threshold_modifier: { name: 'purgeThresholdModifier' }, location_optimization_level: { name: 'locationOptimizationLevel' }, jack_pot5_threshold_interval: { name: 'jackPot5ThresholdInterval', type: ThresholdInterval }, deviation_category_span_in_pct: { name: 'deviationCategorySpanInPct' }, deviation_category_threshold_amount: { name: 'deviationCategoryThresholdAmount' }, round_pool_circuit_breaker_threshold: { name: 'roundPoolCircuitBreakerThreshold' }, low_win_count_affinity_in_pct: { name: 'lowWinCountAffinityInPct' }, win_count_order_affinity: { name: 'winCountOrderAffinity', type: RecordList }, high_roller_settings: { name: 'highRollerSettings', type: HighRollerSettings }, overflow_coefficient_pools_to_round: { name: 'overflowCoefficientPoolsToRound' }, anti_syphon_protection_override: { name: 'antiSyphonProtectionOverride' }, fraud_detection_config: { name: 'fraudDetectionConfig', type: FraudDetectionConfiguration }, debug_config: { name: 'debugConfig', type: DebugConfiguration }, j_p5_winner_cooldown_policy: { name: 'jP5WinnerCooldownPolicy', type: JP5WinnerCooldownPolicyConfig }, } end end class RecordDictionary < Hash end class Pool include ServiceStack::DTO # @return [Integer] attr_accessor :id # @return [String] attr_accessor :name # @return [BigDecimal] attr_accessor :coefficient # @return [BigDecimal] attr_accessor :rtp # @return [BigDecimal] attr_accessor :threshold # @return [BigDecimal] attr_accessor :balance # @return [BigDecimal] attr_accessor :rrtp # @return [BigDecimal] attr_accessor :r_balance def self.properties { id: { name: 'id' }, name: { name: 'name' }, coefficient: { name: 'coefficient' }, rtp: { name: 'rtp' }, threshold: { name: 'threshold' }, balance: { name: 'balance' }, rrtp: { name: 'rrtp' }, r_balance: { name: 'rBalance' }, } end end class Bet include ServiceStack::DTO # @return [String] attr_accessor :id # @return [String] attr_accessor :slip_id # @return [Ref] attr_accessor :bettor # @return [Origin] attr_accessor :origin # @return [DateTime] attr_accessor :placed_at # @return [String] attr_accessor :round_id # @return [String] attr_accessor :content # @return [BigDecimal] attr_accessor :stake # @return [BetOutcome] attr_accessor :outcome # @return [BigDecimal] attr_accessor :win # @return [BetProcessingStatus] attr_accessor :processing_status # @return [BetValidity] attr_accessor :validity # @return [Dictionary] attr_accessor :results # @return [Dictionary] attr_accessor :payload def self.properties { id: { name: 'id' }, slip_id: { name: 'slipId' }, bettor: { name: 'bettor', type: Ref }, origin: { name: 'origin', type: Origin }, placed_at: { name: 'placedAt', type: DateTime }, round_id: { name: 'roundId' }, content: { name: 'content' }, stake: { name: 'stake' }, outcome: { name: 'outcome' }, win: { name: 'win' }, processing_status: { name: 'processingStatus' }, validity: { name: 'validity' }, results: { name: 'results' }, payload: { name: 'payload' }, } end end class RecordList < Array end class Pool include ServiceStack::DTO # @return [Integer] attr_accessor :id # @return [String] attr_accessor :name # @return [BigDecimal] attr_accessor :rtp # @return [BigDecimal] attr_accessor :reserve_r_t_p # @return [BigDecimal] attr_accessor :total_r_t_p def self.properties { id: { name: 'id' }, name: { name: 'name' }, rtp: { name: 'rtp' }, reserve_r_t_p: { name: 'reserveRTP' }, total_r_t_p: { name: 'totalRTP' }, } end end class SuperWinInfo include ServiceStack::DTO # @return [TrueClass] attr_accessor :is_active # @return [SuperWinWinner] attr_accessor :winner # @return [BigDecimal] attr_accessor :available_amount # @return [TrueClass] attr_accessor :all_prizes_awarded def self.properties { is_active: { name: 'isActive' }, winner: { name: 'winner' }, available_amount: { name: 'availableAmount' }, all_prizes_awarded: { name: 'allPrizesAwarded' }, } end end class CurrentRoundInfo include ServiceStack::DTO # @return [String] attr_accessor :round_id # @return [BigDecimal] attr_accessor :amount # @return [String] attr_accessor :inert_code def self.properties { round_id: { name: 'roundId' }, amount: { name: 'amount' }, inert_code: { name: 'inertCode' }, } end end class WinnerByCode include ServiceStack::DTO # @return [String] attr_accessor :round_id # @return [DateTime] attr_accessor :drawn_at_utc # @return [String] attr_accessor :slip_id # @return [String] attr_accessor :bet_id # @return [String] attr_accessor :code # @return [BigDecimal] attr_accessor :amount # @return [Origin] attr_accessor :origin # @return [Ref] attr_accessor :bettor # @return [String] attr_accessor :location_address_or_bettor_info def self.properties { round_id: { name: 'roundId' }, drawn_at_utc: { name: 'drawnAtUtc', type: DateTime }, slip_id: { name: 'slipId' }, bet_id: { name: 'betId' }, code: { name: 'code' }, amount: { name: 'amount' }, origin: { name: 'origin', type: Origin }, bettor: { name: 'bettor', type: Ref }, location_address_or_bettor_info: { name: 'locationAddressOrBettorInfo' }, } end end class LocalCodePotInfo include ServiceStack::DTO # @return [TrueClass] attr_accessor :is_active # @return [CurrentRoundInfo] attr_accessor :current # @return [List] attr_accessor :winners def self.properties { is_active: { name: 'isActive' }, current: { name: 'current', type: CurrentRoundInfo }, winners: { name: 'winners', type: [WinnerByCode] }, } end end class Initialization include ServiceStack::DTO # @return [Integer] attr_accessor :data_load_duration # @return [Integer] attr_accessor :bets_collections_creation_duration # @return [Integer] attr_accessor :combinations_occurance_lookup_initialization_duration def self.properties { data_load_duration: { name: 'dataLoadDuration' }, bets_collections_creation_duration: { name: 'betsCollectionsCreationDuration' }, combinations_occurance_lookup_initialization_duration: { name: 'combinationsOccuranceLookupInitializationDuration' }, } end end class SequenceGeneration include ServiceStack::DTO # @return [Integer] attr_accessor :nr_of_threads # @return [Integer] attr_accessor :nr_of_results_probed # @return [Integer] attr_accessor :duration # @return [Integer] attr_accessor :avg_single_pass_duration def self.properties { nr_of_threads: { name: 'nrOfThreads' }, nr_of_results_probed: { name: 'nrOfResultsProbed' }, duration: { name: 'duration' }, avg_single_pass_duration: { name: 'avgSinglePassDuration' }, } end end class BestFitFinder include ServiceStack::DTO # @return [BigDecimal] attr_accessor :target_amount # @return [BigDecimal] attr_accessor :awarded_amount # @return [BigDecimal] attr_accessor :deviation # @return [BigDecimal] attr_accessor :deviation_pct # @return [String] attr_accessor :sequence_result_type # @return [TrueClass] attr_accessor :is_jack_pot5_drawn # @return [Integer] attr_accessor :filtering_period # @return [SortingOrder] attr_accessor :win_count_order # @return [BigDecimal] attr_accessor :min_amount # @return [BigDecimal] attr_accessor :max_amount def self.properties { target_amount: { name: 'targetAmount' }, awarded_amount: { name: 'awardedAmount' }, deviation: { name: 'deviation' }, deviation_pct: { name: 'deviationPct' }, sequence_result_type: { name: 'sequenceResultType' }, is_jack_pot5_drawn: { name: 'isJackPot5Drawn' }, filtering_period: { name: 'filteringPeriod' }, win_count_order: { name: 'winCountOrder' }, min_amount: { name: 'minAmount' }, max_amount: { name: 'maxAmount' }, } end end class QualifiedPool include ServiceStack::DTO # @return [Integer] attr_accessor :id # @return [String] attr_accessor :name # @return [BigDecimal] attr_accessor :coefficient # @return [BigDecimal] attr_accessor :available_amount # @return [BigDecimal] attr_accessor :awarded_amount # @return [Bet] attr_accessor :target_bet def self.properties { id: { name: 'id' }, name: { name: 'name' }, coefficient: { name: 'coefficient' }, available_amount: { name: 'availableAmount' }, awarded_amount: { name: 'awardedAmount' }, target_bet: { name: 'targetBet', type: Bet }, } end end class Purger include ServiceStack::DTO # @return [BigDecimal] attr_accessor :prevalent_stake # @return [String] attr_accessor :pool_purger # @return [List] attr_accessor :qualified_pools def self.properties { prevalent_stake: { name: 'prevalentStake' }, pool_purger: { name: 'poolPurger' }, qualified_pools: { name: 'qualifiedPools', type: [QualifiedPool] }, } end end class StimulationResponse include ServiceStack::DTO # @return [String] attr_accessor :stimulation_id # @return [ResponseStatus] attr_accessor :status # @return [String] attr_accessor :failure_reason # @return [String] attr_accessor :slip_id # @return [String] attr_accessor :bet_id # @return [BigDecimal] attr_accessor :amount_awarded def self.properties { stimulation_id: { name: 'stimulationId' }, status: { name: 'status' }, failure_reason: { name: 'failureReason' }, slip_id: { name: 'slipId' }, bet_id: { name: 'betId' }, amount_awarded: { name: 'amountAwarded' }, } end end class SuperWinInfo include ServiceStack::DTO # @return [Integer] attr_accessor :duration_in_ms # @return [String] attr_accessor :reasoning def self.properties { duration_in_ms: { name: 'durationInMs' }, reasoning: { name: 'reasoning' }, } end end class HappyHourInfo include ServiceStack::DTO # @return [TrueClass] attr_accessor :is_happy_hour # @return [BigDecimal] attr_accessor :odds_modifier # @return [BigDecimal] attr_accessor :round_pool_bonus_pct def self.properties { is_happy_hour: { name: 'isHappyHour' }, odds_modifier: { name: 'oddsModifier' }, round_pool_bonus_pct: { name: 'roundPoolBonusPct' }, } end end class Syphon include ServiceStack::DTO # @return [String] attr_accessor :id # @return [String] attr_accessor :name # @return [SyphonType] attr_accessor :type # @return [Integer] attr_accessor :nr_of_combinations def self.properties { id: { name: 'id' }, name: { name: 'name' }, type: { name: 'type' }, nr_of_combinations: { name: 'nrOfCombinations' }, } end end class SyphonInfo include ServiceStack::DTO # @return [Dictionary] attr_accessor :bettors # @return [Dictionary] attr_accessor :locations # @return [TrueClass] attr_accessor :has_syphons # @return [Integer] attr_accessor :total_syphons_in_round def self.properties { bettors: { name: 'bettors', type: { String => Syphon } }, locations: { name: 'locations', type: { String => Syphon } }, has_syphons: { name: 'hasSyphons' }, total_syphons_in_round: { name: 'totalSyphonsInRound' }, } end end class Bet include ServiceStack::DTO # @return [TrueClass] attr_accessor :is_found # @return [String] attr_accessor :bet_id # @return [String] attr_accessor :slip_id # @return [Object] attr_accessor :comb_stake def self.properties { is_found: { name: 'isFound' }, bet_id: { name: 'betId' }, slip_id: { name: 'slipId' }, comb_stake: { name: 'combStake' }, } end end class DrawDiagnostics include ServiceStack::DTO # @return [String] attr_accessor :id # @return [Initialization] attr_accessor :initialization_info # @return [SequenceGeneration] attr_accessor :sequence_generation_info # @return [BestFitFinder] attr_accessor :best_fit_finder_info # @return [Purger] attr_accessor :purger_info # @return [Integer] attr_accessor :duration # @return [List] attr_accessor :stimulation_responses # @return [LocalCodePotInfo] attr_accessor :local_code_pot # @return [SuperWinInfo] attr_accessor :super_win # @return [HappyHourInfo] attr_accessor :happy_hour # @return [String] attr_accessor :reasoning # @return [AccumulatorConfiguration] attr_accessor :configuration # @return [SyphonInfo] attr_accessor :syphon_info def self.properties { id: { name: 'id' }, initialization_info: { name: 'initializationInfo', type: Initialization }, sequence_generation_info: { name: 'sequenceGenerationInfo', type: SequenceGeneration }, best_fit_finder_info: { name: 'bestFitFinderInfo', type: BestFitFinder }, purger_info: { name: 'purgerInfo', type: Purger }, duration: { name: 'duration' }, stimulation_responses: { name: 'stimulationResponses', type: [StimulationResponse] }, local_code_pot: { name: 'localCodePot', type: LocalCodePotInfo }, super_win: { name: 'superWin', type: SuperWinInfo }, happy_hour: { name: 'happyHour', type: HappyHourInfo }, reasoning: { name: 'reasoning' }, configuration: { name: 'configuration', type: AccumulatorConfiguration }, syphon_info: { name: 'syphonInfo', type: SyphonInfo }, } end end # @Route("/qry/rounds/draw/diagnostics") class GetDrawDignostics include ServiceStack::DTO # @return [String] attr_accessor :id def self.properties { id: { name: 'id' }, } end def response_type() = DrawDiagnostics def get_type_name() = 'GetDrawDignostics' def get_method() = 'POST' end