Files
fotospiel-app/app/Http/Controllers/Api/Tenant/EventAddonController.php
Codex Agent d2808ffa4f
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
feat(addons): finalize event addon catalog and ai styling upgrade flow
2026-02-07 12:35:07 +01:00

52 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Tenant;
use App\Http\Controllers\Controller;
use App\Http\Requests\Tenant\EventAddonCheckoutRequest;
use App\Models\Event;
use App\Services\Addons\EventAddonCheckoutService;
use App\Support\ApiError;
use Illuminate\Http\JsonResponse;
class EventAddonController extends Controller
{
public function __construct(private readonly EventAddonCheckoutService $checkoutService) {}
public function checkout(EventAddonCheckoutRequest $request, Event $event): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
if ($event->tenant_id !== $tenantId) {
return ApiError::response(
'event_not_found',
'Event not accessible',
__('Das Event konnte nicht gefunden werden.'),
404,
['event_slug' => $event->slug ?? null]
);
}
$eventPackage = $event->eventPackage ?: $event->eventPackages()
->orderByDesc('purchased_at')
->orderByDesc('created_at')
->first();
if ($eventPackage) {
$event->setRelation('eventPackage', $eventPackage);
}
$checkout = $this->checkoutService->createCheckout(
$request->attributes->get('tenant'),
$event,
$request->validated(),
);
return response()->json([
'checkout_url' => $checkout['checkout_url'] ?? null,
'checkout_id' => $checkout['id'] ?? null,
'expires_at' => $checkout['expires_at'] ?? null,
]);
}
}