Veranstaltungen-APP/routes/api.php

72 lines
3.4 KiB
PHP

<?php
use App\Http\Controllers\AuthController;
use App\Http\Controllers\EventController;
use App\Http\Controllers\EventManagementController;
use App\Http\Controllers\PasswordResetController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
/**
* Public Auth Routes (keine Authentifizierung erforderlich)
*/
Route::prefix('auth')->group(function () {
Route::post('/register', [AuthController::class, 'register'])->name('auth.register');
Route::post('/login', [AuthController::class, 'login'])->name('auth.login');
Route::post('/forgot-password', [PasswordResetController::class, 'forgotPassword'])->name('auth.forgotPassword');
Route::post('/reset-password', [PasswordResetController::class, 'resetPassword'])->name('auth.resetPassword');
Route::post('/verify-reset-token', [PasswordResetController::class, 'verifyResetToken'])->name('auth.verifyResetToken');
});
/**
* Event API Routes (public)
*
* Base URL: /api/events
*/
Route::middleware('api')->prefix('events')->group(function () {
// Hilfsmethoden (vor dem Model Binding)
Route::get('categories/list', [EventController::class, 'categories'])->name('events.categories');
Route::get('locations/list', [EventController::class, 'locations'])->name('events.locations');
// Listen Sie Events mit Filtern
Route::get('/', [EventController::class, 'index'])->name('events.index');
// Einzelnes Event anzeigen (Model Binding)
Route::get('/{event}', [EventController::class, 'show'])->name('events.show');
});
/**
* Protected Routes (Authentifizierung erforderlich)
*/
Route::middleware('auth:sanctum')->group(function () {
// Auth Routes
Route::prefix('auth')->group(function () {
Route::post('/logout', [AuthController::class, 'logout'])->name('auth.logout');
Route::get('/me', [AuthController::class, 'me'])->name('auth.me');
Route::put('/profile', [AuthController::class, 'updateProfile'])->name('auth.updateProfile');
Route::post('/change-password', [AuthController::class, 'changePassword'])->name('auth.changePassword');
});
// User API Routes
Route::prefix('user')->group(function () {
Route::get('/profile', [UserController::class, 'profile'])->name('user.profile');
Route::get('/events', [UserController::class, 'myEvents'])->name('user.myEvents');
Route::get('/favorites', [UserController::class, 'favorites'])->name('user.favorites');
Route::post('/favorites/{event}/toggle', [UserController::class, 'toggleFavorite'])->name('user.toggleFavorite');
Route::get('/stats', [UserController::class, 'stats'])->name('user.stats');
});
// Event Management Routes
Route::prefix('events')->group(function () {
Route::get('/my-events', [EventManagementController::class, 'myEvents'])->name('events.myEvents');
Route::post('/', [EventManagementController::class, 'create'])->name('events.create');
Route::put('/{event}', [EventManagementController::class, 'update'])->name('events.update');
Route::delete('/{event}', [EventManagementController::class, 'delete'])->name('events.delete');
// Favoriten
Route::post('/{event}/toggle-favorite', [EventManagementController::class, 'toggleFavorite'])->name('events.toggleFavorite');
Route::get('/favorites', [EventManagementController::class, 'favorites'])->name('events.favorites');
});
});