53 lines
No EOL
1.6 KiB
PHP
53 lines
No EOL
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Infrastructure\Http\Controllers\API\PlannedItem;
|
|
|
|
use App\Infrastructure\Http\Controllers\Controller;
|
|
use App\Models\PlannedItem;
|
|
use App\Models\PlannableItem;
|
|
use App\Models\CalendarSlot;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
class PlannedItemController extends Controller
|
|
{
|
|
public function store(Request $request): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'plannable_item_id' => 'required|exists:plannable_items,id',
|
|
'calendar_slot_id' => 'required|exists:calendar_slots,id',
|
|
'sort_order' => 'nullable|integer',
|
|
]);
|
|
|
|
$plannedItem = PlannedItem::updateOrCreate(
|
|
[
|
|
'plannable_item_id' => $validated['plannable_item_id'],
|
|
'calendar_slot_id' => $validated['calendar_slot_id'],
|
|
],
|
|
[
|
|
'sort_order' => $validated['sort_order'] ?? 0,
|
|
]
|
|
);
|
|
|
|
return response()->json($plannedItem->load(['plannableItem', 'calendarSlot']), 201);
|
|
}
|
|
|
|
public function update(Request $request, PlannedItem $plannedItem): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'calendar_slot_id' => 'sometimes|required|exists:calendar_slots,id',
|
|
'sort_order' => 'nullable|integer',
|
|
]);
|
|
|
|
$plannedItem->update($validated);
|
|
|
|
return response()->json($plannedItem->load(['plannableItem', 'calendarSlot']));
|
|
}
|
|
|
|
public function destroy(PlannedItem $plannedItem): JsonResponse
|
|
{
|
|
$plannedItem->delete();
|
|
|
|
return response()->json(null, 204);
|
|
}
|
|
} |