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

@@ -30,7 +30,7 @@ class PhotoController extends Controller
->firstOrFail();
$query = Photo::where('event_id', $event->id)
->with(['likes', 'uploader'])
->with('event')->withCount('likes')
->orderBy('created_at', 'desc');
// Filters
@@ -117,7 +117,7 @@ class PhotoController extends Controller
list($width, $height) = getimagesize($file->getRealPath());
$photo->update(['width' => $width, 'height' => $height]);
$photo->load(['event', 'uploader']);
$photo->load('event')->loadCount('likes');
return response()->json([
'message' => 'Photo uploaded successfully. Awaiting moderation.',
@@ -140,7 +140,7 @@ class PhotoController extends Controller
return response()->json(['error' => 'Photo not found'], 404);
}
$photo->load(['event', 'uploader', 'likes']);
$photo->load('event')->loadCount('likes');
$photo->increment('view_count');
return response()->json([
@@ -177,7 +177,7 @@ class PhotoController extends Controller
$photo->update($validated);
if ($validated['status'] ?? null === 'approved') {
$photo->load(['event', 'uploader']);
$photo->load('event')->loadCount('likes');
// Trigger event for new photo notification
// event(new \App\Events\PhotoApproved($photo)); // Implement later
}
@@ -222,6 +222,40 @@ class PhotoController extends Controller
/**
* Bulk approve photos (admin only)
*/
public function feature(Request $request, string $eventSlug, Photo $photo): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
$event = Event::where('slug', $eventSlug)
->where('tenant_id', $tenantId)
->firstOrFail();
if ($photo->event_id !== $event->id) {
return response()->json(['error' => 'Photo not found'], 404);
}
$photo->update(['is_featured' => true]);
$photo->refresh()->load('event')->loadCount('likes');
return response()->json(['message' => 'Photo marked as featured', 'data' => new PhotoResource($photo)]);
}
public function unfeature(Request $request, string $eventSlug, Photo $photo): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
$event = Event::where('slug', $eventSlug)
->where('tenant_id', $tenantId)
->firstOrFail();
if ($photo->event_id !== $event->id) {
return response()->json(['error' => 'Photo not found'], 404);
}
$photo->update(['is_featured' => false]);
$photo->refresh()->load('event')->loadCount('likes');
return response()->json(['message' => 'Photo removed from featured', 'data' => new PhotoResource($photo)]);
}
public function bulkApprove(Request $request, string $eventSlug): JsonResponse
{
$tenantId = $request->attributes->get('tenant_id');
@@ -249,7 +283,7 @@ class PhotoController extends Controller
// Load approved photos for response
$photos = Photo::whereIn('id', $photoIds)
->where('event_id', $event->id)
->with(['uploader', 'event'])
->with('event')->withCount('likes')
->get();
// Trigger events
@@ -321,7 +355,7 @@ class PhotoController extends Controller
$photos = Photo::where('event_id', $event->id)
->where('status', 'pending')
->with(['uploader', 'event'])
->with('event')->withCount('likes')
->orderBy('created_at', 'desc')
->paginate($request->get('per_page', 20));