feat: implement AI styling foundation and billing scope rework
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Tenant\BillingAddonHistoryRequest;
|
||||
use App\Models\Event;
|
||||
use App\Models\EventPackageAddon;
|
||||
use App\Models\PackagePurchase;
|
||||
use App\Services\LemonSqueezy\Exceptions\LemonSqueezyException;
|
||||
@@ -75,7 +77,7 @@ class TenantBillingController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function addons(Request $request): JsonResponse
|
||||
public function addons(BillingAddonHistoryRequest $request): JsonResponse
|
||||
{
|
||||
$tenant = $request->attributes->get('tenant');
|
||||
|
||||
@@ -86,12 +88,46 @@ class TenantBillingController extends Controller
|
||||
], 404);
|
||||
}
|
||||
|
||||
$perPage = max(1, min((int) $request->query('per_page', 25), 100));
|
||||
$page = max(1, (int) $request->query('page', 1));
|
||||
$perPage = max(1, min((int) $request->validated('per_page', 25), 100));
|
||||
$page = max(1, (int) $request->validated('page', 1));
|
||||
$eventId = $request->validated('event_id');
|
||||
$eventSlug = $request->validated('event_slug');
|
||||
$status = $request->validated('status');
|
||||
|
||||
$paginator = EventPackageAddon::query()
|
||||
$scopeEvent = null;
|
||||
if ($eventId !== null || $eventSlug !== null) {
|
||||
$scopeEventQuery = Event::query()
|
||||
->where('tenant_id', $tenant->id);
|
||||
|
||||
if ($eventId !== null) {
|
||||
$scopeEventQuery->whereKey((int) $eventId);
|
||||
} elseif (is_string($eventSlug) && trim($eventSlug) !== '') {
|
||||
$scopeEventQuery->where('slug', $eventSlug);
|
||||
}
|
||||
|
||||
$scopeEvent = $scopeEventQuery->first();
|
||||
|
||||
if (! $scopeEvent) {
|
||||
return response()->json([
|
||||
'data' => [],
|
||||
'message' => 'Event scope not found.',
|
||||
], 404);
|
||||
}
|
||||
}
|
||||
|
||||
$query = EventPackageAddon::query()
|
||||
->where('tenant_id', $tenant->id)
|
||||
->with(['event:id,name,slug'])
|
||||
->with(['event:id,name,slug']);
|
||||
|
||||
if ($scopeEvent) {
|
||||
$query->where('event_id', $scopeEvent->id);
|
||||
}
|
||||
|
||||
if (is_string($status) && $status !== '') {
|
||||
$query->where('status', $status);
|
||||
}
|
||||
|
||||
$paginator = $query
|
||||
->orderByDesc('purchased_at')
|
||||
->orderByDesc('created_at')
|
||||
->paginate($perPage, ['*'], 'page', $page);
|
||||
@@ -125,6 +161,17 @@ class TenantBillingController extends Controller
|
||||
'last_page' => $paginator->lastPage(),
|
||||
'per_page' => $paginator->perPage(),
|
||||
'total' => $paginator->total(),
|
||||
'scope' => $scopeEvent ? [
|
||||
'type' => 'event',
|
||||
'event' => [
|
||||
'id' => $scopeEvent->id,
|
||||
'slug' => $scopeEvent->slug,
|
||||
'name' => $scopeEvent->name,
|
||||
],
|
||||
] : [
|
||||
'type' => 'tenant',
|
||||
'event' => null,
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user