Rutas del Sistema

El proyecto define rutas en dos archivos principales: routes/web.php y routes/auth.php.

1. Rutas Web (web.php)

Ubicación: routes/web.php

Rutas Públicas

Método URI Controlador Nombre
GET / AuthenticatedSessionController@create login
GET /posters/public PosterController@postersPublic posters.public
GET /posters/public/show/{poster} PosterController@show posters.show
GET /posters/public/search PosterController@postersSearch posters.search

Rutas Autenticadas

Método URI Controlador Nombre Middleware
GET /dashboard DashboardController@index dashboard auth, verified

Grupo: Admin (middleware: auth, verified, admin)

Route::middleware(['auth', 'verified', 'admin'])->group(function () {
    // Users
    Route::get('/dashboard/users', [UsersController::class, 'index'])->name('dashboard.users');
    Route::get('/dashboard/users/create', [UsersController::class, 'create'])->name('dashboard.users.create');
    Route::post('/dashboard/users/store', [UsersController::class, 'store'])->name('dashboard.users.store');
    Route::get('/dashboard/users/{user}/edit', [UsersController::class, 'edit'])->name('dashboard.users.edit');
    Route::put('/dashboard/users/{user}', [UsersController::class, 'update'])->name('dashboard.users.update');
    Route::delete('/dashboard/users/{user}', [UsersController::class, 'destroy'])->name('dashboard.users.destroy');

    // Sponsors
    Route::get('/dashboard/sponsors', [SponsorController::class, 'index'])->name('dashboard.sponsors');
    Route::get('/dashboard/sponsors/create', [SponsorController::class, 'create'])->name('dashboard.sponsors.create');
    Route::post('/dashboard/sponsors/store', [SponsorController::class, 'store'])->name('dashboard.sponsors.store');
    Route::get('/dashboard/sponsors/{sponsor}/edit', [SponsorController::class, 'edit'])->name('dashboard.sponsors.edit');
    Route::put('/dashboard/sponsors/{sponsor}', [SponsorController::class, 'update'])->name('dashboard.sponsors.update');
    Route::delete('/dashboard/sponsors/{sponsor}', [SponsorController::class, 'destroy'])->name('dashboard.sponsors.destroy');

    // Categories
    Route::get('/dashboard/categories', [CategoryController::class, 'index'])->name('dashboard.categories');
    Route::get('/dashboard/categories/create', [CategoryController::class, 'create'])->name('dashboard.categories.create');
    Route::post('/dashboard/categories/store', [CategoryController::class, 'store'])->name('dashboard.categories.store');
    Route::get('/dashboard/categories/{category}/edit', [CategoryController::class, 'edit'])->name('dashboard.categories.edit');
    Route::put('/dashboard/categories/{category}', [CategoryController::class, 'update'])->name('dashboard.categories.update');
    Route::delete('/dashboard/categories/{category}', [CategoryController::class, 'destroy'])->name('dashboard.categories.destroy');
});

Grupo: Admin-Speaker (middleware: auth, verified, admin-speaker)

Route::middleware(['auth', 'verified', 'admin-speaker'])->group(function () {
    // Presentations
    Route::get('/dashboard/presentations', [PresentationController::class, 'index'])->name('dashboard.presentations');
    Route::get('/dashboard/presentations/create/{user}', [PresentationController::class, 'create'])->name('dashboard.presentations.create');
    Route::post('/dashboard/presentations/store/{user}', [PresentationController::class, 'store'])->name('dashboard.presentations.store');
    Route::get('/dashboard/presentations/{presentation}/edit', [PresentationController::class, 'edit'])->name('dashboard.presentations.edit');
    Route::put('/dashboard/presentations/{presentation}', [PresentationController::class, 'update'])->name('dashboard.presentations.update');
    Route::delete('/dashboard/presentations/{presentation}', [PresentationController::class, 'destroy'])->name('dashboard.presentations.destroy');
    Route::put('/dashboard/presentations/publish/{presentation}', [PresentationController::class, 'publish'])->name('dashboard.presentations.publish');

    // Posters
    Route::get('/dashboard/posters', [PosterController::class, 'index'])->name('dashboard.posters');
    Route::get('/dashboard/posters/create/{user}', [PosterController::class, 'create'])->name('dashboard.posters.create');
    Route::post('/dashboard/posters/store/{user}', [PosterController::class, 'store'])->name('dashboard.posters.store');
    Route::get('/dashboard/posters/{poster}/edit', [PosterController::class, 'edit'])->name('dashboard.posters.edit');
    Route::put('/dashboard/posters/{poster}', [PosterController::class, 'update'])->name('dashboard.posters.update');
    Route::delete('/dashboard/posters/{poster}', [PosterController::class, 'destroy'])->name('dashboard.posters.destroy');
    Route::put('/dashboard/posters/publish/{poster}', [PosterController::class, 'publish'])->name('dashboard.posters.publish');
});

Rutas de Perfil

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});

2. Rutas de Autenticación (auth.php)

Ubicación: routes/auth.php

Grupo: Guest (middleware: guest)

Método URI Controlador Nombre
GET/loginAuthenticatedSessionController@createlogin
POST/loginAuthenticatedSessionController@store-
GET/registerRegisteredUserController@createregister
POST/registerRegisteredUserController@store-
GET/forgot-passwordPasswordResetLinkController@createpassword.request
POST/forgot-passwordPasswordResetLinkController@storepassword.email
GET/reset-password/{token}NewPasswordController@createpassword.reset
POST/reset-passwordNewPasswordController@storepassword.store

Grupo: Auth (middleware: auth)

Método URI Controlador Nombre
GET/verify-emailEmailVerificationPromptControllerverification.notice
GET/verify-email/{id}/{hash}VerifyEmailControllerverification.verify
POST/email/verification-notificationEmailVerificationNotificationControllerverification.send
GET/confirm-passwordConfirmablePasswordControllerpassword.confirm
PUT/passwordPasswordControllerpassword.update
POST/logoutAuthenticatedSessionController@destroylogout

3. Grupos de Rutas por Middleware

Las rutas están organizadas en grupos según los permisos requeridos:

Middleware Personalizados

Middleware Descripción Rutas Protegidas
admin Verifica rol admin users, sponsors, categories
admin-speaker Verifica rol admin o ponente presentations, posters
owner-poster-create Verifica rol ponente para crear posters/create
owner-poster-edit Verifica propietario del póster posters/edit
owner-presentation-create Verifica rol ponente para crear presentations/create
owner-presentation-edit Verifica propietario de presentación presentations/edit
published-poster-show Verifica póster publicado posters/public/show
Nota: Los middlewares personalizados se definen en app/Http/Middleware/ y se registran en bootstrap/app.php.

Estructura de Archivos de Rutas

routes/
├── web.php          # Rutas principales de la aplicación
├── auth.php         # Rutas de autenticación (Laravel Breeze)
└── console.php      # Rutas de consola/Artisan