167 lines
5.2 KiB
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);
|
|
}
|
|
}
|
|
}
|