removed precalculation

This commit is contained in:
salam committed 2026-10-12 23:43:23 +02:00
1 parent f6f5dd0c7c
commit 838d6419f4
11 files changed
+214 -680

No files matched your search

@@ -7,7 +7,6 @@ use App\Models\StatistikoImport;
use Filament\Actions\Action;
use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;
class ListStatistikoImports extends ListRecords
@@ -17,21 +16,6 @@ class ListStatistikoImports extends ListRecords
protected function getHeaderActions(): array
{
return [
Action::make('precalculation')->color('success')
->icon('phosphor-gear')
->requiresConfirmation() // Optional: Asks user before running
->modalClickThrough()
->action(function (Action $action) {
// Wir registrieren einen Shutdown-Terminating-Job,
// damit Filament die HTTP-Antwort an den Browser senden kann,
// BEVOR der speicherhungrige Befehl startet.
app()->terminating(function () {
Artisan::call('grp:ply');
});
// Schließt das Modal SOFORT im Browser
$action->close();
}),
CreateAction::make('upload_file')
->modalIcon('phosphor-upload')
->modalHeading('Upload Statistiko Files')
@@ -3,8 +3,7 @@
namespace App\Filament\Pages\Selections;
use App\Filament\Pages\Selections\Helper\GetSeason;
use App\Models\SofaScorePlayerPerSeason;
use App\Models\StatistikoDetail;
use App\Filament\Widgets\Boxes\LoadPlayerAverages;
use App\Models\StatistikoEvent;
class LoadPlayerSelection
@@ -12,13 +11,6 @@ class LoadPlayerSelection
public static function load(?int $team_id, ?string $team_position, ?int $sofascore_category_id, ?array $season, ?string $seasonmode)
{
$season = GetSeason::load($season, $seasonmode);
// $hash = hash('crc32', $team_id.$team_position.$sofascore_category_id.serialize($season));
// $cached_players = SofaScorePlayerCache::where('hash', $hash)->value('players');
// if ($cached_players) {
// return $cached_players;
// }
$matches = StatistikoEvent::whereIn('season', $season)
->where(function ($query) use ($team_id, $team_position) {
switch ($team_position) {
@@ -36,29 +28,24 @@ class LoadPlayerSelection
$positions_map = LoadPositions::load();
$team_player_ids = StatistikoDetail::where('ss_team_id', $team_id)->pluck('ss_player_id')->toArray();
$players = SofaScorePlayerPerSeason::with('details')->where('season', $season)->whereIn('ss_player_id', $team_player_ids)->get();
$players = LoadPlayerAverages::load($team_id, $season);
$arr = [];
foreach ($players as $val) {
if ($val->details) {
$player_id = $val->ss_player_id;
if (! isset($arr[$player_id])) {
$arr[$player_id]['player_name'] = $val->details->player_name;
$arr[$player_id]['events_played_home'] = $val->events_played_home;
$arr[$player_id]['events_played_away'] = $val->events_played_away;
$arr[$player_id]['minutes_played_home'] = $val->minutes_played_home;
$arr[$player_id]['minutes_played_away'] = $val->minutes_played_away;
$arr[$player_id]['preferred_foot'] = $val->details->preferred_foot ?? '';
$arr[$player_id]['player_position'] = $val->details->position ?? '';
$arr[$player_id]['color_level'] = round($matches_count / 3);
} else {
$arr[$player_id]['events_played_home'] += $val->events_played_home;
$arr[$player_id]['events_played_away'] += $val->events_played_away;
$arr[$player_id]['minutes_played_home'] += $val->minutes_played_home;
$arr[$player_id]['minutes_played_away'] += $val->minutes_played_away;
}
foreach ($players as $ss_player_id => $val) {
if (! isset($arr[$ss_player_id])) {
$arr[$ss_player_id]['player_name'] = $val['player_name'];
$arr[$ss_player_id]['events_played_home'] = $val['events_played_home'];
$arr[$ss_player_id]['events_played_away'] = $val['events_played_away'];
$arr[$ss_player_id]['minutes_played_home'] = $val['minutes_played_home'];
$arr[$ss_player_id]['minutes_played_away'] = $val['minutes_played_away'];
$arr[$ss_player_id]['preferred_foot'] = $val['preferred_foot'] ?? '';
$arr[$ss_player_id]['player_position'] = $val['position'] ?? '';
$arr[$ss_player_id]['color_level'] = round($matches_count / 3);
} else {
$arr[$ss_player_id]['events_played_home'] += $val['events_played_home'];
$arr[$ss_player_id]['events_played_away'] += $val['events_played_away'];
$arr[$ss_player_id]['minutes_played_home'] += $val['minutes_played_home'];
$arr[$ss_player_id]['minutes_played_away'] += $val['minutes_played_away'];
}
}
-1
View File
@@ -146,7 +146,6 @@ class Statistic extends BaseDashboard
Actions::make([
Action::make('esc')
->hiddenLabel()
->hidden(fn (Get $get) => $get('similar_past_matches') != 'none')
->tooltip('Clear All (esc)')
->icon('phosphor-x')
->color('gray')
@@ -3,93 +3,104 @@
namespace App\Filament\Widgets\Boxes;
use App\Models\StatistikoDetail;
use App\Models\StatistikoEvent;
use App\Models\StatistikoPlayer;
class LoadPlayerAverages
{
public static function load(int &$team_id, string $season)
public static function load(int &$team_id, string|array $season)
{
$players = StatistikoDetail::where('ss_team_id', $team_id)->get();
$player_ids = [];
foreach ($players as $player) {
$player_ids[] = $player->ss_player_id;
}
$arr = [];
foreach ($players as $val) {
if (is_array($season)) {
$matches_for_season = StatistikoEvent::whereIn('season', $season)->pluck('match_id')->toArray();
$res = StatistikoPlayer::with('details')->whereIn('match_id', $matches_for_season)->whereIn('ss_player_id', $player_ids)->get();
} else {
$res = StatistikoPlayer::with('details')->whereIn('ss_player_id', $player_ids)->get();
}
$res = StatistikoPlayer::whereIn('ss_player_id', $val->ss_player_id)->get();
foreach ($res as $val) {
foreach ($res as $val) {
$ss_player_id = (int) $val->ss_player_id;
$activeteam_id = (int) $val->activeteam_id;
$minutes_played = (int) $val->minutes_played;
$home_id = (int) $val->event->home_id;
$away_id = (int) $val->event->away_id;
$startime = $val->event->starttime;
$ss_player_id = (int) $val->ss_player_id;
$activeteam_id = (int) $val->activeteam_id;
$minutes_played = (int) $val->minutes_played;
$season = $val->event->season;
$home_id = (int) $val->event->home_id;
$away_id = (int) $val->event->away_id;
$startime = $val->event->starttime;
if ($startime->greaterThan(now()->subDays(180))) {
$last_180_days = true;
} else {
$last_180_days = false;
}
if ($startime->greaterThan(now()->subDays(180))) {
$last_180_days = true;
} else {
$last_180_days = false;
}
if (! isset($arr[$ss_player_id])) {
self::array_template($arr, $ss_player_id);
}
if (! isset($arr[$ss_player_id])) {
self::array_template($arr, $ss_player_id);
}
if ($activeteam_id == $home_id) {
if ($activeteam_id == $home_id) {
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
if ($last_180_days) {
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
if ($last_180_days) {
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
}
} elseif ($activeteam_id == $away_id) {
}
} elseif ($activeteam_id == $away_id) {
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
if ($last_180_days) {
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
if ($last_180_days) {
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
}
}
}
$cards = $val->card_yellow + $val->card_yellowred;
}
$cards = $val->card_yellow + $val->card_yellowred;
if ($season == 'last180days' && $last_180_days) {
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
$arr[$ss_player_id]['season'] = 'last180days';
$arr[$ss_player_id]['total_events']++;
$arr[$ss_player_id]['total_min'] += $minutes_played;
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
$arr[$ss_player_id]['goals'] += $val->goals;
$arr[$ss_player_id]['fouls'] += $val->fouls;
$arr[$ss_player_id]['cards'] += $cards;
$arr[$ss_player_id]['offsides'] += $val->offsides;
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
}
if ($season != 'last180days') {
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
$arr[$ss_player_id]['season'] = $season;
$arr[$ss_player_id]['total_events']++;
$arr[$ss_player_id]['total_min'] += $minutes_played;
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
$arr[$ss_player_id]['goals'] += $val->goals;
$arr[$ss_player_id]['fouls'] += $val->fouls;
$arr[$ss_player_id]['cards'] += $cards;
$arr[$ss_player_id]['offsides'] += $val->offsides;
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
}
if ($season == 'last180days' && $last_180_days) {
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
$arr[$ss_player_id]['total_events']++;
$arr[$ss_player_id]['total_min'] += $minutes_played;
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
$arr[$ss_player_id]['goals'] += $val->goals;
$arr[$ss_player_id]['fouls'] += $val->fouls;
$arr[$ss_player_id]['cards'] += $cards;
$arr[$ss_player_id]['offsides'] += $val->offsides;
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
}
if ($season != 'last180days') {
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
$arr[$ss_player_id]['total_events']++;
$arr[$ss_player_id]['total_min'] += $minutes_played;
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
$arr[$ss_player_id]['goals'] += $val->goals;
$arr[$ss_player_id]['fouls'] += $val->fouls;
$arr[$ss_player_id]['cards'] += $cards;
$arr[$ss_player_id]['offsides'] += $val->offsides;
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
}
}
foreach ($players as $value) {
if (isset($arr[$value->ss_player_id])) {
$arr[$value->ss_player_id]['position'] = $value->position;
$arr[$value->ss_player_id]['player_name'] = $value->player_name;
}
}
@@ -99,7 +110,6 @@ class LoadPlayerAverages
public static function array_template(array &$arr, int $ss_player_id)
{
$arr[$ss_player_id]['ss_player_id'] = 0;
$arr[$ss_player_id]['season'] = '';
$arr[$ss_player_id]['total_events'] = 0;
$arr[$ss_player_id]['total_min'] = 0;
$arr[$ss_player_id]['average_min'] = 0;
+62 -69
View File
@@ -9,12 +9,10 @@ use App\Filament\Widgets\PlayerProps\LineUpMap;
use App\Filament\Widgets\PlayerProps\PositionHirarchie;
use App\Livewire\PlayerCalculator;
use App\Models\ExpectedMinimumPosition;
use App\Models\SofaScorePlayerPerSeason;
use App\Models\SofaScorePlayerPosition;
use App\Models\SofaScoreRosa;
use App\Models\SsLineupMemory;
use App\Models\StatisticFixtures;
use App\Models\StatistikoDetail;
use Filament\Notifications\Notification;
use Filament\Widgets\Widget;
use Illuminate\Support\Collection;
@@ -392,24 +390,19 @@ class PlayerPropsDrop extends Widget
$team_home_away = 'away';
}
// $player_totals = LoadPlayerAverages::load($team_id, 'total');
$team_player_ids = StatistikoDetail::where('ss_team_id', $team_id)->pluck('ss_player_id')->toArray();
$player_totals = SofaScorePlayerPerSeason::with('details')->where('season', 'total')->whereIn('ss_player_id', $team_player_ids)->get();
$players = LoadPlayerAverages::load($team_id, 'total');
$count_player = 0;
$tmp = [];
foreach ($player_totals as $ss_player_id => $value) {
$tmp[] = $ss_player_id;
if ($value->details != null && $value->details->position != 'GK' && (int) $value->details->is_active) {
foreach ($players as $ss_player_id => $value) {
if ($value['position'] != 'GK') {
$count_player++;
}
}
$results = [];
foreach ($player_totals as $val) {
if ($val->details != null && $val->details->position != 'GK' && (int) $val->details->is_active) {
foreach ($players as $val) {
if ($val['position'] != 'GK') {
/***
"goals" => 0
@@ -421,12 +414,12 @@ class PlayerPropsDrop extends Widget
"total_shots" => 4
*/
$ss_player_id = $val->ss_player_id;
$position = $val->details->position;
$ss_player_id = $val['ss_player_id'];
$position = $val['position'];
$tmp = [];
$tmp['id'] = $ss_player_id;
$tmp['name'] = $val->details->player_name;
$tmp['name'] = $val['player_name'];
$tmp['id_team'] = $team_id;
$tmp['asp_team'] = $asp_team;
@@ -446,10 +439,10 @@ class PlayerPropsDrop extends Widget
// Il valore Y dovrebbe essere configurabile in una interfaccia. Il valore iniziale lo fissiamo a Y = 180
// Somma Minuti Giocati da Player (SMG) nel DB
$tmp['somma_minuti'] = $val->total_min;
$tmp['shots_on_target'] = $val->shots_on_target;
$tmp['shots_off_target'] = $val->shots_off_target;
$tmp['shots_blocked'] = $val->shots_blocked;
$tmp['somma_minuti'] = $val['total_min'];
$tmp['shots_on_target'] = $val['shots_on_target'];
$tmp['shots_off_target'] = $val['shots_off_target'];
$tmp['shots_blocked'] = $val['shots_blocked'];
// il valore corrispondente al ruolo del Player (esempio un giocatore in Details ha ruolo = RW
// quindi Aspettativa Statistica (AS) per RW = 0.219)
@@ -479,8 +472,8 @@ class PlayerPropsDrop extends Widget
switch ($bettype) {
case 'goals':
$asp_gioco = $val->goals / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['goals'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -489,8 +482,8 @@ class PlayerPropsDrop extends Widget
}
break;
case 'cards':
$asp_gioco = $val->cards / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['cards'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -499,8 +492,8 @@ class PlayerPropsDrop extends Widget
}
break;
case 'fouls':
$asp_gioco = $val->fouls / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['fouls'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -509,8 +502,8 @@ class PlayerPropsDrop extends Widget
}
break;
case 'offsides':
$asp_gioco = $val->offsides / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['offsides'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -519,8 +512,8 @@ class PlayerPropsDrop extends Widget
}
break;
case 'total_shots':
$asp_gioco = $val->total_shots / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['total_shots'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -529,8 +522,8 @@ class PlayerPropsDrop extends Widget
}
break;
case 'shots_on_target':
$asp_gioco = $val->shots_on_target / $val->total_min * 90;
if ($asp_gioco == 0 || $val->total_min < $this->y_value) {
$asp_gioco = $val['shots_on_target'] / $val['total_min'] * 90;
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
$tmp['asp_gioco_'.$bettype] = 0;
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
} else {
@@ -629,41 +622,43 @@ class PlayerPropsDrop extends Widget
$pos = $this->players[$k]['pos_ori'];
}
$tamx = number_format($map[$pos]['gls'], 3);
$final = number_format($result['asp_player_goals'], 3);
$results[$key]['finale_tamx_gls'] = $tamx;
$results[$key]['finale_calc_gls'] = $final;
$this->players[$k]['gls'] = (float) $final > (float) $tamx ? $final : $tamx;
if ($pos != 'GK') {
$tamx = number_format($map[$pos]['gls'], 3);
$final = number_format($result['asp_player_goals'], 3);
$results[$key]['finale_tamx_gls'] = $tamx;
$results[$key]['finale_calc_gls'] = $final;
$this->players[$k]['gls'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['crd'], 3);
$final = number_format($result['asp_player_cards'], 3);
$results[$key]['finale_tamx_crd'] = $tamx;
$results[$key]['finale_calc_crd'] = $final;
$this->players[$k]['crd'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['crd'], 3);
$final = number_format($result['asp_player_cards'], 3);
$results[$key]['finale_tamx_crd'] = $tamx;
$results[$key]['finale_calc_crd'] = $final;
$this->players[$k]['crd'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['fls'], 3);
$final = number_format($result['asp_player_fouls'], 3);
$results[$key]['finale_tamx_fls'] = $tamx;
$results[$key]['finale_calc_fls'] = $final;
$this->players[$k]['fls'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['fls'], 3);
$final = number_format($result['asp_player_fouls'], 3);
$results[$key]['finale_tamx_fls'] = $tamx;
$results[$key]['finale_calc_fls'] = $final;
$this->players[$k]['fls'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['ofs'], 3);
$final = number_format($result['asp_player_offsides'], 3);
$results[$key]['finale_tamx_ofs'] = $tamx;
$results[$key]['finale_calc_ofs'] = $final;
$this->players[$k]['ofs'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['ofs'], 3);
$final = number_format($result['asp_player_offsides'], 3);
$results[$key]['finale_tamx_ofs'] = $tamx;
$results[$key]['finale_calc_ofs'] = $final;
$this->players[$k]['ofs'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['tsh'], 3);
$final = number_format($result['asp_player_total_shots'], 3);
$results[$key]['finale_tamx_tsh'] = $tamx;
$results[$key]['finale_calc_tsh'] = $final;
$this->players[$k]['tsh'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['tsh'], 3);
$final = number_format($result['asp_player_total_shots'], 3);
$results[$key]['finale_tamx_tsh'] = $tamx;
$results[$key]['finale_calc_tsh'] = $final;
$this->players[$k]['tsh'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['snt'], 3);
$final = number_format($result['asp_player_shots_on_target'], 3);
$results[$key]['finale_tamx_snt'] = $tamx;
$results[$key]['finale_calc_snt'] = $final;
$this->players[$k]['snt'] = (float) $final > (float) $tamx ? $final : $tamx;
$tamx = number_format($map[$pos]['snt'], 3);
$final = number_format($result['asp_player_shots_on_target'], 3);
$results[$key]['finale_tamx_snt'] = $tamx;
$results[$key]['finale_calc_snt'] = $final;
$this->players[$k]['snt'] = (float) $final > (float) $tamx ? $final : $tamx;
}
}
}
}
@@ -687,18 +682,16 @@ class PlayerPropsDrop extends Widget
public function prepareLineUp()
{
$team_player_ids = StatistikoDetail::where('ss_team_id', $this->team_id)->pluck('ss_player_id')->toArray();
$players = SofaScorePlayerPerSeason::with('details')->where('season', 'last_180_days')->whereIn('ss_player_id', $team_player_ids)->get();
$players = LoadPlayerAverages::load($this->team_id, 'last180days');
$arr = collect();
foreach ($players as $value) {
if ($value?->details->position ?? 0) {
if ($value['position'] != '') {
$arr->push([
'id' => $value->ss_player_id,
'min' => $value->average_min,
'pos' => $value->details->position,
'name' => $value->details->player_name,
'id' => $value['ss_player_id'],
'min' => $value['average_min'],
'pos' => $value['position'],
'name' => $value['player_name'],
]);
}
}