refactor: Streamline query modifications for cooperation-related resources by consolidating role-based filtering into getEloquentQuery methods.

This commit is contained in:
Yoga Pangestu 2026-03-16 22:29:43 +07:00
parent 0caf03e03f
commit dd3acffb4d
7 changed files with 73 additions and 62 deletions

View File

@ -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 [

View File

@ -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());
});
}
}

View File

@ -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());
});
});
}
}

View File

@ -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());
});
});
}

View File

@ -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());
});
}

View File

@ -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()

View File

@ -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