mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-31 14:16:57 -04:00
119 lines
4.2 KiB
PHP
119 lines
4.2 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',
|
|
'videoTypes'
|
|
])->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']);
|
|
}
|
|
|
|
if (isset($validated['videoTypes'])) {
|
|
$studioPlusIncentive->videoTypes()->sync($validated['videoTypes']);
|
|
}
|
|
|
|
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']);
|
|
}
|
|
|
|
if (isset($validated['videoTypes'])) {
|
|
$studioPlusIncentive->videoTypes()->sync($validated['videoTypes']);
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
return response()->noContent();
|
|
} catch (\Exception $ex) {
|
|
DB::rollBack();
|
|
throw new \Exception($ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function destroy(StudioPlusIncentive $studioPlusIncentive)
|
|
{
|
|
try {
|
|
|
|
$studioPlusIncentive->videoTypes()->detach();
|
|
$studioPlusIncentive->asins()->detach();
|
|
$studioPlusIncentive->roles()->detach();
|
|
$studioPlusIncentive->delete();
|
|
|
|
return response()->noContent();
|
|
} catch (\Exception $ex) {
|
|
throw new \Exception($ex->getMessage());
|
|
}
|
|
}
|
|
}
|