diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoImports/Tables/StatistikoImportsTable.php b/app/Filament/Clusters/StaticData/Resources/StatistikoImports/Tables/StatistikoImportsTable.php
index 5b89df16..6c3d97c9 100644
--- a/app/Filament/Clusters/StaticData/Resources/StatistikoImports/Tables/StatistikoImportsTable.php
+++ b/app/Filament/Clusters/StaticData/Resources/StatistikoImports/Tables/StatistikoImportsTable.php
@@ -2,11 +2,13 @@
namespace App\Filament\Clusters\StaticData\Resources\StatistikoImports\Tables;
+use App\Filament\Imports\StatistikoImporter;
use Filament\Actions\Action;
use Filament\Actions\ActionGroup;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
+use Filament\Notifications\Notification;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\SelectColumn;
use Filament\Tables\Columns\TextColumn;
@@ -18,6 +20,7 @@ class StatistikoImportsTable
public static function configure(Table $table): Table
{
return $table
+ ->striped()
->columns([
IconColumn::make('sport.icon')
->label('Sport')
@@ -57,11 +60,25 @@ class StatistikoImportsTable
->recordActions([
ActionGroup::make([
Action::make('Import')
- ->label('Just Import (very fast)')
- ->icon('phosphor-database'),
+ ->label('Import (fast)')
+ ->icon('phosphor-database')
+ ->action(function ($record) {
+ StatistikoImporter::run('import', $record);
+ })->successNotification(
+ Notification::make()
+ ->info()
+ ->title('Import started')
+ ),
Action::make('Update')
- ->label('Import and Update (slow)')
- ->icon('phosphor-database'),
+ ->label('Update or Import (slow)')
+ ->icon('phosphor-database')
+ ->action(function ($record) {
+ StatistikoImporter::run('update', $record);
+ })->successNotification(
+ Notification::make()
+ ->info()
+ ->title('Import & Update started')
+ ),
DeleteAction::make()
->label('Delete file'),
]),
diff --git a/app/Filament/Imports/StatistikoImporter.php b/app/Filament/Imports/StatistikoImporter.php
new file mode 100644
index 00000000..67eb90ba
--- /dev/null
+++ b/app/Filament/Imports/StatistikoImporter.php
@@ -0,0 +1,189 @@
+getMessage())->limit(100)->value());
+ }
+
+ self::endBenchmark();
+ }
+
+ protected static function startBenchmark(string $table): void
+ {
+ self::$startRowCount = DB::connection('mongodb')->table($table)->count();
+ self::$benchmarkStartTime = microtime(true);
+ self::$benchmarkStartMemory = memory_get_usage();
+ DB::connection('mongodb')->enableQueryLog();
+ }
+
+ protected static function endBenchmark(string $table = 'customers'): void
+ {
+ $executionTime = microtime(true) - self::$benchmarkStartTime;
+ $memoryUsage = round((memory_get_usage() - self::$benchmarkStartMemory) / 1024 / 1024, 2);
+
+ $logs = DB::connection('mongodb')->getQueryLog();
+ $queriesCount = \count($logs);
+
+ // Get row count after we've stopped tracking queries
+ $rowDiff = DB::connection('mongodb')->table($table)->count() - self::$startRowCount;
+
+ $formattedTime = match (true) {
+ $executionTime >= 60 => sprintf('%dm %ds', floor($executionTime / 60), $executionTime % 60),
+ $executionTime >= 1 => round($executionTime, 2).'s',
+ default => round($executionTime * 1000).'ms',
+ };
+
+ $str = '⚡ TIME: '.$formattedTime;
+ $str .= '
MEM: '.$memoryUsage.'MB';
+ $str .= '
SQL: '.number_format($queriesCount);
+ $str .= '
ROWS: '.number_format($rowDiff);
+
+ $recipient = auth()->user();
+ Notification::make()
+ ->success()
+ ->title('Import compleated')
+ ->body(new HtmlString($str))
+ ->sendToDatabase($recipient);
+ }
+
+ private static function handleImport(string $filePath, $table, $mode): void
+ {
+ $now = now()->format('Y-m-d H:i:s');
+
+ $chunkSize = 1000;
+
+ SimpleExcelReader::create($filePath)
+ ->getRows()
+ ->chunk($chunkSize)
+ ->each(function ($rowProperties) {
+ dd($rowProperties);
+ // processing rows
+ });
+
+ // LazyCollection::make(function () use ($filePath) {
+ // $handle = fopen($filePath, 'r');
+ // fgets($handle); // skip header
+
+ // while (($line = fgets($handle)) !== false) {
+ // yield str_getcsv($line);
+ // }
+ // fclose($handle);
+ // })->each(function ($row) {
+ // dd($row);
+ // });
+ // ->map(fn ($row) => [
+ // 'custom_id' => $row[0],
+ // 'name' => $row[1],
+ // 'email' => $row[2],
+ // 'company' => $row[3],
+ // 'city' => $row[4],
+ // 'country' => $row[5],
+ // 'birthday' => $row[6],
+ // 'created_at' => $now,
+ // 'updated_at' => $now,
+ // ])
+ // ->chunk($chunkSize)
+ // ->each(fn ($chunk) => $result = StatistikoPlayer::upsert(
+ // [
+ // ['title' => 'Inspector Maigret', 'recommended' => false, 'runtime' => 128],
+ // ['title' => 'Petit Maman', 'recommended' => true, 'runtime' => 72],
+ // ],
+ // 'title',
+ // 'recommended',
+ // ));
+ }
+
+ private static function import11Concurrent(string $filePath): void
+ {
+ // 100 168ms
+ // 1K 172ms
+ // 10K 234ms
+ // 100K 595ms
+ // 1M 4.36s
+ // 2M 8.8s
+ $now = now()->format('Y-m-d H:i:s');
+ $numberOfProcesses = 10;
+
+ $tasks = [];
+ for ($i = 0; $i < $numberOfProcesses; $i++) {
+ $tasks[] = function () use ($filePath, $i, $numberOfProcesses, $now) {
+ DB::reconnect();
+
+ $handle = fopen($filePath, 'r');
+ fgets($handle); // Skip header
+ $currentLine = 0;
+ $customers = [];
+
+ while (($line = fgets($handle)) !== false) {
+ // Each process takes every Nth line
+ if ($currentLine++ % $numberOfProcesses !== $i) {
+ continue;
+ }
+
+ $row = str_getcsv($line);
+ $customers[] = [
+ 'custom_id' => $row[0],
+ 'name' => $row[1],
+ 'email' => $row[2],
+ 'company' => $row[3],
+ 'city' => $row[4],
+ 'country' => $row[5],
+ 'birthday' => $row[6],
+ 'created_at' => $now,
+ 'updated_at' => $now,
+ ];
+
+ if (count($customers) === 1000) {
+ DB::table('customers')->insert($customers);
+ $customers = [];
+ }
+ }
+
+ if (! empty($customers)) {
+ DB::table('customers')->insert($customers);
+ }
+
+ fclose($handle);
+
+ return true;
+ };
+ }
+
+ Concurrency::run($tasks);
+
+ }
+}
diff --git a/app/Models/StatistikoPlayer.php b/app/Models/StatistikoPlayer.php
index 0cae3509..a3f372b7 100644
--- a/app/Models/StatistikoPlayer.php
+++ b/app/Models/StatistikoPlayer.php
@@ -13,18 +13,18 @@ class StatistikoPlayer extends Model
protected $table = 'player';
protected $fillable = [
- 'id_giocatore',
- 'giocatore',
- 'data_di_nascita',
- 'altezza',
- 'nazionalita',
- 'posizione',
+ 'player_id',
+ 'name',
+ 'full_name',
+ 'birthdate',
+ 'height',
+ 'nationality',
+ 'position',
'sport_radar_id',
'id_squadra_tm',
- 'nome_completo',
- 'rigorista',
+ 'rigorist',
'national_team_id',
- 'data_aggiornamento',
+ 'last_update',
'league_code',
'team_code',
'team_name',
@@ -33,8 +33,8 @@ class StatistikoPlayer extends Model
protected function casts(): array
{
return [
- 'data_di_nascita' => 'date',
- 'data_aggiornamento' => 'date',
+ 'birthdate' => 'date',
+ 'last_update' => 'date',
];
}
}
diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php
index fdbc3e3a..118f4f3e 100644
--- a/app/Providers/Filament/AdminPanelProvider.php
+++ b/app/Providers/Filament/AdminPanelProvider.php
@@ -2,7 +2,7 @@
namespace App\Providers\Filament;
-use Agencetwogether\HooksHelper\HooksHelperPlugin;
+// use Agencetwogether\HooksHelper\HooksHelperPlugin;
use App\Filament\Exports\BetfairExporter;
use App\Http\Middleware\RecordUserActivity;
use Awcodes\LightSwitch\Enums\Alignment;
@@ -18,7 +18,7 @@ use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
-use Filament\Pages\Dashboard;
+// use Filament\Pages\Dashboard;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Enums\Width;
@@ -65,7 +65,7 @@ class AdminPanelProvider extends PanelProvider
->emailVerification()
->emailChangeVerification()
->databaseNotifications()
- // ->databaseNotificationsPolling('15s') default is 30
+ ->databaseNotificationsPolling('10s') // default is 30
->sidebarCollapsibleOnDesktop()
->profile(isSimple: false)
->default()
diff --git a/composer.lock b/composer.lock
index 1971595c..3356634b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2955,20 +2955,20 @@
},
{
"name": "laravel/framework",
- "version": "v11.51.0",
+ "version": "v12.56.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "c8f9a04594b7044a189a3194cfb3594251eb74e5"
+ "reference": "dac16d424b59debb2273910dde88eb7050a2a709"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/c8f9a04594b7044a189a3194cfb3594251eb74e5",
- "reference": "c8f9a04594b7044a189a3194cfb3594251eb74e5",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/dac16d424b59debb2273910dde88eb7050a2a709",
+ "reference": "dac16d424b59debb2273910dde88eb7050a2a709",
"shasum": ""
},
"require": {
- "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12|^0.13|^0.14",
+ "brick/math": "^0.11|^0.12|^0.13|^0.14",
"composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.4",
@@ -2983,32 +2983,34 @@
"fruitcake/php-cors": "^1.3",
"guzzlehttp/guzzle": "^7.8.2",
"guzzlehttp/uri-template": "^1.0",
- "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0",
+ "laravel/prompts": "^0.3.0",
"laravel/serializable-closure": "^1.3|^2.0",
- "league/commonmark": "^2.7",
+ "league/commonmark": "^2.8.1",
"league/flysystem": "^3.25.1",
"league/flysystem-local": "^3.25.1",
"league/uri": "^7.5.1",
"monolog/monolog": "^3.0",
- "nesbot/carbon": "^2.72.6|^3.8.4",
+ "nesbot/carbon": "^3.8.4",
"nunomaduro/termwind": "^2.0",
"php": "^8.2",
"psr/container": "^1.1.1|^2.0.1",
"psr/log": "^1.0|^2.0|^3.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
"ramsey/uuid": "^4.7",
- "symfony/console": "^7.0.3",
- "symfony/error-handler": "^7.0.3",
- "symfony/finder": "^7.0.3",
+ "symfony/console": "^7.2.0",
+ "symfony/error-handler": "^7.2.0",
+ "symfony/finder": "^7.2.0",
"symfony/http-foundation": "^7.2.0",
- "symfony/http-kernel": "^7.0.3",
- "symfony/mailer": "^7.0.3",
- "symfony/mime": "^7.0.3",
- "symfony/polyfill-php83": "^1.31",
- "symfony/process": "^7.0.3",
- "symfony/routing": "^7.0.3",
- "symfony/uid": "^7.0.3",
- "symfony/var-dumper": "^7.0.3",
+ "symfony/http-kernel": "^7.2.0",
+ "symfony/mailer": "^7.2.0",
+ "symfony/mime": "^7.2.0",
+ "symfony/polyfill-php83": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-php85": "^1.33",
+ "symfony/process": "^7.2.0",
+ "symfony/routing": "^7.2.0",
+ "symfony/uid": "^7.2.0",
+ "symfony/var-dumper": "^7.2.0",
"tijsverkoyen/css-to-inline-styles": "^2.2.5",
"vlucas/phpdotenv": "^5.6.1",
"voku/portable-ascii": "^2.0.2"
@@ -3040,6 +3042,7 @@
"illuminate/filesystem": "self.version",
"illuminate/hashing": "self.version",
"illuminate/http": "self.version",
+ "illuminate/json-schema": "self.version",
"illuminate/log": "self.version",
"illuminate/macroable": "self.version",
"illuminate/mail": "self.version",
@@ -3049,6 +3052,7 @@
"illuminate/process": "self.version",
"illuminate/queue": "self.version",
"illuminate/redis": "self.version",
+ "illuminate/reflection": "self.version",
"illuminate/routing": "self.version",
"illuminate/session": "self.version",
"illuminate/support": "self.version",
@@ -3072,17 +3076,18 @@
"league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
- "orchestra/testbench-core": "^9.18.0",
- "pda/pheanstalk": "^5.0.6",
+ "opis/json-schema": "^2.4.1",
+ "orchestra/testbench-core": "^10.9.0",
+ "pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15",
- "phpstan/phpstan": "2.1.41",
- "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1",
- "predis/predis": "^2.3",
- "resend/resend-php": "^0.10.0",
- "symfony/cache": "^7.0.3",
- "symfony/http-client": "^7.0.3",
- "symfony/psr-http-message-bridge": "^7.0.3",
- "symfony/translation": "^7.0.3"
+ "phpstan/phpstan": "^2.1.41",
+ "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
+ "predis/predis": "^2.3|^3.0",
+ "resend/resend-php": "^0.10.0|^1.0",
+ "symfony/cache": "^7.2.0",
+ "symfony/http-client": "^7.2.0",
+ "symfony/psr-http-message-bridge": "^7.2.0",
+ "symfony/translation": "^7.2.0"
},
"suggest": {
"ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
@@ -3097,7 +3102,7 @@
"ext-pdo": "Required to use all database features.",
"ext-posix": "Required to use all features of the queue worker.",
"ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).",
- "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+ "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).",
"filp/whoops": "Required for friendly error pages in development (^2.14.3).",
"laravel/tinker": "Required to use the tinker console command (^2.0).",
"league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).",
@@ -3108,22 +3113,22 @@
"mockery/mockery": "Required to use mocking (^1.6).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).",
"php-http/discovery": "Required to use PSR-7 bridging features (^1.15).",
- "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).",
- "predis/predis": "Required to use the predis connector (^2.3).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).",
+ "predis/predis": "Required to use the predis connector (^2.3|^3.0).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
- "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).",
- "symfony/cache": "Required to PSR-6 cache bridge (^7.0).",
- "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).",
- "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).",
- "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).",
- "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).",
- "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)."
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
+ "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
+ "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).",
+ "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "11.x-dev"
+ "dev-master": "12.x-dev"
}
},
"autoload": {
@@ -3134,6 +3139,7 @@
"src/Illuminate/Filesystem/functions.php",
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Log/functions.php",
+ "src/Illuminate/Reflection/helpers.php",
"src/Illuminate/Support/functions.php",
"src/Illuminate/Support/helpers.php"
],
@@ -3142,7 +3148,8 @@
"Illuminate\\Support\\": [
"src/Illuminate/Macroable/",
"src/Illuminate/Collections/",
- "src/Illuminate/Conditionable/"
+ "src/Illuminate/Conditionable/",
+ "src/Illuminate/Reflection/"
]
}
},
@@ -3166,7 +3173,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-03-26T14:54:53+00:00"
+ "time": "2026-03-26T14:51:54+00:00"
},
{
"name": "laravel/prompts",
@@ -4413,27 +4420,27 @@
},
{
"name": "mongodb/laravel-mongodb",
- "version": "5.1.1",
+ "version": "5.7.1",
"source": {
"type": "git",
- "url": "https://github.com/mongodb/laravel-mongodb.git",
- "reference": "cc7e5ffd0e8e3a9acfebd7aa5a5aabac2fc5eac4"
+ "url": "https://github.com/mongodb/laravel-mongodb",
+ "reference": "6e371e8e6deb9193f99a84c578e6c9d0a960e43a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mongodb/laravel-mongodb/zipball/cc7e5ffd0e8e3a9acfebd7aa5a5aabac2fc5eac4",
- "reference": "cc7e5ffd0e8e3a9acfebd7aa5a5aabac2fc5eac4",
+ "url": "https://api.github.com/repos/mongodb/laravel-mongodb/zipball/6e371e8e6deb9193f99a84c578e6c9d0a960e43a",
+ "reference": "6e371e8e6deb9193f99a84c578e6c9d0a960e43a",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.0.0",
- "ext-mongodb": "^1.15",
- "illuminate/cache": "^10.36|^11",
- "illuminate/container": "^10.0|^11",
- "illuminate/database": "^10.30|^11",
- "illuminate/events": "^10.0|^11",
- "illuminate/support": "^10.0|^11",
- "mongodb/mongodb": "^1.18",
+ "ext-mongodb": "^1.21|^2",
+ "illuminate/cache": "^10.36|^11|^12|^13.0",
+ "illuminate/container": "^10.0|^11|^12|^13.0",
+ "illuminate/database": "^10.30|^11|^12|^13.0",
+ "illuminate/events": "^10.0|^11|^12|^13.0",
+ "illuminate/support": "^10.0|^11|^12|^13.0",
+ "mongodb/mongodb": "^1.21|^2",
"php": "^8.1"
},
"conflict": {
@@ -4443,20 +4450,19 @@
"jenssegers/mongodb": "self.version"
},
"require-dev": {
- "doctrine/coding-standard": "12.0.x-dev",
+ "doctrine/coding-standard": "^12.0",
+ "laravel/scout": "^10.3",
"league/flysystem-gridfs": "^3.28",
"league/flysystem-read-only": "^3.0",
"mockery/mockery": "^1.4.4",
- "mongodb/builder": "^0.2",
- "orchestra/testbench": "^8.0|^9.0",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^10.3",
- "rector/rector": "^1.2",
- "spatie/laravel-query-builder": "^5.6"
+ "orchestra/testbench": "^8.0|^9.0|^10.0|^11.0",
+ "phpstan/phpstan": "^1.10|^2.1",
+ "phpunit/phpunit": "^10.3|^11.5.3|^12.5.12",
+ "rector/rector": "^1.2|^2.3",
+ "spatie/laravel-query-builder": "^5.6|^6"
},
"suggest": {
- "league/flysystem-gridfs": "Filesystem storage in MongoDB with GridFS",
- "mongodb/builder": "Provides a fluent aggregation builder for MongoDB pipelines"
+ "league/flysystem-gridfs": "Filesystem storage in MongoDB with GridFS"
},
"type": "library",
"extra": {
@@ -4482,6 +4488,11 @@
"email": "andreas.braun@mongodb.com",
"role": "Leader"
},
+ {
+ "name": "Pauline Vos",
+ "email": "pauline.vos@mongodb.com",
+ "role": "Maintainer"
+ },
{
"name": "Jérôme Tamarelle",
"email": "jerome.tamarelle@mongodb.com",
@@ -4510,41 +4521,40 @@
],
"support": {
"issues": "https://www.mongodb.com/support",
- "security": "https://www.mongodb.com/security",
- "source": "https://github.com/mongodb/laravel-mongodb/tree/5.1.1"
+ "security": "https://www.mongodb.com/security"
},
- "time": "2025-01-06T09:22:28+00:00"
+ "time": "2026-04-15T12:18:12+00:00"
},
{
"name": "mongodb/mongodb",
- "version": "1.20.0",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/mongodb/mongo-php-library.git",
- "reference": "75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6"
+ "reference": "bbb13f969e37e047fd822527543df55fdc1c9298"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6",
- "reference": "75da9ea3b63d97b05e0e8648d8c09a17bc54c0b6",
+ "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/bbb13f969e37e047fd822527543df55fdc1c9298",
+ "reference": "bbb13f969e37e047fd822527543df55fdc1c9298",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.0",
- "ext-hash": "*",
- "ext-json": "*",
- "ext-mongodb": "^1.20.0",
- "php": "^7.4 || ^8.0",
+ "ext-mongodb": "^2.2",
+ "php": "^8.1",
"psr/log": "^1.1.4|^2|^3",
- "symfony/polyfill-php80": "^1.27",
- "symfony/polyfill-php81": "^1.27"
+ "symfony/polyfill-php85": "^1.32"
+ },
+ "replace": {
+ "mongodb/builder": "*"
},
"require-dev": {
"doctrine/coding-standard": "^12.0",
- "rector/rector": "^1.1",
+ "phpunit/phpunit": "^10.5.35",
+ "rector/rector": "^2.3.4",
"squizlabs/php_codesniffer": "^3.7",
- "symfony/phpunit-bridge": "^5.2",
- "vimeo/psalm": "^5.13"
+ "vimeo/psalm": "~6.14.2"
},
"type": "library",
"extra": {
@@ -4588,9 +4598,9 @@
],
"support": {
"issues": "https://github.com/mongodb/mongo-php-library/issues",
- "source": "https://github.com/mongodb/mongo-php-library/tree/1.20.0"
+ "source": "https://github.com/mongodb/mongo-php-library/tree/2.2.0"
},
- "time": "2024-09-25T12:54:08+00:00"
+ "time": "2026-02-11T11:39:56+00:00"
},
{
"name": "monolog/monolog",
@@ -6569,31 +6579,34 @@
},
{
"name": "spatie/laravel-permission",
- "version": "6.25.0",
+ "version": "7.3.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "d7d4cb0d58616722f1afc90e0484e4825155b9b3"
+ "reference": "5272955119759cd217e84e8bbac19443c305ebc3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/d7d4cb0d58616722f1afc90e0484e4825155b9b3",
- "reference": "d7d4cb0d58616722f1afc90e0484e4825155b9b3",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/5272955119759cd217e84e8bbac19443c305ebc3",
+ "reference": "5272955119759cd217e84e8bbac19443c305ebc3",
"shasum": ""
},
"require": {
- "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
- "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
- "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
- "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
- "php": "^8.0"
+ "illuminate/auth": "^12.0|^13.0",
+ "illuminate/container": "^12.0|^13.0",
+ "illuminate/contracts": "^12.0|^13.0",
+ "illuminate/database": "^12.0|^13.0",
+ "php": "^8.3",
+ "spatie/laravel-package-tools": "^1.0"
},
"require-dev": {
- "laravel/passport": "^11.0|^12.0|^13.0",
+ "larastan/larastan": "^3.9",
+ "laravel/passport": "^13.0",
"laravel/pint": "^1.0",
- "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0|^11.0",
- "pestphp/pest": "^2.0|^3.0|^4.0",
- "pestphp/pest-plugin-laravel": "^2.0|^3.0|^4.0"
+ "orchestra/testbench": "^10.0|^11.0",
+ "pestphp/pest": "^3.0|^4.0",
+ "pestphp/pest-plugin-laravel": "^3.0|^4.1",
+ "phpstan/phpstan": "^2.1"
},
"type": "library",
"extra": {
@@ -6603,8 +6616,8 @@
]
},
"branch-alias": {
- "dev-main": "6.x-dev",
- "dev-master": "6.x-dev"
+ "dev-main": "7.x-dev",
+ "dev-master": "7.x-dev"
}
},
"autoload": {
@@ -6627,7 +6640,7 @@
"role": "Developer"
}
],
- "description": "Permission handling for Laravel 8.0 and up",
+ "description": "Permission handling for Laravel 12 and up",
"homepage": "https://github.com/spatie/laravel-permission",
"keywords": [
"acl",
@@ -6641,7 +6654,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/6.25.0"
+ "source": "https://github.com/spatie/laravel-permission/tree/7.3.0"
},
"funding": [
{
@@ -6649,7 +6662,7 @@
"type": "github"
}
],
- "time": "2026-03-17T22:46:46+00:00"
+ "time": "2026-04-07T15:19:42+00:00"
},
{
"name": "spatie/shiki-php",
@@ -8498,86 +8511,6 @@
],
"time": "2026-04-10T16:19:22+00:00"
},
- {
- "name": "symfony/polyfill-php81",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
{
"name": "symfony/polyfill-php83",
"version": "v1.36.0",
@@ -8658,6 +8591,86 @@
],
"time": "2026-04-10T17:25:58+00:00"
},
+ {
+ "name": "symfony/polyfill-php84",
+ "version": "v1.36.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06",
+ "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-04-10T18:47:49+00:00"
+ },
{
"name": "symfony/polyfill-php85",
"version": "v1.36.0",
@@ -13580,12 +13593,12 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {},
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.3"
},
- "platform-dev": {},
- "plugin-api-version": "2.9.0"
+ "platform-dev": [],
+ "plugin-api-version": "2.6.0"
}
diff --git a/database/migrations/2026_04_20_085306_mongo_db_statistiko_player.php b/database/migrations/2026_04_20_085306_mongo_db_statistiko_player.php
new file mode 100644
index 00000000..2e57e7cc
--- /dev/null
+++ b/database/migrations/2026_04_20_085306_mongo_db_statistiko_player.php
@@ -0,0 +1,23 @@
+unique('player_id');
+ $collection->index('name');
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('player');
+ }
+};