Files
2025-08-27 09:17:56 +02:00

172 lines
5.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\BlockedDate;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\ValidationException;
class BlockedDateController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): JsonResponse
{
try {
$blockedDates = BlockedDate::orderBy('date', 'asc')->get();
return response()->json($blockedDates);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde data ophalen mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Display a listing of blocked dates for public access (booking form)
*/
public function publicIndex(): JsonResponse
{
try {
$blockedDates = BlockedDate::where('date', '>=', now()->toDateString())
->orderBy('date', 'asc')
->get(['date']);
return response()->json($blockedDates);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde data ophalen mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): JsonResponse
{
try {
$validated = $request->validate([
'date' => 'required|date|after:today',
'reason' => 'nullable|string',
], [
'date.required' => 'Datum is verplicht',
'date.after' => 'Datum moet in de toekomst liggen',
]);
$blockedDate = BlockedDate::create($validated);
return response()->json($blockedDate, 201);
} catch (ValidationException $e) {
return response()->json([
'message' => 'Validatie mislukt',
'errors' => $e->errors()
], 422);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde datum aanmaken mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Display the specified resource.
*/
public function show(BlockedDate $blockedDate): JsonResponse
{
try {
return response()->json($blockedDate);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde datum ophalen mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, BlockedDate $blockedDate): JsonResponse
{
try {
$validated = $request->validate([
'date' => 'required|date|after:today',
'reason' => 'nullable|string',
], [
'date.required' => 'Datum is verplicht',
'date.after' => 'Datum moet in de toekomst liggen',
]);
$blockedDate->update($validated);
return response()->json($blockedDate);
} catch (ValidationException $e) {
return response()->json([
'message' => 'Validatie mislukt',
'errors' => $e->errors()
], 422);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde datum bijwerken mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(BlockedDate $blockedDate): JsonResponse
{
try {
$blockedDate->delete();
return response()->json([
'message' => 'Geblokkeerde datum succesvol verwijderd'
]);
} catch (\Exception $e) {
return response()->json([
'message' => 'Geblokkeerde datum verwijderen mislukt',
'error' => $e->getMessage()
], 500);
}
}
/**
* Check if a specific date is blocked
*/
public function checkDate(Request $request): JsonResponse
{
try {
$validated = $request->validate([
'date' => 'required|date',
], [
'date.required' => 'Datum is verplicht',
]);
$blockedDate = BlockedDate::where('date', $validated['date'])->first();
return response()->json([
'date' => $validated['date'],
'is_blocked' => !is_null($blockedDate),
'reason' => $blockedDate ? $blockedDate->reason : null
]);
} catch (ValidationException $e) {
return response()->json([
'message' => 'Validatie mislukt',
'errors' => $e->errors()
], 422);
} catch (\Exception $e) {
return response()->json([
'message' => 'Datum controleren mislukt',
'error' => $e->getMessage()
], 500);
}
}
}