feat(tenant-admin): refresh event management experience

This commit is contained in:
Codex Agent
2025-09-26 12:17:25 +02:00
parent 215d19f07e
commit 6215ebbaa0
13 changed files with 1255 additions and 300 deletions

View File

@@ -7,6 +7,7 @@ use App\Http\Requests\Tenant\EventStoreRequest;
use App\Http\Resources\Tenant\EventResource;
use App\Models\Event;
use App\Models\Tenant;
use App\Models\Photo;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
@@ -203,6 +204,75 @@ class EventController extends Controller
]);
}
public function stats(Request $request, Event $event): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
if ($event->tenant_id !== $tenantId) {
return response()->json(['error' => 'Event not found'], 404);
}
$totalPhotos = Photo::where('event_id', $event->id)->count();
$featuredPhotos = Photo::where('event_id', $event->id)->where('is_featured', true)->count();
$likes = Photo::where('event_id', $event->id)->sum('likes_count');
$recentUploads = Photo::where('event_id', $event->id)
->where('created_at', '>=', now()->subDays(7))
->count();
return response()->json([
'total' => $totalPhotos,
'featured' => $featuredPhotos,
'likes' => (int) $likes,
'recent_uploads' => $recentUploads,
'status' => $event->status,
'is_active' => (bool) $event->is_active,
]);
}
public function toggle(Request $request, Event $event): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
if ($event->tenant_id !== $tenantId) {
return response()->json(['error' => 'Event not found'], 404);
}
$activate = ! (bool) $event->is_active;
$event->is_active = $activate;
if ($activate) {
$event->status = 'published';
} elseif ($event->status === 'published') {
$event->status = 'draft';
}
$event->save();
$event->refresh()->load(['eventType', 'tenant']);
return response()->json([
'message' => $activate ? 'Event activated' : 'Event deactivated',
'data' => new EventResource($event),
'is_active' => (bool) $event->is_active,
]);
}
public function createInvite(Request $request, Event $event): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
if ($event->tenant_id !== $tenantId) {
return response()->json(['error' => 'Event not found'], 404);
}
$token = (string) Str::uuid();
$link = url("/e/{$event->slug}?invite={$token}");
return response()->json([
'link' => $link,
'token' => $token,
]);
}
public function bulkUpdateStatus(Request $request): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');