Veranstaltungen-APP/app/Http/Controllers/UserController.php

167 lines
5.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
class UserController extends Controller
{
/**
* Get current authenticated user profile
* GET /api/user/profile
*/
public function profile(Request $request): JsonResponse
{
try {
$user = $request->user();
return response()->json([
'success' => true,
'data' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'role' => $user->role,
'created_at' => $user->created_at,
'updated_at' => $user->updated_at,
],
], 200);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Fehler beim Abrufen des Profils',
'error' => $e->getMessage(),
], 500);
}
}
/**
* Get user's created events
* GET /api/user/events
*/
public function myEvents(Request $request): JsonResponse
{
try {
$user = $request->user();
$events = $user->createdEvents()
->with('location', 'occurrences', 'source')
->paginate(15);
return response()->json([
'success' => true,
'data' => $events->items(),
'pagination' => [
'total' => $events->total(),
'per_page' => $events->perPage(),
'current_page' => $events->currentPage(),
'last_page' => $events->lastPage(),
],
], 200);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Fehler beim Abrufen der Events',
'error' => $e->getMessage(),
], 500);
}
}
/**
* Get user's favorite events
* GET /api/user/favorites
*/
public function favorites(Request $request): JsonResponse
{
try {
$user = $request->user();
$favorites = $user->favoriteEvents()
->with('location', 'occurrences', 'source')
->paginate(15);
return response()->json([
'success' => true,
'data' => $favorites->items(),
'pagination' => [
'total' => $favorites->total(),
'per_page' => $favorites->perPage(),
'current_page' => $favorites->currentPage(),
'last_page' => $favorites->lastPage(),
],
], 200);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Fehler beim Abrufen der Favoriten',
'error' => $e->getMessage(),
], 500);
}
}
/**
* Toggle favorite status for an event
* POST /api/user/favorites/{event}/toggle
*/
public function toggleFavorite(Request $request, $eventId): JsonResponse
{
try {
$user = $request->user();
// Überprüfen Sie, ob das Event existiert
$event = \App\Models\Event::findOrFail($eventId);
// Toggle the favorite
if ($user->favoriteEvents()->where('event_id', $eventId)->exists()) {
$user->favoriteEvents()->detach($eventId);
return response()->json([
'success' => true,
'message' => 'Event aus Favoriten entfernt',
'is_favorite' => false,
], 200);
} else {
$user->favoriteEvents()->attach($eventId);
return response()->json([
'success' => true,
'message' => 'Event zu Favoriten hinzugefügt',
'is_favorite' => true,
], 200);
}
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Fehler beim Toggling des Favoriten',
'error' => $e->getMessage(),
], 500);
}
}
/**
* Get user statistics
* GET /api/user/stats
*/
public function stats(Request $request): JsonResponse
{
try {
$user = $request->user();
return response()->json([
'success' => true,
'data' => [
'total_events_created' => $user->createdEvents()->count(),
'total_favorites' => $user->favoriteEvents()->count(),
'is_organizer' => $user->isOrganizer(),
'is_admin' => $user->isAdmin(),
'user_role' => $user->role,
],
], 200);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Fehler beim Abrufen der Statistiken',
'error' => $e->getMessage(),
], 500);
}
}
}