This commit is contained in:
salam committed 2025-12-01 21:50:23 +01:00
1 parent 419148cd18
commit 7abcc5c56c
75 files changed
+32250 -127794

No files matched your search

+4 -4
View File
@@ -8,10 +8,10 @@ class Curl
{
public static $file;
public static function load($url)
public static function load($url, $filetype = 'json')
{
self::$file = app_path().'/Console/TestFiles/'.strtolower(str_replace(' ', '_', NuhBash::$options['name'])).'.'.NuhBash::$options['filetype'];
self::$file = app_path().'/Console/TestFiles/'.strtolower(str_replace(' ', '_', NuhBash::$options['name'])).'.'.$filetype;
$debug = NuhBash::$options['d'] ?? 0;
$save = NuhBash::$options['s'] ?? 0;
@@ -25,7 +25,7 @@ class Curl
if ($debug) {
Notice::note('data read local', 'r');
}
switch (NuhBash::$options['filetype']) {
switch ($filetype) {
case 'xml':
return simplexml_load_file(self::$file, null, LIBXML_NOCDATA);
break;
@@ -61,7 +61,7 @@ class Curl
file_put_contents(self::$file, $data);
}
if (NuhBash::$options['filetype'] == 'json') {
if ($filetype == 'json') {
return json_decode($data, true);
} else {
return $data;
@@ -1,8 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\TxOdds\DB;
class DbOdds
{
public static function call() {}
}
@@ -1,51 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\TxOdds;
use App\Console\Commands\Grapper\Grapper;
use App\Models\Event;
use App\Utilities\Notice;
use Illuminate\Support\Carbon;
class Events
{
public static function grap()
{
Notice::note('txodd fixture sport: '.Grapper::$options['sport_id'], 'b');
$debug = Grapper::$options['d'] ?? 0;
$now = Carbon::tomorrow();
for ($i = 0; $i < 60; $i++) {
$from = $now->toDateString();
$to = $now->addDays(1)->toDateString();
$url = Grapper::$domain.'feed/result/xml.php?'.Grapper::$auth."&date=$from,$to";
if ($debug) {
Notice::note($url, 'y');
}
$xml = simplexml_load_file($url, null, LIBXML_NOCDATA);
foreach ($xml->match as $_match) {
Event::updateOrCreate([
'txid' => (int) $_match['id'],
'spid' => Grapper::$options['sport_id'],
'prid' => Grapper::$options['provider_id'],
'cnid' => (int) $_match->group['cnid'], // country_id
'grid' => (int) $_match->group['id'], // group_id
'cgid' => (int) $_match->group['cgid'], // competition_group_id
'hoid' => (int) $_match->hteam['id'],
'awid' => (int) $_match->ateam['id'],
'home' => (string) $_match->hteam,
'away' => (string) $_match->ateam,
'liga' => (string) $_match->group['cname'],
], [
'time' => Carbon::parse($_match->time)->toDateTimeString(),
]);
}
}
}
}
@@ -3,11 +3,11 @@
namespace App\Console\Commands\Grapper\TxOdds;
use App\Console\Commands\Curl;
use App\Console\Commands\Grapper\TxOdds\Fixtures\TxCountry;
use App\Console\Commands\Grapper\TxOdds\Fixtures\TxElement;
use App\Console\Commands\Grapper\TxOdds\Fixtures\TxLiga;
use App\Console\Commands\NuhBash;
use App\Models\CompetitionGroup;
use App\Models\Element;
use App\Models\Event;
use App\Models\Group;
use App\Utilities\Notice;
use Illuminate\Support\Carbon;
@@ -17,7 +17,6 @@ class Fixtures
{
$debug = NuhBash::$options['d'] ?? 0;
$print = NuhBash::$options['p'] ?? 0;
$read = NuhBash::$options['r'] ?? 0;
$break = NuhBash::$options['b'] ?? 0;
$total = 0;
@@ -29,38 +28,86 @@ class Fixtures
$to = $date->addDays($i + 1)->toDateString();
$url = 'https://xml2.txodds.com/feed/result/xml.php?'.config('nuh.txodds_token_soccer')."&date=$from,$to&json=2";
$data = Curl::load($url, $debug);
$data = Curl::load($url);
if ($print) {
Notice::note($data, '', 1);
}
$count = 0;
foreach ($data['match'] as $row) {
$e = [];
foreach ($data['match'] as $match) {
foreach ($match as $key => $v) {
switch ($key) {
case '@attributes':
$e['txodds_id'] = (int) $v['id'];
break;
case 'time':
$starttime = Carbon::createFromDate($v)->toDateTimeString();
break;
case 'group':
$e['sport_id'] = (int) $v['@attributes']['spid'];
$e['country_id'] = (int) $v['@attributes']['cnid'];
$e['group_id'] = (int) $v['@attributes']['id'];
$e['competition_group_id'] = (int) $v['@attributes']['cgid'];
Group::firstOrCreate([
'txodds_id' => $v['@attributes']['id'],
'competition_group_id' => $e['competition_group_id'],
], [
'name' => (string) $v['@text'],
'sport_id' => $e['sport_id'],
'country_id' => $e['country_id'],
]);
CompetitionGroup::firstOrCreate([
'txodds_id' => $v['@attributes']['cgid'],
'name' => $v['@attributes']['cname'],
'sport_id' => $e['sport_id'],
'country_id' => $e['country_id'],
]);
break;
case 'hteam':
$e['home_id'] = $v['@attributes']['id'];
Element::firstOrCreate([
'txodds_id' => (int) $v['@attributes']['id'],
'name' => $v['@text'],
'sport_id' => $e['sport_id'],
]);
break;
case 'ateam':
$e['away_id'] = $v['@attributes']['id'];
Element::firstOrCreate([
'txodds_id' => (int) $v['@attributes']['id'],
'name' => $v['@text'],
'sport_id' => $e['sport_id'],
]);
break;
}
}
Event::firstOrCreate($e, ['starttime' => $starttime]);
$count++;
$txodds_id = array_column($row, 'id');
$spid = array_column($row['group'], 'spid');
$country_id = TxCountry::find($row['group']);
$liga_id = TxLiga::find($country_id, $row['group']);
$home_id = TxElement::find($row['hteam'], 1);
$away_id = TxElement::find($row['ateam'], 1);
$event = Event::updateOrCreate([
'starttime' => date('Y-m-d H:i:s', strtotime($row['time'])),
'sport_id' => (int) $spid[0],
'provider_id' => 1,
'txodds_id' => (int) $txodds_id[0],
'country_id' => (int) $country_id,
'liga_id' => (int) $liga_id,
'home_id' => (int) $home_id,
'away_id' => (int) $away_id,
]);
}
Notice::note("$from - $count events processed", 'g');
if ($debug) {
Notice::note("$from - $count events processed", 'g');
}
$total += $count;
if ($break) {
if ($break || $debug) {
break;
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\TxOdds\Fixtures;
use App\Models\Country;
class TxCountry
{
public static function find($group)
{
$cnid = array_column($group, 'cnid');
$cname = array_column($group, 'cname');
$country = Country::firstOrCreate(
['txid' => $cnid[0]],
['name' => $cname[0]]
);
return $country->id;
}
}
@@ -1,25 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\TxOdds\Fixtures;
use App\Models\Element;
class TxElement
{
public static function find($element, $sport_id)
{
// dd($element);
$txodds_id = array_column($element, 'id');
$element = Element::firstOrCreate([
'name' => (string) $element['@text'],
'sport_id' => $sport_id,
'txodds_id' => (int) $txodds_id[0],
]);
return $element->id;
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Console\Commands\Grapper\TxOdds\Fixtures;
use App\Models\Liga;
class TxLiga
{
public static function find($country_id, $group)
{
$cname = array_column($group, 'cname');
$spid = array_column($group, 'spid');
$cgid = array_column($group, 'cgid');
$liga = Liga::firstOrCreate([
'name' => (string) $cname[0],
'sport_id' => (int) $spid[0],
'country_id' => $country_id,
'txodds_id' => (int) $cgid[0],
]);
return $liga->id;
}
}
+191 -182
View File
@@ -6,6 +6,7 @@ use App\Console\Commands\Curl;
use App\Console\Commands\Grapper\Helper;
use App\Console\Commands\NuhBash;
use App\Models\Event;
use App\Models\EventBookmaker;
use App\Models\Odds3way;
use App\Models\OddsQualify;
use App\Models\OddsTotal;
@@ -17,7 +18,11 @@ class Odds
public static function grap()
{
Notice::note('txodd odd sport: '.NuhBash::$options['sport_id'], 'b');
$debug = NuhBash::$options['d'] ?? 0;
if ($debug) {
Notice::note('txodd odd sport: '.NuhBash::$options['sport_id'], 'b');
}
/*************************************************
* SINGLE SOCCER
@@ -120,207 +125,211 @@ class Odds
*************************************************/
foreach ($_calls as $url) {
$json_obj = Curl::load($url, $debug);
$json_obj = Curl::load($url);
$e = [];
foreach ($json_obj['match'] as $match) {
foreach ($json_obj['match'] as $key => $v) {
$e = [];
Notice::note($key, 'b');
foreach ($match as $key => $v) {
switch ($key) {
case '@attributes':
$e['id'] = (int) $v['id'];
break;
// if ($debug) {
// Notice::note($key, 'b');
// }
case 'time':
$e['time'] = $v;
break;
switch ($key) {
case 'group':
$e['liga'] = $v['@attributes']['cname'];
$e['liid'] = $v['@attributes']['id'];
$e['cgid'] = $v['@attributes']['cgid'];
$e['spid'] = $v['@attributes']['spid'];
$e['mgid'] = $v['@attributes']['mgid'];
$e['cnid'] = $v['@attributes']['cnid'];
break;
case '@attributes':
$e['id'] = (int) $v['id'];
break;
case 'hteam':
$e['hoid'] = $v['@attributes']['id'];
$e['home'] = $v['@text'];
break;
case 'time':
$starttime = Carbon::createFromDate($v)->toDateTimeString();
break;
case 'ateam':
$e['awid'] = $v['@attributes']['id'];
$e['away'] = $v['@text'];
break;
case 'group':
case 'bookmaker':
$e['sport_id'] = (int) $v['@attributes']['spid'];
$e['country_id'] = (int) $v['@attributes']['cnid'];
$e['group_id'] = (int) $v['@attributes']['id'];
$e['competition_group_id'] = (int) $v['@attributes']['cgid'];
break;
foreach ($v as $books) {
case 'hteam':
$e['home_id'] = $v['@attributes']['id'];
break;
foreach ($books as $bkey => $book) {
case 'ateam':
$e['away_id'] = $v['@attributes']['id'];
switch ($bkey) {
case '@attributes':
$bname = $book['name'];
$bkmid = (int) $book['bid'];
$e['odds'][$bkmid]['name'] = $bname;
break;
case 'offer':
$event = Event::firstOrCreate($e, ['starttime' => $starttime]);
break;
foreach ($book as $offer) {
foreach ($offer as $type => $od) {
case 'bookmaker':
switch ($type) {
case '@attributes':
$bettypeid = (int) $od['ot'];
dd('add to event bookmaker missing');
// 'book_startime' => $od['@attributes']['starting_time'],
$bmoid = $od['bmoid'];
break;
case 'odds':
switch ($bettypeid) {
case '0':
Odds3way::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
],
[
'start' => $od['@attributes']['starting_time'],
'h3w' => (float) $od['o1'],
'd3w' => (float) $od['o2'],
'a3w' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
foreach ($v as $books) {
case '1':
Odds2way::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
],
[
'start' => $od['@attributes']['starting_time'],
'h2w' => (float) $od['o1'],
'a2w' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
foreach ($books as $bookkey => $book) {
case '4':
OddsTotal::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
'spread' => (float) $od['o3'],
],
[
'start' => $od['@attributes']['starting_time'],
'over' => (float) $od['o1'],
'under' => (float) $od['o2'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
$bkmid = false;
case '5242880':
OddsDc::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
],
[
'start' => $od['@attributes']['starting_time'],
'dc1x' => (float) $od['o1'],
'dc12' => (float) $od['o2'],
'dc2x' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '11534337':
OddsGgng::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
],
[
'start' => $od['@attributes']['starting_time'],
'gg' => (float) $od['o1'],
'ng' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '11534337':
OddsQualify::updateOrCreate(
[
'event_id' => $e['id'],
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'bmoid' => $bmoid,
],
[
'start' => $od['@attributes']['starting_time'],
'htq' => (float) $od['o1'],
'atq' => (float) $od['o2'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
}
break;
}
switch ($bookkey) {
case '@attributes':
if (isset($book['bid'])) {
$bkmid = (int) $book['bid'];
}
}
break;
case 'offer':
if ($bkmid) {
foreach ($book as $type => $od) {
switch ($type) {
case '@attributes':
$bettypeid = (int) $od['ot'];
$bmoid = (int) $od['bmoid'];
break;
case 'odds':
switch ($bettypeid) {
case '0':
Odds3way::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
],
[
'h3w' => (float) $od['o1'],
'd3w' => (float) $od['o2'],
'a3w' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
EventBookmaker::updateOrCreate([
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'bmoid' => $bmoid,
], [
'bkm_starttime' => Carbon::createFromDate($od['@attributes']['starting_time'])->toDateTimeString(),
'last_check_at' => Carbon::now()->toDateTimeString(),
]);
break;
case '1':
Odds2way::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
],
[
'h2w' => (float) $od['o1'],
'a2w' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '4':
OddsTotal::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
'spread' => (float) $od['o3'],
],
[
'over' => (float) $od['o1'],
'under' => (float) $od['o2'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '5242880':
OddsDc::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
],
[
'dc1x' => (float) $od['o1'],
'dc12' => (float) $od['o2'],
'dc2x' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o2'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '11534337':
OddsGgng::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
],
[
'gg' => (float) $od['o1'],
'ng' => (float) $od['o3'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
case '11534337':
OddsQualify::updateOrCreate(
[
'event_id' => $event->id,
'bookmaker_id' => $bkmid,
'sport_id' => NuhBash::$options['sport_id'],
],
[
'htq' => (float) $od['o1'],
'atq' => (float) $od['o2'],
'margin' => (float) Helper::margin([$od['o1'], $od['o3']], 1),
'flag' => 1,
'nuh_check' => 0,
'source_updated_at' => $od['@attributes']['time'],
'last_check_at' => Carbon::now()->toDateTimeString(),
]
);
break;
}
break;
}
}
break;
}
}
}
}
}
break;
break;
}
}
}
}
File diff suppressed because it is too large. Load diff
+1
View File
@@ -0,0 +1 @@
{"@attributes":{"time":"2025-12-01T15:15:42+00:00","timestamp":"1764602142"},"match":[{"@attributes":{"id":"14546537","xsid":"0","gsmid":"0","last_updated":"2025-12-01T03:21:08+00:00"},"time":"2025-12-01T20:00:00+00:00","group":{"@attributes":{"id":"176998","cgid":"471","spid":"1","cnid":"467","mgid":"1002","cname":"Prim B Metro"},"@text":"FBARG Prim B Metro > Clausura-25"},"hteam":{"@attributes":{"id":"45668"},"@text":"Deportivo Armenio"},"ateam":{"@attributes":{"id":"41971"},"@text":"Sportivo Italiano"},"results":{"status":{"@attributes":{"last_updated":"2025-12-01T03:21:08+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14562676","xsid":"0","gsmid":"0","last_updated":"2025-12-01T04:01:21+00:00"},"time":"2025-12-01T00:00:00+00:00","group":{"@attributes":{"id":"180820","cgid":"501","spid":"1","cnid":"467","mgid":"1002","cname":"Torneo Regional Federal Amateur"},"@text":"FBARG Torneo Regional Federal Amateur-25"},"hteam":{"@attributes":{"id":"131618"},"@text":"Defensores de Salto"},"ateam":{"@attributes":{"id":"1642554"},"@text":"Argentino Chacabuco"},"results":{"status":{"@attributes":{"last_updated":"2025-12-01T04:01:20+00:00","minute":"-1"},"@text":"Fin"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14557469","xsid":"0","gsmid":"0","last_updated":"2025-11-26T18:53:27+00:00"},"time":"2025-12-01T20:00:00+00:00","group":{"@attributes":{"id":"181746","cgid":"87","spid":"1","cnid":"467","mgid":"1002","cname":"Liga Profesional Argentina"},"@text":"FBARG Liga Profesional Argentina > Clausura Quarter Finals-25"},"hteam":{"@attributes":{"id":"58621"},"@text":"Barracas Central"},"ateam":{"@attributes":{"id":"2049"},"@text":"Gimnasia LP"},"results":{"status":{"@attributes":{"last_updated":"2025-11-26T18:53:26+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14563565","xsid":"0","gsmid":"0","last_updated":"2025-11-29T12:24:10+00:00"},"time":"2025-12-01T22:00:00+00:00","group":{"@attributes":{"id":"180791","cgid":"1164","spid":"1","cnid":"409","mgid":"1009","cname":"Copa Fares Lopes"},"@text":"FBBRA Copa Fares Lopes-25"},"hteam":{"@attributes":{"id":"1004395"},"@text":"Fortaleza B"},"ateam":{"@attributes":{"id":"1482714"},"@text":"Centro de Formacao de Atletas Tirol"},"results":{"status":{"@attributes":{"last_updated":"2025-11-29T12:24:09+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14561535","xsid":"0","gsmid":"0","last_updated":"2025-11-29T15:16:15+00:00"},"time":"2025-12-01T11:30:00+00:00","group":{"@attributes":{"id":"181798","cgid":"51812","spid":"1","cnid":"409","mgid":"1009","cname":"Copa Recife U20"},"@text":"FBBRA Copa Recife U20-25"},"hteam":{"@attributes":{"id":"132428"},"@text":"Sport Recife PE U20"},"ateam":{"@attributes":{"id":"2235604"},"@text":"Cha Grande PE U20"},"results":{"status":{"@attributes":{"last_updated":"2025-11-29T15:16:13+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14561542","xsid":"0","gsmid":"0","last_updated":"2025-11-28T11:08:40+00:00"},"time":"2025-12-01T13:00:00+00:00","group":{"@attributes":{"id":"181798","cgid":"51812","spid":"1","cnid":"409","mgid":"1009","cname":"Copa Recife U20"},"@text":"FBBRA Copa Recife U20-25"},"hteam":{"@attributes":{"id":"2235656"},"@text":"Internacional PE U20"},"ateam":{"@attributes":{"id":"1455508"},"@text":"Serrano PE U20"},"results":{"status":{"@attributes":{"last_updated":"2025-11-28T11:08:40+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14563579","xsid":"0","gsmid":"0","last_updated":"2025-11-29T15:13:15+00:00"},"time":"2025-12-01T16:30:00+00:00","group":{"@attributes":{"id":"181798","cgid":"51812","spid":"1","cnid":"409","mgid":"1009","cname":"Copa Recife U20"},"@text":"FBBRA Copa Recife U20-25"},"hteam":{"@attributes":{"id":"2235956"},"@text":"Inter Arabia U20"},"ateam":{"@attributes":{"id":"1493668"},"@text":"Guarany AL U20"},"results":{"status":{"@attributes":{"last_updated":"2025-11-29T15:13:13+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"14563577","xsid":"0","gsmid":"0","last_updated":"2025-11-29T16:04:15+00:00"},"time":"2025-12-01T17:30:00+00:00","group":{"@attributes":{"id":"181798","cgid":"51812","spid":"1","cnid":"409","mgid":"1009","cname":"Copa Recife U20"},"@text":"FBBRA Copa Recife U20-25"},"hteam":{"@attributes":{"id":"2198184"},"@text":"Guarany EC U20"},"ateam":{"@attributes":{"id":"1180207"},"@text":"Ipojuca PE U20"},"results":{"status":{"@attributes":{"last_updated":"2025-11-29T16:04:14+00:00","minute":"-1"},"@text":"Sched"},"result":{"@attributes":{"id":"1","name":"CURRENT","value":""}}}},{"@attributes":{"id":"Line truncated
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
-1
View File
@@ -1 +0,0 @@
{"@attributes":{"time":"2025-11-30T05:12:00+00:00","timestamp":"1764479520"},"match":{"@attributes":{"id":"13425457","xsid":"0","gsmid":"0"},"time":"2025-11-29T05:00:00+00:00","group":{"@attributes":{"id":"172158","cgid":"110","spid":"1","cnid":"416","mgid":"1031","cname":"J2 League"},"@text":"FBJPN J2 League-25"},"hteam":{"@attributes":{"id":"42598"},"@text":"Renofa Yamaguchi"},"ateam":{"@attributes":{"id":"6519"},"@text":"Omiya Ardija"},"results":null,"bookmaker":[{"@attributes":{"bid":"42","name":"William Hill"},"offer":[{"@attributes":{"id":"4093976728","n":"2","ot":"5242880","otname":"double chance (1x\/x2\/12)","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T03:55:11+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.620","o2":"1.350","o3":"1.330"}},{"@attributes":{"id":"4093976730","n":"1","ot":"4","otname":"totals","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-24T02:16:13+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.050","o2":"10.000","o3":"0.50"}},{"@attributes":{"id":"4093976740","n":"7","ot":"0","otname":"three way","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:47:14+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"3.000","o2":"3.100","o3":"2.150"}},{"@attributes":{"id":"4093976746","n":"2","ot":"4","otname":"totals","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-28T05:04:25+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.910","o2":"1.800","o3":"2.50"}},{"@attributes":{"id":"4093976751","n":"3","ot":"4","otname":"totals","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:52:23+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.250","o2":"3.500","o3":"1.50"}},{"@attributes":{"id":"4093976754","n":"3","ot":"4","otname":"totals","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T02:02:19+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"3.100","o2":"1.300","o3":"3.50"}},{"@attributes":{"id":"4093976781","n":"1","ot":"11534337","otname":"both teams to score","last_updated":"2025-11-29T04:57:49+00:00","flags":"0","bmoid":"37808110"},"odds":{"@attributes":{"i":"0","time":"2025-11-24T02:16:13+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.670","o2":"0.000","o3":"2.100"}}]},{"@attributes":{"bid":"327","name":"Sbobet.com"},"offer":[{"@attributes":{"id":"4094133178","n":"44","ot":"4","otname":"totals","last_updated":"2025-11-29T05:02:04+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:58:47+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.930","o2":"1.970","o3":"2.50"}},{"@attributes":{"id":"4094249885","n":"52","ot":"0","otname":"three way","last_updated":"2025-11-29T05:02:04+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:58:47+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"3.190","o2":"3.290","o3":"2.250"}},{"@attributes":{"id":"4094250268","n":"44","ot":"5242880","otname":"double chance (1x\/x2\/12)","last_updated":"2025-11-29T05:02:04+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:58:47+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.690","o2":"1.320","o3":"1.300"}},{"@attributes":{"id":"4096814952","n":"10","ot":"4","otname":"totals","last_updated":"2025-11-29T05:02:04+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:58:47+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"2.200","o2":"1.730","o3":"2.75"}},{"@attributes":{"id":"4097533283","n":"2","ot":"4","otname":"totals","last_updated":"2025-11-29T05:02:04+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:58:47+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.670","o2":"2.290","o3":"2.25"}}]},{"@attributes":{"bid":"30","name":"Bwin"},"offer":[{"@attributes":{"id":"4094637420","n":"3","ot":"5242880","otname":"double chance (1x\/x2\/12)","last_updated":"2025-11-29T05:00:09+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:10:54+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"1.610","o2":"1.350","o3":"1.310"}},{"@attributes":{"id":"4094637422","n":"3","ot":"0","otname":"three way","last_updated":"2025-11-29T05:00:09+00:00","flags":"0","bmoid":"0"},"odds":{"@attributes":{"i":"0","time":"2025-11-29T04:10:54+00:00","starting_time":"2025-11-29T05:00:00+00:00"},"o1":"2.950","o2":"3.100","o3":"2.150"}},{"@attributes":{"id":"4094637424","n":"2","ot":"4","otname":"totals","last_updated":"2025-11-29T05:00:09+00:00","flags":"0","bmoid":"0"},"odds":{"@attributeLine truncated
@@ -22,7 +22,7 @@ class BookmakerResource extends Resource
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Administration';
protected static string|\UnitEnum|null $navigationGroup = 'Static Data';
public static function canViewAny(): bool
{
@@ -0,0 +1,61 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters;
use App\Filament\Clusters\Administrator\AdministratorCluster;
use App\Filament\Resources\CompetitionGroupFilters\Pages\CreateCompetitionGroupFilter;
use App\Filament\Resources\CompetitionGroupFilters\Pages\EditCompetitionGroupFilter;
use App\Filament\Resources\CompetitionGroupFilters\Pages\ListCompetitionGroupFilters;
use App\Filament\Resources\CompetitionGroupFilters\Schemas\CompetitionGroupFilterForm;
use App\Filament\Resources\CompetitionGroupFilters\Tables\CompetitionGroupFiltersTable;
use App\Models\CompetitionGroupFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use UnitEnum;
class CompetitionGroupFilterResource extends Resource
{
protected static ?string $model = CompetitionGroupFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = AdministratorCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Dynamic Data';
public static function canViewAny(): bool
{
return auth()->user()->super_admin == 1;
}
public static function form(Schema $schema): Schema
{
return CompetitionGroupFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return CompetitionGroupFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListCompetitionGroupFilters::route('/'),
'create' => CreateCompetitionGroupFilter::route('/create'),
'edit' => EditCompetitionGroupFilter::route('/{record}/edit'),
];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateCompetitionGroupFilter extends CreateRecord
{
protected static string $resource = CompetitionGroupFilterResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditCompetitionGroupFilter extends EditRecord
{
protected static string $resource = CompetitionGroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Pages;
use App\Filament\Resources\CompetitionGroupFilters\CompetitionGroupFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListCompetitionGroupFilters extends ListRecords
{
protected static string $resource = CompetitionGroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Schemas;
use Filament\Schemas\Schema;
class CompetitionGroupFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Filament\Resources\CompetitionGroupFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class CompetitionGroupFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -30,7 +30,7 @@ class CountryResource extends Resource
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Administration';
protected static string|\UnitEnum|null $navigationGroup = 'Static Data';
public static function canViewAny(): bool
{
@@ -0,0 +1,61 @@
<?php
namespace App\Filament\Resources\ElementFilters;
use App\Filament\Clusters\Administrator\AdministratorCluster;
use App\Filament\Resources\ElementFilters\Pages\CreateElementFilter;
use App\Filament\Resources\ElementFilters\Pages\EditElementFilter;
use App\Filament\Resources\ElementFilters\Pages\ListElementFilters;
use App\Filament\Resources\ElementFilters\Schemas\ElementFilterForm;
use App\Filament\Resources\ElementFilters\Tables\ElementFiltersTable;
use App\Models\ElementFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use UnitEnum;
class ElementFilterResource extends Resource
{
protected static ?string $model = ElementFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = AdministratorCluster::class;
protected static string|UnitEnum|null $navigationGroup = 'Dynamic Data';
public static function canViewAny(): bool
{
return auth()->user()->super_admin == 1;
}
public static function form(Schema $schema): Schema
{
return ElementFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return ElementFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListElementFilters::route('/'),
'create' => CreateElementFilter::route('/create'),
'edit' => EditElementFilter::route('/{record}/edit'),
];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateElementFilter extends CreateRecord
{
protected static string $resource = ElementFilterResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditElementFilter extends EditRecord
{
protected static string $resource = ElementFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\ElementFilters\Pages;
use App\Filament\Resources\ElementFilters\ElementFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListElementFilters extends ListRecords
{
protected static string $resource = ElementFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Filament\Resources\ElementFilters\Schemas;
use Filament\Schemas\Schema;
class ElementFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
//
]);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Filament\Resources\ElementFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Table;
class ElementFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
//
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -19,7 +19,7 @@ class EventForm
TextInput::make('country_id')
->numeric()
->default(0),
TextInput::make('liga_id')
TextInput::make('group_id')
->numeric()
->default(0),
TextInput::make('home_id')
@@ -31,27 +31,6 @@ class EventForm
TextInput::make('provider_id')
->numeric()
->default(0),
TextInput::make('txodds_id')
->numeric()
->default(0),
TextInput::make('betaid_id')
->numeric()
->default(0),
TextInput::make('betradar_id')
->numeric()
->default(0),
TextInput::make('magnig_id')
->numeric()
->default(0),
TextInput::make('magken_id')
->numeric()
->default(0),
TextInput::make('lognig_id')
->numeric()
->default(0),
TextInput::make('logcol_id')
->numeric()
->default(0),
]);
}
}
@@ -24,13 +24,14 @@ class EventsTable
->size(IconSize::ExtraLarge)
->icon(fn ($record) => $record->sport->icon)
->tooltip(fn ($record) => $record->txodds_id),
TextColumn::make('txodds_id')->searchable()->label('Match Id')->badge()->copyable(),
TextColumn::make('starttime')
->label('Start')
->alignCenter()
->dateTime('d.m')
->weight(FontWeight::Bold)
->description(fn ($state): string => Carbon::createFromDate($state)->format('H:i')),
TextColumn::make('liga.name')
TextColumn::make('competition_group.name')
->color('gray')
->label('Event')
->icon(fn ($record) => $record->country->icon)
@@ -0,0 +1,56 @@
<?php
namespace App\Filament\Resources\GroupFilters;
use App\Filament\Clusters\Administrator\AdministratorCluster;
use App\Filament\Resources\GroupFilters\Pages\ListGroupFilters;
use App\Filament\Resources\GroupFilters\Schemas\GroupFilterForm;
use App\Filament\Resources\GroupFilters\Tables\GroupFiltersTable;
use App\Models\GroupFilter;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
class GroupFilterResource extends Resource
{
protected static ?string $model = GroupFilter::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack;
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Dynamic Data';
public static function canViewAny(): bool
{
return auth()->user()->super_admin == 1;
}
public static function form(Schema $schema): Schema
{
return GroupFilterForm::configure($schema);
}
public static function table(Table $table): Table
{
return GroupFiltersTable::configure($table);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => ListGroupFilters::route('/'),
];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Resources\Pages\CreateRecord;
class CreateGroupFilter extends CreateRecord
{
protected static string $resource = GroupFilterResource::class;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
class EditGroupFilter extends EditRecord
{
protected static string $resource = GroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
DeleteAction::make(),
];
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\GroupFilters\Pages;
use App\Filament\Resources\GroupFilters\GroupFilterResource;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
class ListGroupFilters extends ListRecords
{
protected static string $resource = GroupFilterResource::class;
protected function getHeaderActions(): array
{
return [
CreateAction::make(),
];
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Filament\Resources\GroupFilters\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class GroupFilterForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TextInput::make('group_id')
->required()
->numeric(),
TextInput::make('bkm_group_id')
->required()
->numeric(),
TextInput::make('bookmaker_id')
->required()
->numeric(),
TextInput::make('name')
->default(null),
]);
}
}
@@ -0,0 +1,49 @@
<?php
namespace App\Filament\Resources\GroupFilters\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class GroupFiltersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('group_id')
->numeric()
->sortable(),
TextColumn::make('bkm_group_id')
->numeric()
->sortable(),
TextColumn::make('bookmaker_id')
->numeric()
->sortable(),
TextColumn::make('name')
->searchable(),
TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
TextColumn::make('updated_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
@@ -7,9 +7,11 @@ use App\Filament\Resources\Providers\Pages\ListProviders;
use App\Filament\Resources\Providers\Schemas\ProviderForm;
use App\Filament\Resources\Providers\Tables\ProvidersTable;
use App\Models\Provider;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
use UnitEnum;
class ProviderResource extends Resource
{
@@ -17,13 +19,13 @@ class ProviderResource extends Resource
protected static ?int $navigationSort = 23;
protected static string|\BackedEnum|null $navigationIcon = 'lucide-arrow-down-up';
protected static string|BackedEnum|null $navigationIcon = 'lucide-arrow-down-up';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Grapper';
protected static string|UnitEnum|null $navigationGroup = 'Grapper';
public static function canViewAny(): bool
{
@@ -26,7 +26,7 @@ class SportResource extends Resource
protected static ?string $cluster = AdministratorCluster::class;
protected static string|\UnitEnum|null $navigationGroup = 'Administration';
protected static string|\UnitEnum|null $navigationGroup = 'Static Data';
public static function canViewAny(): bool
{
@@ -4,15 +4,20 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Liga extends Model
class CompetitionGroup extends Model
{
protected $fillable = [
'name',
'txodds_id',
'sport_id',
'country_id',
'txodds_id',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
public function country()
{
return $this->belongsTo(Country::class);
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class CompetitionGroupFilter extends Model
{
protected $fillable = [
'competition_group_id',
'bkm_competition_group_id',
'bookmaker_id',
'name',
];
public function competition_group()
{
return $this->belongsTo(CompetitionGroup::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
}
+6 -4
View File
@@ -8,10 +8,12 @@ class Element extends Model
{
protected $fillable = [
'name',
'sport_id',
'txodds_id',
'betsapi_id',
'mag_id',
'log_id',
'sport_id',
];
public function sport()
{
return $this->belongsTo(Sport::class);
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ElementFilter extends Model
{
protected $fillable = [
'name',
'element_id',
'bkm_element_id',
'bookmaker_id',
];
public function element()
{
return $this->belongsTo(Element::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
}
+14 -12
View File
@@ -10,41 +10,43 @@ class Event extends Model
'starttime',
'sport_id',
'country_id',
'liga_id',
'group_id',
'competition_group_id',
'home_id',
'away_id',
'provider_id',
'txodds_id',
'provider_id',
'betaid_id',
'betradar_id',
'magnig_id',
'magken_id',
'lognig_id',
'logcol_id',
];
public function sport()
{
return $this->belongsTo(Sport::class, 'sport_id', 'id');
return $this->belongsTo(Sport::class);
}
public function country()
{
return $this->belongsTo(Country::class);
return $this->belongsTo(Country::class, 'country_id', 'txodds_id');
}
public function liga()
public function group()
{
return $this->belongsTo(Liga::class);
return $this->hasOne(Group::class, 'txodds_id', 'group_id');
}
public function competition_group()
{
return $this->hasOne(CompetitionGroup::class, 'txodds_id', 'competition_group_id');
}
public function home()
{
return $this->belongsTo(Element::class);
return $this->hasOne(Element::class, 'txodds_id', 'home_id');
}
public function away()
{
return $this->belongsTo(Element::class);
return $this->hasOne(Element::class, 'txodds_id', 'away_id');
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EventBookmaker extends Model
{
protected $fillable = [
'event_id',
'bookmaker_id',
'bmoid',
'send_status',
'last_check_at',
];
public function event()
{
return $this->belongsTo(Event::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
protected $fillable = [
'name',
'txodds_id',
'competition_group_id',
'sport_id',
'country_id',
];
public function country()
{
return $this->belongsTo(Country::class);
}
public function sport()
{
return $this->belongsTo(Sport::class);
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class GroupFilter extends Model
{
protected $fillable = [
'name',
'group_id',
'bkm_group_id',
'bookmaker_id',
];
public function group()
{
return $this->belongsTo(Group::class);
}
public function bookmaker()
{
return $this->belongsTo(Bookmaker::class);
}
}
+3 -3
View File
@@ -14,11 +14,11 @@ class Odds2way extends Model
'sport_id',
'bookmaker_id',
'provider_id',
'home',
'away',
'h2w',
'a2w',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+4 -4
View File
@@ -14,12 +14,12 @@ class Odds3way extends Model
'sport_id',
'bookmaker_id',
'provider_id',
'home',
'draw',
'away',
'h3w',
'd3w',
'a3w',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+4 -3
View File
@@ -14,11 +14,12 @@ class OddsDc extends Model
'sport_id',
'bookmaker_id',
'provider_id',
'dnb1',
'dnb2',
'dc1x',
'dc12',
'dc2x',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -1
View File
@@ -18,7 +18,7 @@ class OddsDnb extends Model
'dnb2',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -1
View File
@@ -18,7 +18,7 @@ class OddsGgng extends Model
'ng',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -1
View File
@@ -19,7 +19,7 @@ class OddsHandicap extends Model
'handicap',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -1
View File
@@ -16,7 +16,7 @@ class OddsQualify extends Model
'atq',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -1
View File
@@ -19,7 +19,7 @@ class OddsTotal extends Model
'spread',
'margin',
'flag',
'check',
'nuh_check',
'add_time',
'updated_at',
];
+1 -3
View File
@@ -10,8 +10,6 @@ class Supervisorctl
public static $code = '';
public static $events = 0;
public static function start(&$options)
{
$debug = $options['d'] ?? 0;
@@ -49,7 +47,7 @@ class Supervisorctl
{
$processend = microtime(true);
$runtime = round(($processend - self::$starttime) / 60, 3);
Supervisor::where('id', self::$code)->update(['runtime' => $runtime, 'events' => self::$events]);
Supervisor::where('id', self::$code)->update(['runtime' => $runtime]);
if ($options['d']) {
Notice::note('spervisor time: '.$runtime.' min', 'g');
}