with([ 'asins', 'incentiveCategory', 'roles', 'contentTypes', 'contentVariants', ])->get(); // ->filter($request) // ->when($request->filled('orderBy') && $request->filled('sortBy'), function ($query) use ($request) { // if ($request->orderBy === 'category') { // $query->orderBy(StudioPlusIncentiveCategory::select('name')->whereColumn('id', 'incentive_category_id')->orderBy('name', $request->sortBy), $request->sortBy); // } else { // $query->orderBy($request->orderBy, $request->sortBy); // } // }, fn ($query) => $query->latest()) // ->getOrPaginate($request->per_page); return StudioPlusIncentiveResource::collection($incentives); } public function store(StudioPlusIncentiveRequest $request) { try { DB::beginTransaction(); $validated = $request->validated(); $validated['user_id'] = auth()->id(); $studioPlusIncentive = StudioPlusIncentive::create($validated); $studioPlusIncentive->asins()->sync($validated['asins']); $studioPlusIncentive->roles()->sync($validated['roles']); if (isset($validated['contentTypes'])) { $studioPlusIncentive->contentTypes()->sync($validated['contentTypes']); } if (isset($validated['contentVariants'])) { $studioPlusIncentive->contentVariants()->sync($validated['contentVariants']); } DB::commit(); return response()->noContent(); } catch (\Exception $ex) { DB::rollBack(); throw new \Exception($ex->getMessage()); } } public function update(StudioPlusIncentiveRequest $request, StudioPlusIncentive $studioPlusIncentive) { try { DB::beginTransaction(); $validated = $request->validated(); $studioPlusIncentive->update($validated); $studioPlusIncentive->asins()->sync($validated['asins']); $studioPlusIncentive->roles()->sync($validated['roles']); if (isset($validated['contentTypes'])) { $studioPlusIncentive->contentTypes()->sync($validated['contentTypes']); } if (isset($validated['contentVariants'])) { $studioPlusIncentive->contentVariants()->sync($validated['contentVariants']); } DB::commit(); return response()->noContent(); } catch (\Exception $ex) { DB::rollBack(); throw new \Exception($ex->getMessage()); } } public function destroy(StudioPlusIncentive $studioPlusIncentive) { try { $studioPlusIncentive->asins()->detach(); $studioPlusIncentive->roles()->detach(); $studioPlusIncentive->delete(); return response()->noContent(); } catch (\Exception $ex) { throw new \Exception($ex->getMessage()); } } }