From 8370836efd99b52a2624880e8b9c7f091ec00c20 Mon Sep 17 00:00:00 2001 From: salam Date: Wed, 25 Mar 2026 18:29:01 +0100 Subject: [PATCH] Player mongodb --- .../Resources/Players/PlayerResource.php | 2 + .../Resources/UbEvents/Pages/ListUbEvents.php | 2 +- .../UbPlayers/Pages/CreateUbPlayer.php | 11 ++ .../UbPlayers/Pages/EditUbPlayer.php | 19 +++ .../UbPlayers/Pages/ListUbPlayers.php | 55 ++++++++ .../UbPlayers/Schemas/UbPlayerForm.php | 40 ++++++ .../UbPlayers/Tables/UbPlayersTable.php | 49 +++++++ .../Resources/UbPlayers/UbPlayerResource.php | 48 +++++++ app/Filament/Imports/UbEventImporter.php | 2 +- app/Filament/Imports/UbPlayerImporter.php | 130 ++++++++++++++++++ app/Models/UbPlayer.php | 53 +++++++ 11 files changed, 409 insertions(+), 2 deletions(-) create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/CreateUbPlayer.php create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/EditUbPlayer.php create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/ListUbPlayers.php create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/Schemas/UbPlayerForm.php create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/Tables/UbPlayersTable.php create mode 100644 app/Filament/Clusters/StaticData/Resources/UbPlayers/UbPlayerResource.php create mode 100644 app/Filament/Imports/UbPlayerImporter.php create mode 100644 app/Models/UbPlayer.php diff --git a/app/Filament/Clusters/StaticData/Resources/Players/PlayerResource.php b/app/Filament/Clusters/StaticData/Resources/Players/PlayerResource.php index 6031c752..0dec234c 100644 --- a/app/Filament/Clusters/StaticData/Resources/Players/PlayerResource.php +++ b/app/Filament/Clusters/StaticData/Resources/Players/PlayerResource.php @@ -16,6 +16,8 @@ class PlayerResource extends Resource { protected static ?string $model = Player::class; + protected static bool $shouldRegisterNavigation = false; + protected static string|BackedEnum|null $navigationIcon = 'icon-soccerplayer'; protected static ?string $cluster = StaticDataCluster::class; diff --git a/app/Filament/Clusters/StaticData/Resources/UbEvents/Pages/ListUbEvents.php b/app/Filament/Clusters/StaticData/Resources/UbEvents/Pages/ListUbEvents.php index f5707d5b..798204a4 100644 --- a/app/Filament/Clusters/StaticData/Resources/UbEvents/Pages/ListUbEvents.php +++ b/app/Filament/Clusters/StaticData/Resources/UbEvents/Pages/ListUbEvents.php @@ -28,7 +28,7 @@ class ListUbEvents extends ListRecords Action::make('copy') ->tooltip('Copy header line') ->color('success') - ->label('Copy csv header') + ->label('Copy') ->action(function ($livewire) { $livewire->js('window.navigator.clipboard.writeText("league_id;home_id;away_id;starttime;player_id;home_away;home_ft;away_ft;home_ht;away_ht;Goals;assists;tackles;total_passes;passes_done;total_duels;duels_won;total_ground_duels;ground_duels_won;total_aerial_duels;aerial_duels_won;minutes_played;shots_on_target;shots_off_target;shots_blocked;total_dribble;dribble_done;position;rating;bcm;hw;pw;pm;possession_lost;fouls;was_fouled;offsides;date_acquisition");'); diff --git a/app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/CreateUbPlayer.php b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/CreateUbPlayer.php new file mode 100644 index 00000000..0dd67077 --- /dev/null +++ b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Pages/CreateUbPlayer.php @@ -0,0 +1,11 @@ +icon('phosphor-trash') + ->requiresConfirmation() + ->color('danger') + ->action(function () { + UbPlayer::truncate(); + }), + CreateAction::make() + ->label('New') + ->icon('phosphor-plus'), + ImportAction::make('importPlayer') + ->maxRows(200000) + ->chunkSize(250) + ->icon('phosphor-upload') + ->label('Import') + ->modalDescription('Separator comma ","; Field content "content"') + ->importer(UbPlayerImporter::class) + ->extraModalFooterActions([ + Action::make('copy') + ->tooltip('Copy header line') + ->color('success') + ->label('Copy') + ->action(function ($livewire) { + $livewire->js('window.navigator.clipboard.writeText(\'"id giocatore", "giocatore", "data di nascita", "altezza", "nazionalita", "posizione", "sport radar id", "id squadra tm", "nome completo", "giocatore senza caratteri speciali", "rigorista", "national team id", "data aggiornamento", "league_code", "team_code", "team_name"\');'); + + Notification::make() + ->title('Header copied successfully') + ->success() + ->send(); + }), + ]), + + ]; + } +} diff --git a/app/Filament/Clusters/StaticData/Resources/UbPlayers/Schemas/UbPlayerForm.php b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Schemas/UbPlayerForm.php new file mode 100644 index 00000000..b5fb1f3f --- /dev/null +++ b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Schemas/UbPlayerForm.php @@ -0,0 +1,40 @@ +components([ + Grid::make([ + 'default' => 2, + 'xl' => 4, + ]) + ->schema([ + TextInput::make('id_giocatore')->required(), + TextInput::make('giocatore')->required(), + TextInput::make('nome_completo'), + DatePicker::make('data_di_nascita'), + TextInput::make('altezza'), + TextInput::make('nazionalita'), + TextInput::make('posizione'), + TextInput::make('sport_radar_id'), + TextInput::make('id_squadra_tm'), + TextInput::make('rigorista'), + TextInput::make('national_team_id'), + DatePicker::make('data_aggiornamento'), + TextInput::make('league_code'), + TextInput::make('team_code'), + TextInput::make('team_name'), + ]), + + ])->columns(1); + } +} diff --git a/app/Filament/Clusters/StaticData/Resources/UbPlayers/Tables/UbPlayersTable.php b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Tables/UbPlayersTable.php new file mode 100644 index 00000000..eb9557a3 --- /dev/null +++ b/app/Filament/Clusters/StaticData/Resources/UbPlayers/Tables/UbPlayersTable.php @@ -0,0 +1,49 @@ +poll('10sec') + ->defaultPaginationPageOption(8) + ->paginationPageOptions([8, 16, 24, 36]) + ->columns([ + Stack::make([ + TextColumn::make('id_giocatore')->prefix('Id: ')->searchable()->color('success')->icon('phosphor-copy')->copyable(), + TextColumn::make('giocatore')->searchable()->prefix('Nome: ')->color('primary')->icon('phosphor-copy')->copyable(), + TextColumn::make('nome_completo')->color('gray')->searchable(), + TextColumn::make('data_di_nascita')->date()->prefix('Nascita: '), + TextColumn::make('altezza')->prefix('Altezza: ')->suffix(' cm'), + TextColumn::make('nazionalita')->prefix('Nazionalita: '), + TextColumn::make('posizione')->prefix('Posizione: '), + TextColumn::make('sport_radar_id')->searchable()->prefix('Sport Radar Id: ')->icon('phosphor-copy')->copyable(), + TextColumn::make('id_squadra_tm')->prefix('Id Squadra TM: '), + TextColumn::make('rigorista')->prefix('Rigorista: '), + TextColumn::make('national_team_id')->prefix('National Team Id: '), + TextColumn::make('data_aggiornamento')->date()->prefix('Aggiornamento: '), + TextColumn::make('created_at')->date()->prefix('Created: '), + TextColumn::make('updated_at')->date()->prefix('Updated: '), + // TextColumn::make('league_code')->prefix('League: '), + // TextColumn::make('team_code')->prefix('Team Code: '), + // TextColumn::make('team_name')->prefix('Team Name: '), + ]), + ]) + ->contentGrid([ + 'md' => 2, + 'xl' => 4, + ]) + ->recordActions([ + EditAction::make()->hiddenLabel(), + DeleteAction::make()->hiddenLabel(), + ]); + } +} diff --git a/app/Filament/Clusters/StaticData/Resources/UbPlayers/UbPlayerResource.php b/app/Filament/Clusters/StaticData/Resources/UbPlayers/UbPlayerResource.php new file mode 100644 index 00000000..433a448e --- /dev/null +++ b/app/Filament/Clusters/StaticData/Resources/UbPlayers/UbPlayerResource.php @@ -0,0 +1,48 @@ + ListUbPlayers::route('/'), + ]; + } + + public static function getNavigationBadge(): ?string + { + return parent::getEloquentQuery()->count(); + } +} diff --git a/app/Filament/Imports/UbEventImporter.php b/app/Filament/Imports/UbEventImporter.php index e04dfc83..090b209f 100644 --- a/app/Filament/Imports/UbEventImporter.php +++ b/app/Filament/Imports/UbEventImporter.php @@ -90,7 +90,7 @@ class UbEventImporter extends Importer public static function getCompletedNotificationBody(Import $import): string { - $body = 'Your ub event import has completed and '.Number::format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.'; + $body = 'Your events import has completed and '.Number::format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.'; if ($failedRowsCount = $import->getFailedRowsCount()) { $body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.'; diff --git a/app/Filament/Imports/UbPlayerImporter.php b/app/Filament/Imports/UbPlayerImporter.php new file mode 100644 index 00000000..4cddda8b --- /dev/null +++ b/app/Filament/Imports/UbPlayerImporter.php @@ -0,0 +1,130 @@ +where('id_giocatore', $this->data['id_giocatore']) + ->first(); + if ($res) { + return UbPlayer::find($res->id); + } else { + return new UbPlayer; + } + } + + public static function getColumns(): array + { + return [ + ImportColumn::make('id_giocatore') + ->label('ID GIOCATORE'), + ImportColumn::make('giocatore') + ->label('GIOCATORE') + ->castStateUsing(function (string $state): ?string { + if (blank($state)) { + return null; + } + + return (string) trim($state); + }), + ImportColumn::make('data_di_nascita') + ->label('DATA DI NASCITA') + ->castStateUsing(function ($state) { + if (blank($state)) { + return null; + } + + return Carbon::parse($state); + }), + ImportColumn::make('altezza') + ->label('ALTEZZA') + ->numeric(), + ImportColumn::make('nazionalita') + ->label('NAZIONALITA') + ->castStateUsing(function (string $state): ?string { + return (string) trim($state); + }), + ImportColumn::make('posizione') + ->label('POSIZIONE') + ->castStateUsing(function (string $state): ?string { + if (blank($state)) { + return null; + } + + return (string) trim($state); + }), + ImportColumn::make('sport_radar_id') + ->label('SPORT RADAR ID'), + ImportColumn::make('id_squadra_tm') + ->label('ID SQUADRA TM'), + ImportColumn::make('nome_completo') + ->label('NOME COMPLETO') + ->castStateUsing(function (?string $state): ?string { + if (blank($state)) { + return null; + } + + return (string) trim($state); + }), + ImportColumn::make('rigorista') + ->label('RIGORISTA') + ->castStateUsing(function (?string $state): ?string { + if (blank($state)) { + return null; + } + + return (string) trim($state); + }), + ImportColumn::make('national_team_id') + ->label('NATIONAL TEAM ID'), + ImportColumn::make('data_aggiornamento') + ->label('DATA AGGIORNAMENTO') + ->castStateUsing(function ($state) { + return Carbon::parse($state); + }), + ImportColumn::make('league_code') + ->label('LEAGUE CODE') + ->castStateUsing(function (string $state): ?string { + return (string) trim($state); + }), + ImportColumn::make('team_code') + ->label('TEAM CODE') + ->castStateUsing(function (string $state): ?string { + return (string) trim($state); + }), + ImportColumn::make('team_name') + ->label('TEAM NAME') + ->castStateUsing(function (string $state): ?string { + return (string) trim($state); + }), + ]; + } + + public static function getCompletedNotificationBody(Import $import): string + { + $body = 'Your player import has completed and '.Number::format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.'; + + if ($failedRowsCount = $import->getFailedRowsCount()) { + $body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.'; + } + + return $body; + } +} diff --git a/app/Models/UbPlayer.php b/app/Models/UbPlayer.php new file mode 100644 index 00000000..e366334e --- /dev/null +++ b/app/Models/UbPlayer.php @@ -0,0 +1,53 @@ + 'string', + 'national_team_id' => 'string', + 'altezza' => 'integer', + 'sport_radar_id' => 'string', + 'id_squadra_tm' => 'string', + 'data_di_nascita' => 'date', + 'giocatore' => 'string', + 'nazionalita' => 'string', + 'posizione' => 'string', + 'nome_completo' => 'string', + 'rigorista' => 'string', + 'data_aggiornamento' => 'string', + 'league_code' => 'string', + 'team_code' => 'string', + 'team_name' => 'string', + ]; + } +}