Files
wticreatorstudio/Modules/StudioPlusWtiiabaddon/Http/Controllers/API/StudioPlusIncentiveController.php
T
2024-02-12 22:54:20 -05:00

108 lines
3.9 KiB
PHP

<?php
namespace Modules\StudioPlusWtiiabaddon\Http\Controllers\API;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\DB;
use Modules\StudioPlusWtiiabaddon\Entities\StudioPlusIncentive;
use Modules\StudioPlusWtiiabaddon\Entities\StudioPlusIncentiveCategory;
use Modules\StudioPlusWtiiabaddon\Entities\StudioPlusIncentiveContentType;
use Modules\StudioPlusWtiiabaddon\Entities\StudioPlusIncentiveContentVariant;
use Modules\StudioPlusWtiiabaddon\Http\Requests\StudioPlusIncentiveRequest;
use Modules\StudioPlusWtiiabaddon\Transformers\StudioPlusIncentiveResource;
class StudioPlusIncentiveController extends Controller
{
public function index(Request $request)
{
$incentives = StudioPlusIncentive::query()
->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());
}
}
}