coupon code system eingeführt. coupons werden vom super admin gemanaged. coupons werden mit paddle synchronisiert und dort validiert. plus: einige mobil-optimierungen im tenant admin pwa.

This commit is contained in:
Codex Agent
2025-11-09 20:26:50 +01:00
parent f3c44be76d
commit 082b78cd43
80 changed files with 4855 additions and 435 deletions

View File

@@ -6,17 +6,19 @@ use App\Http\Controllers\Controller;
use App\Http\Resources\Tenant\TaskCollectionResource;
use App\Models\Event;
use App\Models\TaskCollection;
use App\Models\Tenant;
use App\Services\Tenant\TaskCollectionImportService;
use App\Support\TenantRequestResolver;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\Rule;
class TaskCollectionController extends Controller
{
public function index(Request $request): AnonymousResourceCollection
{
$tenantId = $request->tenant->id;
$tenantId = $this->currentTenant($request)->id;
$query = TaskCollection::query()
->forTenant($tenantId)
@@ -68,11 +70,11 @@ class TaskCollectionController extends Controller
$this->authorizeAccess($request, $collection);
$data = $request->validate([
'event_slug' => ['required', 'string', Rule::exists('events', 'slug')->where('tenant_id', $request->tenant->id)],
'event_slug' => ['required', 'string', Rule::exists('events', 'slug')->where('tenant_id', $this->currentTenant($request)->id)],
]);
$event = Event::where('slug', $data['event_slug'])
->where('tenant_id', $request->tenant->id)
->where('tenant_id', $this->currentTenant($request)->id)
->firstOrFail();
$result = $importService->import($collection, $event);
@@ -87,8 +89,13 @@ class TaskCollectionController extends Controller
protected function authorizeAccess(Request $request, TaskCollection $collection): void
{
if ($collection->tenant_id && $collection->tenant_id !== $request->tenant->id) {
if ($collection->tenant_id && $collection->tenant_id !== $this->currentTenant($request)->id) {
abort(404);
}
}
protected function currentTenant(Request $request): Tenant
{
return TenantRequestResolver::resolve($request);
}
}