players cache wip

This commit is contained in:
salam committed 2026-08-31 08:23:01 +02:00
1 parent 713da3b266
commit 1949a06480
6 files changed
+70 -5

No files matched your search

+4
View File
@@ -2,6 +2,7 @@
namespace App\Actions;
use App\Models\SofaScorePlayerCache;
use App\Models\SofaScorePlayerPerSeason;
use App\Models\StatistikoDetail;
use App\Models\StatistikoPlayer;
@@ -10,6 +11,9 @@ class PlayerPerSeason
{
public static function run()
{
// when data changes clear player chche
SofaScorePlayerCache::truncate();
$res = StatistikoDetail::query()->select('ss_player_id', 'ss_team_id')->get();
foreach ($res as $val) {
@@ -15,9 +15,9 @@ class GetSeason
$season = [];
if ($seasonmode == 'halfyear') {
if ((int) date('m') > 7)
$season[] = $date->format('y') . '/' . $date->format('y') + 1;
$season[] = (string) $date->format('y') . '/' . $date->format('y') + 1;
else
$season[] = $date->format('y') - 1 . '/' . $date->format('y');
$season[] = (string) $date->format('y') - 1 . '/' . $date->format('y');
} else {
$season[] = (string) $date->year;
}
+14 -2
View File
@@ -4,6 +4,7 @@ namespace App\Filament\Pages\Selections;
use App\Filament\Pages\Selections\Helper\GetSeason;
use App\Filament\Pages\Selections\LoadPositions;
use App\Models\SofaScorePlayerCache;
use App\Models\SofaScorePlayerPerSeason;
use App\Models\StatistikoEvent;
use Filament\Schemas\Components\Utilities\Get;
@@ -16,7 +17,15 @@ class LoadPlayer
$team_position = $get('team_position');
$sofascore_category_id = $get('sofascore_category_id');
$season = $get('season');
$season = GetSeason::load($season, $sofascore_category_id);
$seasonmode = $get('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) {
@@ -38,7 +47,6 @@ class LoadPlayer
$player = SofaScorePlayerPerSeason::with('details')->where('ss_team_id', $team_id)->whereIn('season', $season)->get();
$arr = [];
foreach ($player as $val) {
if ($val->details) {
@@ -108,6 +116,10 @@ class LoadPlayer
$result[$position][$player_id] = '<span class="text-green-600 dark:text-green-500 cursor-pointer"><b>' . $val['player_name'] . '</b> ' . $position . '<br>' . $infostring . '</span>';
}
}
if ($result)
SofaScorePlayerCache::updateOrCreate(['hash' => $hash], ['players' => $result]);
return $result;
}
-1
View File
@@ -6,7 +6,6 @@ use App\Actions\LoadSofaScoreCategory;
use App\Actions\LoadStatisticFixturesLeaguesOptions;
use App\Actions\LoadStatisticFixturesMatchOptions;
use App\Filament\Pages\Selections\LoadPlayer;
use App\Filament\Pages\Selections\LoadSeasons;
use App\Models\SofaScoreCategory;
use App\Models\SofaScoreRosa;
use App\Models\StatisticFixtures;
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class SofaScorePlayerCache extends Model
{
public $incrementing = false;
protected $primaryKey = 'hash';
protected $casts = [
'players' => 'array'
];
protected $fillable = [
'hash',
'players',
];
}
@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('sofa_score_player_caches', function (Blueprint $table) {
$table->id();
$table->string('hash')->index();
$table->json('players');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sofa_score_player_caches');
}
};