trip-planner/backend/app/Infrastructure/Http/Controllers/API/PlannedItem/PlannedItemController.php

53 lines
1.6 KiB
PHP
Raw Normal View History

2025-09-28 13:31:43 +02:00
<?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);
}
}