Six4Win.WebApi

<back to all web services

GetDrawDignostics

The following routes are available for this service:
All Verbs/qry/rounds/draw/diagnostics
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


class Initialization implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $dataLoadDuration=0,
        /** @var int */
        public int $betsCollectionsCreationDuration=0,
        /** @var int */
        public int $combinationsOccuranceLookupInitializationDuration=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['dataLoadDuration'])) $this->dataLoadDuration = $o['dataLoadDuration'];
        if (isset($o['betsCollectionsCreationDuration'])) $this->betsCollectionsCreationDuration = $o['betsCollectionsCreationDuration'];
        if (isset($o['combinationsOccuranceLookupInitializationDuration'])) $this->combinationsOccuranceLookupInitializationDuration = $o['combinationsOccuranceLookupInitializationDuration'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->dataLoadDuration)) $o['dataLoadDuration'] = $this->dataLoadDuration;
        if (isset($this->betsCollectionsCreationDuration)) $o['betsCollectionsCreationDuration'] = $this->betsCollectionsCreationDuration;
        if (isset($this->combinationsOccuranceLookupInitializationDuration)) $o['combinationsOccuranceLookupInitializationDuration'] = $this->combinationsOccuranceLookupInitializationDuration;
        return empty($o) ? new class(){} : $o;
    }
}

class SequenceGeneration implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $nrOfThreads=0,
        /** @var int */
        public int $nrOfResultsProbed=0,
        /** @var int */
        public int $duration=0,
        /** @var int */
        public int $avgSinglePassDuration=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['nrOfThreads'])) $this->nrOfThreads = $o['nrOfThreads'];
        if (isset($o['nrOfResultsProbed'])) $this->nrOfResultsProbed = $o['nrOfResultsProbed'];
        if (isset($o['duration'])) $this->duration = $o['duration'];
        if (isset($o['avgSinglePassDuration'])) $this->avgSinglePassDuration = $o['avgSinglePassDuration'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->nrOfThreads)) $o['nrOfThreads'] = $this->nrOfThreads;
        if (isset($this->nrOfResultsProbed)) $o['nrOfResultsProbed'] = $this->nrOfResultsProbed;
        if (isset($this->duration)) $o['duration'] = $this->duration;
        if (isset($this->avgSinglePassDuration)) $o['avgSinglePassDuration'] = $this->avgSinglePassDuration;
        return empty($o) ? new class(){} : $o;
    }
}

enum SortingOrder : int
{
    case None = 0;
    case Ascending = 1;
    case Descending = 2;
}

class BestFitFinder implements JsonSerializable
{
    public function __construct(
        /** @var float */
        public float $targetAmount=0.0,
        /** @var float */
        public float $awardedAmount=0.0,
        /** @var float */
        public float $deviation=0.0,
        /** @var float */
        public float $deviationPct=0.0,
        /** @var string|null */
        public ?string $sequenceResultType=null,
        /** @var bool|null */
        public ?bool $isJackPot5Drawn=null,
        /** @var int */
        public int $filteringPeriod=0,
        /** @var SortingOrder|null */
        public ?SortingOrder $winCountOrder=null,
        /** @var float */
        public float $minAmount=0.0,
        /** @var float */
        public float $maxAmount=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['targetAmount'])) $this->targetAmount = $o['targetAmount'];
        if (isset($o['awardedAmount'])) $this->awardedAmount = $o['awardedAmount'];
        if (isset($o['deviation'])) $this->deviation = $o['deviation'];
        if (isset($o['deviationPct'])) $this->deviationPct = $o['deviationPct'];
        if (isset($o['sequenceResultType'])) $this->sequenceResultType = $o['sequenceResultType'];
        if (isset($o['isJackPot5Drawn'])) $this->isJackPot5Drawn = $o['isJackPot5Drawn'];
        if (isset($o['filteringPeriod'])) $this->filteringPeriod = $o['filteringPeriod'];
        if (isset($o['winCountOrder'])) $this->winCountOrder = JsonConverters::from('SortingOrder', $o['winCountOrder']);
        if (isset($o['minAmount'])) $this->minAmount = $o['minAmount'];
        if (isset($o['maxAmount'])) $this->maxAmount = $o['maxAmount'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->targetAmount)) $o['targetAmount'] = $this->targetAmount;
        if (isset($this->awardedAmount)) $o['awardedAmount'] = $this->awardedAmount;
        if (isset($this->deviation)) $o['deviation'] = $this->deviation;
        if (isset($this->deviationPct)) $o['deviationPct'] = $this->deviationPct;
        if (isset($this->sequenceResultType)) $o['sequenceResultType'] = $this->sequenceResultType;
        if (isset($this->isJackPot5Drawn)) $o['isJackPot5Drawn'] = $this->isJackPot5Drawn;
        if (isset($this->filteringPeriod)) $o['filteringPeriod'] = $this->filteringPeriod;
        if (isset($this->winCountOrder)) $o['winCountOrder'] = JsonConverters::to('SortingOrder', $this->winCountOrder);
        if (isset($this->minAmount)) $o['minAmount'] = $this->minAmount;
        if (isset($this->maxAmount)) $o['maxAmount'] = $this->maxAmount;
        return empty($o) ? new class(){} : $o;
    }
}

class Bet implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isFound=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var string|null */
        public ?string $slipId=null,
        /** @var Object|null */
        public ?Object $combStake=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['isFound'])) $this->isFound = $o['isFound'];
        if (isset($o['betId'])) $this->betId = $o['betId'];
        if (isset($o['slipId'])) $this->slipId = $o['slipId'];
        if (isset($o['combStake'])) $this->combStake = JsonConverters::from('Object', $o['combStake']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->isFound)) $o['isFound'] = $this->isFound;
        if (isset($this->betId)) $o['betId'] = $this->betId;
        if (isset($this->slipId)) $o['slipId'] = $this->slipId;
        if (isset($this->combStake)) $o['combStake'] = JsonConverters::to('Object', $this->combStake);
        return empty($o) ? new class(){} : $o;
    }
}

class QualifiedPool implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $id=0,
        /** @var string|null */
        public ?string $name=null,
        /** @var float */
        public float $coefficient=0.0,
        /** @var float */
        public float $availableAmount=0.0,
        /** @var float */
        public float $awardedAmount=0.0,
        /** @var Bet|null */
        public ?Bet $targetBet=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['coefficient'])) $this->coefficient = $o['coefficient'];
        if (isset($o['availableAmount'])) $this->availableAmount = $o['availableAmount'];
        if (isset($o['awardedAmount'])) $this->awardedAmount = $o['awardedAmount'];
        if (isset($o['targetBet'])) $this->targetBet = JsonConverters::from('Bet', $o['targetBet']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->coefficient)) $o['coefficient'] = $this->coefficient;
        if (isset($this->availableAmount)) $o['availableAmount'] = $this->availableAmount;
        if (isset($this->awardedAmount)) $o['awardedAmount'] = $this->awardedAmount;
        if (isset($this->targetBet)) $o['targetBet'] = JsonConverters::to('Bet', $this->targetBet);
        return empty($o) ? new class(){} : $o;
    }
}

class Purger implements JsonSerializable
{
    public function __construct(
        /** @var float */
        public float $prevalentStake=0.0,
        /** @var string|null */
        public ?string $poolPurger=null,
        /** @var array<QualifiedPool>|null */
        public ?array $qualifiedPools=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['prevalentStake'])) $this->prevalentStake = $o['prevalentStake'];
        if (isset($o['poolPurger'])) $this->poolPurger = $o['poolPurger'];
        if (isset($o['qualifiedPools'])) $this->qualifiedPools = JsonConverters::fromArray('QualifiedPool', $o['qualifiedPools']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->prevalentStake)) $o['prevalentStake'] = $this->prevalentStake;
        if (isset($this->poolPurger)) $o['poolPurger'] = $this->poolPurger;
        if (isset($this->qualifiedPools)) $o['qualifiedPools'] = JsonConverters::toArray('QualifiedPool', $this->qualifiedPools);
        return empty($o) ? new class(){} : $o;
    }
}

enum ResponseStatus : int
{
    case Failure = 0;
    case Success = 1;
}

class StimulationResponse implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $stimulationId=null,
        /** @var ResponseStatus|null */
        public ?ResponseStatus $status=null,
        /** @var string|null */
        public ?string $failureReason=null,
        /** @var string|null */
        public ?string $slipId=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var float */
        public float $amountAwarded=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['stimulationId'])) $this->stimulationId = $o['stimulationId'];
        if (isset($o['status'])) $this->status = JsonConverters::from('ResponseStatus', $o['status']);
        if (isset($o['failureReason'])) $this->failureReason = $o['failureReason'];
        if (isset($o['slipId'])) $this->slipId = $o['slipId'];
        if (isset($o['betId'])) $this->betId = $o['betId'];
        if (isset($o['amountAwarded'])) $this->amountAwarded = $o['amountAwarded'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->stimulationId)) $o['stimulationId'] = $this->stimulationId;
        if (isset($this->status)) $o['status'] = JsonConverters::to('ResponseStatus', $this->status);
        if (isset($this->failureReason)) $o['failureReason'] = $this->failureReason;
        if (isset($this->slipId)) $o['slipId'] = $this->slipId;
        if (isset($this->betId)) $o['betId'] = $this->betId;
        if (isset($this->amountAwarded)) $o['amountAwarded'] = $this->amountAwarded;
        return empty($o) ? new class(){} : $o;
    }
}

class CurrentRoundInfo implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $roundId=null,
        /** @var float */
        public float $amount=0.0,
        /** @var string|null */
        public ?string $inertCode=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['roundId'])) $this->roundId = $o['roundId'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['inertCode'])) $this->inertCode = $o['inertCode'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->roundId)) $o['roundId'] = $this->roundId;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->inertCode)) $o['inertCode'] = $this->inertCode;
        return empty($o) ? new class(){} : $o;
    }
}

class BettingApp implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $name=null,
        /** @var string|null */
        public ?string $version=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['version'])) $this->version = $o['version'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->version)) $o['version'] = $this->version;
        return empty($o) ? new class(){} : $o;
    }
}

class Ref implements JsonSerializable
{
    public function __construct(
        /** @var string */
        public string $id='',
        /** @var string */
        public string $val=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['val'])) $this->val = $o['val'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->val)) $o['val'] = $this->val;
        return empty($o) ? new class(){} : $o;
    }
}

class RefEx extends Ref implements JsonSerializable
{
    /**
     * @param string $id
     * @param string $val
     */
    public function __construct(
        string $id='',
        string $val='',
        /** @var RecordDictionary2<string, string>|null */
        public ?RecordDictionary2 $data=null
    ) {
        parent::__construct($id,$val);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['data'])) $this->data = JsonConverters::from(JsonConverters::context('RecordDictionary2',genericArgs:['string','string']), $o['data']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->data)) $o['data'] = JsonConverters::to(JsonConverters::context('RecordDictionary2',genericArgs:['string','string']), $this->data);
        return empty($o) ? new class(){} : $o;
    }
}

class Origin implements JsonSerializable
{
    public function __construct(
        /** @var BettingApp|null */
        public ?BettingApp $application=null,
        /** @var string|null */
        public ?string $ip=null,
        /** @var RefEx|null */
        public ?RefEx $organization=null,
        /** @var Ref|null */
        public ?Ref $region=null,
        /** @var Ref|null */
        public ?Ref $locationGroup=null,
        /** @var RefEx|null */
        public ?RefEx $location=null,
        /** @var RefEx|null */
        public ?RefEx $device=null,
        /** @var Ref|null */
        public ?Ref $clerk=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['application'])) $this->application = JsonConverters::from('BettingApp', $o['application']);
        if (isset($o['ip'])) $this->ip = $o['ip'];
        if (isset($o['organization'])) $this->organization = JsonConverters::from('RefEx', $o['organization']);
        if (isset($o['region'])) $this->region = JsonConverters::from('Ref', $o['region']);
        if (isset($o['locationGroup'])) $this->locationGroup = JsonConverters::from('Ref', $o['locationGroup']);
        if (isset($o['location'])) $this->location = JsonConverters::from('RefEx', $o['location']);
        if (isset($o['device'])) $this->device = JsonConverters::from('RefEx', $o['device']);
        if (isset($o['clerk'])) $this->clerk = JsonConverters::from('Ref', $o['clerk']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->application)) $o['application'] = JsonConverters::to('BettingApp', $this->application);
        if (isset($this->ip)) $o['ip'] = $this->ip;
        if (isset($this->organization)) $o['organization'] = JsonConverters::to('RefEx', $this->organization);
        if (isset($this->region)) $o['region'] = JsonConverters::to('Ref', $this->region);
        if (isset($this->locationGroup)) $o['locationGroup'] = JsonConverters::to('Ref', $this->locationGroup);
        if (isset($this->location)) $o['location'] = JsonConverters::to('RefEx', $this->location);
        if (isset($this->device)) $o['device'] = JsonConverters::to('RefEx', $this->device);
        if (isset($this->clerk)) $o['clerk'] = JsonConverters::to('Ref', $this->clerk);
        return empty($o) ? new class(){} : $o;
    }
}

class WinnerByCode implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $roundId=null,
        /** @var DateTime */
        public DateTime $drawnAtUtc=new DateTime(),
        /** @var string|null */
        public ?string $slipId=null,
        /** @var string|null */
        public ?string $betId=null,
        /** @var string|null */
        public ?string $code=null,
        /** @var float */
        public float $amount=0.0,
        /** @var Origin|null */
        public ?Origin $origin=null,
        /** @var Ref|null */
        public ?Ref $bettor=null,
        /** @var string|null */
        public ?string $locationAddressOrBettorInfo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['roundId'])) $this->roundId = $o['roundId'];
        if (isset($o['drawnAtUtc'])) $this->drawnAtUtc = JsonConverters::from('DateTime', $o['drawnAtUtc']);
        if (isset($o['slipId'])) $this->slipId = $o['slipId'];
        if (isset($o['betId'])) $this->betId = $o['betId'];
        if (isset($o['code'])) $this->code = $o['code'];
        if (isset($o['amount'])) $this->amount = $o['amount'];
        if (isset($o['origin'])) $this->origin = JsonConverters::from('Origin', $o['origin']);
        if (isset($o['bettor'])) $this->bettor = JsonConverters::from('Ref', $o['bettor']);
        if (isset($o['locationAddressOrBettorInfo'])) $this->locationAddressOrBettorInfo = $o['locationAddressOrBettorInfo'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->roundId)) $o['roundId'] = $this->roundId;
        if (isset($this->drawnAtUtc)) $o['drawnAtUtc'] = JsonConverters::to('DateTime', $this->drawnAtUtc);
        if (isset($this->slipId)) $o['slipId'] = $this->slipId;
        if (isset($this->betId)) $o['betId'] = $this->betId;
        if (isset($this->code)) $o['code'] = $this->code;
        if (isset($this->amount)) $o['amount'] = $this->amount;
        if (isset($this->origin)) $o['origin'] = JsonConverters::to('Origin', $this->origin);
        if (isset($this->bettor)) $o['bettor'] = JsonConverters::to('Ref', $this->bettor);
        if (isset($this->locationAddressOrBettorInfo)) $o['locationAddressOrBettorInfo'] = $this->locationAddressOrBettorInfo;
        return empty($o) ? new class(){} : $o;
    }
}

class LocalCodePotInfo implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isActive=null,
        /** @var CurrentRoundInfo|null */
        public ?CurrentRoundInfo $current=null,
        /** @var array<WinnerByCode>|null */
        public ?array $winners=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['isActive'])) $this->isActive = $o['isActive'];
        if (isset($o['current'])) $this->current = JsonConverters::from('CurrentRoundInfo', $o['current']);
        if (isset($o['winners'])) $this->winners = JsonConverters::fromArray('WinnerByCode', $o['winners']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->isActive)) $o['isActive'] = $this->isActive;
        if (isset($this->current)) $o['current'] = JsonConverters::to('CurrentRoundInfo', $this->current);
        if (isset($this->winners)) $o['winners'] = JsonConverters::toArray('WinnerByCode', $this->winners);
        return empty($o) ? new class(){} : $o;
    }
}

class SuperWinInfo implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $durationInMs=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['durationInMs'])) $this->durationInMs = $o['durationInMs'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->durationInMs)) $o['durationInMs'] = $this->durationInMs;
        return empty($o) ? new class(){} : $o;
    }
}

class HappyHourInfo implements JsonSerializable
{
    public function __construct(
        /** @var bool|null */
        public ?bool $isHappyHour=null,
        /** @var float */
        public float $oddsModifier=0.0,
        /** @var float */
        public float $roundPoolBonusPct=0.0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['isHappyHour'])) $this->isHappyHour = $o['isHappyHour'];
        if (isset($o['oddsModifier'])) $this->oddsModifier = $o['oddsModifier'];
        if (isset($o['roundPoolBonusPct'])) $this->roundPoolBonusPct = $o['roundPoolBonusPct'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->isHappyHour)) $o['isHappyHour'] = $this->isHappyHour;
        if (isset($this->oddsModifier)) $o['oddsModifier'] = $this->oddsModifier;
        if (isset($this->roundPoolBonusPct)) $o['roundPoolBonusPct'] = $this->roundPoolBonusPct;
        return empty($o) ? new class(){} : $o;
    }
}

class AccumulatorConfiguration extends AccumulatorConfiguration implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var DateTime */
        public DateTime $updatedAt=new DateTime()
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['updatedAt'])) $this->updatedAt = JsonConverters::from('DateTime', $o['updatedAt']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->updatedAt)) $o['updatedAt'] = JsonConverters::to('DateTime', $this->updatedAt);
        return empty($o) ? new class(){} : $o;
    }
}

enum SyphonType : int
{
    case Location = 0;
    case Bettor = 1;
}

class Syphon implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var string|null */
        public ?string $name=null,
        /** @var SyphonType|null */
        public ?SyphonType $type=null,
        /** @var int */
        public int $nrOfCombinations=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['name'])) $this->name = $o['name'];
        if (isset($o['type'])) $this->type = JsonConverters::from('SyphonType', $o['type']);
        if (isset($o['nrOfCombinations'])) $this->nrOfCombinations = $o['nrOfCombinations'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->name)) $o['name'] = $this->name;
        if (isset($this->type)) $o['type'] = JsonConverters::to('SyphonType', $this->type);
        if (isset($this->nrOfCombinations)) $o['nrOfCombinations'] = $this->nrOfCombinations;
        return empty($o) ? new class(){} : $o;
    }
}

class SyphonInfo implements JsonSerializable
{
    public function __construct(
        /** @var array<string,Syphon>|null */
        public ?array $bettors=null,
        /** @var array<string,Syphon>|null */
        public ?array $locations=null,
        /** @var bool|null */
        public ?bool $hasSyphons=null,
        /** @var int */
        public int $totalSyphonsInRound=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['bettors'])) $this->bettors = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','Syphon']), $o['bettors']);
        if (isset($o['locations'])) $this->locations = JsonConverters::from(JsonConverters::context('Dictionary',genericArgs:['string','Syphon']), $o['locations']);
        if (isset($o['hasSyphons'])) $this->hasSyphons = $o['hasSyphons'];
        if (isset($o['totalSyphonsInRound'])) $this->totalSyphonsInRound = $o['totalSyphonsInRound'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->bettors)) $o['bettors'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','Syphon']), $this->bettors);
        if (isset($this->locations)) $o['locations'] = JsonConverters::to(JsonConverters::context('Dictionary',genericArgs:['string','Syphon']), $this->locations);
        if (isset($this->hasSyphons)) $o['hasSyphons'] = $this->hasSyphons;
        if (isset($this->totalSyphonsInRound)) $o['totalSyphonsInRound'] = $this->totalSyphonsInRound;
        return empty($o) ? new class(){} : $o;
    }
}

class DrawDiagnostics implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null,
        /** @var Initialization|null */
        public ?Initialization $initializationInfo=null,
        /** @var SequenceGeneration|null */
        public ?SequenceGeneration $sequenceGenerationInfo=null,
        /** @var BestFitFinder|null */
        public ?BestFitFinder $bestFitFinderInfo=null,
        /** @var Purger|null */
        public ?Purger $purgerInfo=null,
        /** @var int */
        public int $duration=0,
        /** @var array<StimulationResponse>|null */
        public ?array $stimulationResponses=null,
        /** @var LocalCodePotInfo|null */
        public ?LocalCodePotInfo $localCodePot=null,
        /** @var SuperWinInfo|null */
        public ?SuperWinInfo $superWin=null,
        /** @var HappyHourInfo|null */
        public ?HappyHourInfo $happyHour=null,
        /** @var string|null */
        public ?string $reasoning=null,
        /** @var AccumulatorConfiguration|null */
        public ?AccumulatorConfiguration $configuration=null,
        /** @var SyphonInfo|null */
        public ?SyphonInfo $syphonInfo=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['initializationInfo'])) $this->initializationInfo = JsonConverters::from('Initialization', $o['initializationInfo']);
        if (isset($o['sequenceGenerationInfo'])) $this->sequenceGenerationInfo = JsonConverters::from('SequenceGeneration', $o['sequenceGenerationInfo']);
        if (isset($o['bestFitFinderInfo'])) $this->bestFitFinderInfo = JsonConverters::from('BestFitFinder', $o['bestFitFinderInfo']);
        if (isset($o['purgerInfo'])) $this->purgerInfo = JsonConverters::from('Purger', $o['purgerInfo']);
        if (isset($o['duration'])) $this->duration = $o['duration'];
        if (isset($o['stimulationResponses'])) $this->stimulationResponses = JsonConverters::fromArray('StimulationResponse', $o['stimulationResponses']);
        if (isset($o['localCodePot'])) $this->localCodePot = JsonConverters::from('LocalCodePotInfo', $o['localCodePot']);
        if (isset($o['superWin'])) $this->superWin = JsonConverters::from('SuperWinInfo', $o['superWin']);
        if (isset($o['happyHour'])) $this->happyHour = JsonConverters::from('HappyHourInfo', $o['happyHour']);
        if (isset($o['reasoning'])) $this->reasoning = $o['reasoning'];
        if (isset($o['configuration'])) $this->configuration = JsonConverters::from('AccumulatorConfiguration', $o['configuration']);
        if (isset($o['syphonInfo'])) $this->syphonInfo = JsonConverters::from('SyphonInfo', $o['syphonInfo']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->initializationInfo)) $o['initializationInfo'] = JsonConverters::to('Initialization', $this->initializationInfo);
        if (isset($this->sequenceGenerationInfo)) $o['sequenceGenerationInfo'] = JsonConverters::to('SequenceGeneration', $this->sequenceGenerationInfo);
        if (isset($this->bestFitFinderInfo)) $o['bestFitFinderInfo'] = JsonConverters::to('BestFitFinder', $this->bestFitFinderInfo);
        if (isset($this->purgerInfo)) $o['purgerInfo'] = JsonConverters::to('Purger', $this->purgerInfo);
        if (isset($this->duration)) $o['duration'] = $this->duration;
        if (isset($this->stimulationResponses)) $o['stimulationResponses'] = JsonConverters::toArray('StimulationResponse', $this->stimulationResponses);
        if (isset($this->localCodePot)) $o['localCodePot'] = JsonConverters::to('LocalCodePotInfo', $this->localCodePot);
        if (isset($this->superWin)) $o['superWin'] = JsonConverters::to('SuperWinInfo', $this->superWin);
        if (isset($this->happyHour)) $o['happyHour'] = JsonConverters::to('HappyHourInfo', $this->happyHour);
        if (isset($this->reasoning)) $o['reasoning'] = $this->reasoning;
        if (isset($this->configuration)) $o['configuration'] = JsonConverters::to('AccumulatorConfiguration', $this->configuration);
        if (isset($this->syphonInfo)) $o['syphonInfo'] = JsonConverters::to('SyphonInfo', $this->syphonInfo);
        return empty($o) ? new class(){} : $o;
    }
}

class GetDrawDignostics implements JsonSerializable
{
    public function __construct(
        /** @var string|null */
        public ?string $id=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        return empty($o) ? new class(){} : $o;
    }
}

/**
 * @template TKey
 * @template TVal
 * @template array of TKey
 * @template array1 of TVal
 */
class RecordDictionary2 extends array implements JsonSerializable
{
    public array $genericArgs = [];
    public static function create(array $genericArgs=[]): RecordDictionary2 {
        $to = new RecordDictionary2();
        $to->genericArgs = $genericArgs;
        return $to;
    }

    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        return empty($o) ? new class(){} : $o;
    }
}

PHP GetDrawDignostics DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /qry/rounds/draw/diagnostics HTTP/1.1 
Host: s4w2.api.bettor.cc 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"id":"String"}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"id":"String","initializationInfo":{"dataLoadDuration":0,"betsCollectionsCreationDuration":0,"combinationsOccuranceLookupInitializationDuration":0},"sequenceGenerationInfo":{"nrOfThreads":0,"nrOfResultsProbed":0,"duration":0,"avgSinglePassDuration":0},"bestFitFinderInfo":{"targetAmount":0,"awardedAmount":0,"deviation":0,"deviationPct":0,"sequenceResultType":"String","isJackPot5Drawn":false,"filteringPeriod":0,"winCountOrder":0,"minAmount":0,"maxAmount":0},"purgerInfo":{"prevalentStake":0,"poolPurger":"String","qualifiedPools":[{"id":0,"name":"String","coefficient":0,"availableAmount":0,"awardedAmount":0,"targetBet":{"isFound":false,"betId":"String","slipId":"String","combStake":{}}}]},"duration":0,"stimulationResponses":[{"stimulationId":"String","status":0,"failureReason":"String","slipId":"String","betId":"String","amountAwarded":0}],"localCodePot":{"durationInMs":0},"superWin":{"durationInMs":0},"happyHour":{"isHappyHour":false,"oddsModifier":0,"roundPoolBonusPct":0},"reasoning":"String","configuration":{"pools":[{"id":0,"name":"String","rtp":0,"reserveRTP":0,"totalRTP":0}],"prevalentStake":0,"purgeThresholdModifier":0,"locationOptimizationLevel":0,"jackPot5ThresholdInterval":{"start":0,"end":0},"deviationCategorySpanInPct":0,"deviationCategoryThresholdAmount":0,"roundPoolCircuitBreakerThreshold":0,"lowWinCountAffinityInPct":0,"winCountOrderAffinity":[{"order":0,"probability":0}],"highRollerSettings":{"pools":[{"id":0,"name":"String","isActive":false,"contributionToRoundPoolPct":0,"caps":{"plusCoef":0,"minusCoef":0,"maxAmountInPrevalentStakes":0}}],"categoryThresholds":[{"category":0,"threshold":0}]},"overflowCoefficientPoolsToRound":false,"antiSyphonProtectionOverride":false,"fraudDetectionConfig":{"antiSyphon":{"combinationCountPerRoundThresholdPct":0,"excludedLocations":[{"id":"String","val":"String"}],"includeRoundPctAsBettorSyphonCriteria":false,"isActive":false}},"debugConfig":{"logLocationStats":false,"logBettorSats":false}},"syphonInfo":{"bettors":{"String":{"id":"String","name":"String","type":0,"nrOfCombinations":0}},"locations":{"String":{"id":"String","name":"String","type":0,"nrOfCombinations":0}},"hasSyphons":true,"totalSyphonsInRound":2}}