From dd3acffb4d477adfe31701b8ee4e4c10dd668e55 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 16 Mar 2026 22:29:43 +0700 Subject: [PATCH] refactor: Streamline query modifications for cooperation-related resources by consolidating role-based filtering into getEloquentQuery methods. --- .../Cooperations/CooperationResource.php | 29 ++++++++++--------- .../CooperationPaymentRelationManager.php | 14 +++++---- .../CooperationProposalRelationManager.php | 24 +++++++-------- .../ReportRelationManager.php | 18 ++++++------ .../DataChanges/DataChangesResource.php | 13 +++++---- .../Manage/Journalists/JournalistResource.php | 24 ++++++++------- .../Manage/Partners/PartnerResource.php | 13 +++++---- 7 files changed, 73 insertions(+), 62 deletions(-) diff --git a/app/Filament/Resources/Manage/Cooperations/CooperationResource.php b/app/Filament/Resources/Manage/Cooperations/CooperationResource.php index d927588..1c89cae 100644 --- a/app/Filament/Resources/Manage/Cooperations/CooperationResource.php +++ b/app/Filament/Resources/Manage/Cooperations/CooperationResource.php @@ -65,20 +65,7 @@ public static function form(Schema $schema): Schema public static function table(Table $table): Table { - return CooperationsTable::configure($table) - ->modifyQueryUsing(function (Builder $query): Builder { - if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)) { - $query->whereHas('cooperationMedia', function (Builder $subQuery): void { - $subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void { - $mediaQuery->whereHas('company', function (Builder $companyQuery): void { - $companyQuery->where('user_id', auth()->id()); - }); - }); - }); - } - - return $query; - }); + return CooperationsTable::configure($table); } public static function infolist(Schema $schema): Schema @@ -163,6 +150,20 @@ public static function getRelations(): array ]; } + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void { + $query->whereHas('cooperationMedia', function (Builder $subQuery): void { + $subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void { + $mediaQuery->whereHas('company', function (Builder $companyQuery): void { + $companyQuery->where('user_id', auth()->id()); + }); + }); + }); + }); + } + public static function getPages(): array { return [ diff --git a/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationPaymentRelationManager.php b/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationPaymentRelationManager.php index b1a125e..bf56696 100644 --- a/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationPaymentRelationManager.php +++ b/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationPaymentRelationManager.php @@ -10,6 +10,7 @@ use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class CooperationPaymentRelationManager extends RelationManager @@ -62,13 +63,14 @@ public function table(Table $table): Table ->recordActions([]) ->emptyStateIcon(Heroicon::CreditCard) ->emptyStateDescription('Belum ada data pembayaran.') - ->defaultSort('created_at', 'desc') - ->modifyQueryUsing(function ($query) { - $user = auth()->user(); + ->defaultSort('created_at', 'desc'); + } - return $query->whereHas('cooperationMedia.partnerMedia.company', function ($q) use ($user) { - $q->where('user_id', $user->id); - }); + public function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->whereHas('cooperationMedia.partnerMedia.company', function (Builder $query): void { + $query->where('user_id', auth()->id()); }); } } diff --git a/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationProposalRelationManager.php b/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationProposalRelationManager.php index ee18b45..acc66d9 100644 --- a/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationProposalRelationManager.php +++ b/app/Filament/Resources/Manage/Cooperations/RelationManagers/CooperationProposalRelationManager.php @@ -18,6 +18,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Joaopaulolndev\FilamentPdfViewer\Infolists\Components\PdfViewerEntry; @@ -112,18 +113,7 @@ public function table(Table $table): Table ]) ->emptyStateIcon(Heroicon::DocumentText) ->emptyStateDescription('Tidak ada proposal yang diajukan.') - ->defaultSort('created_at', 'desc') - ->modifyQueryUsing(function ($query) { - $user = auth()->user(); - - if (! $user->hasRole(RoleEnum::PERUSAHAAN->value)) { - return $query; - } - - return $query->whereHas('partnerMedia.company', function ($q) use ($user) { - $q->where('user_id', $user->id); - }); - }); + ->defaultSort('created_at', 'desc'); } public function infolist(Schema $infolist): Schema @@ -173,4 +163,14 @@ public function infolist(Schema $infolist): Schema ]) ->columns(1); } + + public function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void { + $query->whereHas('partnerMedia.company', function (Builder $q): void { + $q->where('user_id', auth()->id()); + }); + }); + } } diff --git a/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php b/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php index 106ff58..753c8f2 100644 --- a/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php +++ b/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php @@ -24,6 +24,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class ReportRelationManager extends RelationManager @@ -215,16 +216,15 @@ public function table(Table $table): Table ->toolbarActions([]) ->emptyStateIcon(Heroicon::InboxArrowDown) ->emptyStateDescription('Tidak ada laporan yang diajukan.') - ->defaultSort('created_at', 'desc') - ->modifyQueryUsing(function ($query) { - $user = auth()->user(); + ->defaultSort('created_at', 'desc'); + } - if (! $user->hasRole(RoleEnum::PERUSAHAAN->value)) { - return $query; - } - - $query->whereHas('mediaTaskAssignment.partnerMedia.company', function ($q) use ($user) { - $q->where('user_id', $user->id); + public function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void { + $query->whereHas('mediaTaskAssignment.partnerMedia.company', function (Builder $q): void { + $q->where('user_id', auth()->id()); }); }); } diff --git a/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php b/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php index 64aa82c..694280e 100644 --- a/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php +++ b/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php @@ -272,11 +272,14 @@ public static function table(Table $table): Table ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) - ->deferLoading() - ->modifyQueryUsing(function (Builder $query): void { - $query->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder { - return $q->where('user_id', auth()->id()); - }); + ->deferLoading(); + } + + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder { + return $q->where('user_id', auth()->id()); }); } diff --git a/app/Filament/Resources/Manage/Journalists/JournalistResource.php b/app/Filament/Resources/Manage/Journalists/JournalistResource.php index aabcc34..0e89515 100644 --- a/app/Filament/Resources/Manage/Journalists/JournalistResource.php +++ b/app/Filament/Resources/Manage/Journalists/JournalistResource.php @@ -210,17 +210,6 @@ public static function table(Table $table): Table ->deferFilters(false) ->paginated([25, 50, 100, 'all']) ->deferLoading() - ->modifyQueryUsing(function (Builder $query): void { - if (auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia) { - $query->whereRaw('1 = 0'); - } - - $query->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $q): Builder { - return $q->whereHas('partnerMedia.company', function (Builder $q): void { - $q->where('user_id', auth()->id()); - }); - }); - }) ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Table $table): Table { return $table ->emptyStateHeading('Akses Dibatasi') @@ -242,6 +231,19 @@ public static function getPages(): array ]; } + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && ! auth()->user()->company?->partnerMedia, function (Builder $query): Builder { + return $query->whereRaw('1 = 0'); + }) + ->when(auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): Builder { + return $query->whereHas('partnerMedia.company', function (Builder $q): void { + $q->where('user_id', auth()->id()); + }); + }); + } + public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() diff --git a/app/Filament/Resources/Manage/Partners/PartnerResource.php b/app/Filament/Resources/Manage/Partners/PartnerResource.php index c36266e..14c359b 100644 --- a/app/Filament/Resources/Manage/Partners/PartnerResource.php +++ b/app/Filament/Resources/Manage/Partners/PartnerResource.php @@ -373,11 +373,14 @@ public static function table(Table $table): Table ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) - ->deferLoading() - ->modifyQueryUsing(function (Builder $query): void { - $query->role('Perusahaan') - ->whereHas('company'); - }); + ->deferLoading(); + } + + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->role('Perusahaan') + ->whereHas('company'); } public static function getPages(): array