2026-05-29 00:33:00 +03:00
|
|
|
<?php
|
|
|
|
|
|
2026-05-30 12:02:24 +03:00
|
|
|
use App\Http\Controllers\CompareController;
|
|
|
|
|
use App\Http\Controllers\GameCommentController;
|
2026-05-29 09:37:07 +03:00
|
|
|
use App\Http\Controllers\GameController;
|
|
|
|
|
use App\Http\Controllers\HomeController;
|
|
|
|
|
use App\Http\Controllers\LibraryController;
|
2026-05-29 00:33:00 +03:00
|
|
|
use App\Http\Controllers\ProfileController;
|
2026-05-29 09:37:07 +03:00
|
|
|
use App\Http\Controllers\UserController;
|
2026-05-29 00:33:00 +03:00
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
2026-05-29 09:37:07 +03:00
|
|
|
// Home
|
|
|
|
|
Route::get('/', [HomeController::class, 'index'])->name('home');
|
|
|
|
|
|
|
|
|
|
// Games (public)
|
|
|
|
|
Route::get('/games', [GameController::class, 'index'])->name('games.index');
|
|
|
|
|
Route::get('/games/search', [GameController::class, 'search'])->name('games.search');
|
|
|
|
|
Route::get('/top-rated', [GameController::class, 'topRated'])->name('games.top-rated');
|
|
|
|
|
Route::get('/new-releases', [GameController::class, 'newReleases'])->name('games.new-releases');
|
|
|
|
|
Route::get('/games/{game:slug}', [GameController::class, 'show'])->name('games.show');
|
|
|
|
|
|
|
|
|
|
// User profiles (public)
|
2026-05-30 23:47:32 +03:00
|
|
|
Route::get('/users/{user:slug}', [UserController::class, 'show'])->name('users.show');
|
|
|
|
|
Route::get('/users/{user:slug}/library', [UserController::class, 'library'])->name('users.library');
|
2026-05-29 09:37:07 +03:00
|
|
|
|
2026-05-30 12:02:24 +03:00
|
|
|
// Compare (auth required)
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
2026-05-30 23:47:32 +03:00
|
|
|
Route::get('/users/{user:slug}/compare', [CompareController::class, 'show'])->name('users.compare');
|
2026-05-30 12:02:24 +03:00
|
|
|
});
|
|
|
|
|
|
2026-05-29 09:37:07 +03:00
|
|
|
// Library (auth required)
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
|
Route::post('/library', [LibraryController::class, 'store'])->name('library.store');
|
|
|
|
|
Route::put('/library/{userGame}', [LibraryController::class, 'update'])->name('library.update');
|
|
|
|
|
Route::delete('/library/{userGame}', [LibraryController::class, 'destroy'])->name('library.destroy');
|
2026-05-29 00:33:00 +03:00
|
|
|
});
|
|
|
|
|
|
2026-05-30 02:50:34 +03:00
|
|
|
// Reviews (auth required)
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
|
Route::post('/games/{game:slug}/reviews', [\App\Http\Controllers\ReviewController::class, 'store'])->name('reviews.store');
|
|
|
|
|
Route::put('/reviews/{review}', [\App\Http\Controllers\ReviewController::class, 'update'])->name('reviews.update');
|
|
|
|
|
Route::delete('/reviews/{review}', [\App\Http\Controllers\ReviewController::class, 'destroy'])->name('reviews.destroy');
|
|
|
|
|
});
|
|
|
|
|
|
2026-05-30 12:02:24 +03:00
|
|
|
// Comments (auth required)
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
|
Route::post('/games/{game:slug}/comments', [GameCommentController::class, 'store'])->name('games.comments.store');
|
|
|
|
|
Route::delete('/comments/{comment}', [GameCommentController::class, 'destroy'])->name('comments.destroy');
|
|
|
|
|
});
|
|
|
|
|
|
2026-05-30 02:50:34 +03:00
|
|
|
// Lists
|
2026-05-31 23:35:06 +03:00
|
|
|
Route::get('/community/lists', [\App\Http\Controllers\ListController::class, 'community'])->name('lists.community');
|
2026-05-30 02:50:34 +03:00
|
|
|
Route::get('/lists', [\App\Http\Controllers\ListController::class, 'index'])->name('lists.index')->middleware('auth');
|
|
|
|
|
Route::post('/lists', [\App\Http\Controllers\ListController::class, 'store'])->name('lists.store')->middleware('auth');
|
2026-05-30 17:18:19 +03:00
|
|
|
Route::get('/lists/{list:slug}', [\App\Http\Controllers\ListController::class, 'show'])->name('lists.show');
|
|
|
|
|
Route::delete('/lists/{list:slug}', [\App\Http\Controllers\ListController::class, 'destroy'])->name('lists.destroy')->middleware('auth');
|
|
|
|
|
Route::post('/lists/{list:slug}/games', [\App\Http\Controllers\ListController::class, 'addGame'])->name('lists.add-game')->middleware('auth');
|
|
|
|
|
Route::delete('/lists/{list:slug}/games/{game}', [\App\Http\Controllers\ListController::class, 'removeGame'])->name('lists.remove-game')->middleware('auth');
|
2026-05-30 02:50:34 +03:00
|
|
|
|
2026-05-30 11:23:24 +03:00
|
|
|
// Follow system
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
2026-05-30 23:47:32 +03:00
|
|
|
Route::post('/users/{user:slug}/follow', [\App\Http\Controllers\FollowController::class, 'store'])->name('users.follow');
|
|
|
|
|
Route::delete('/users/{user:slug}/follow', [\App\Http\Controllers\FollowController::class, 'destroy'])->name('users.unfollow');
|
2026-05-30 11:23:24 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Activity feed
|
|
|
|
|
Route::get('/activity', [\App\Http\Controllers\ActivityController::class, 'index'])->name('activity.index')->middleware('auth');
|
|
|
|
|
Route::get('/activity/global', [\App\Http\Controllers\ActivityController::class, 'global'])->name('activity.global');
|
|
|
|
|
|
|
|
|
|
// Notifications
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
|
Route::get('/notifications', [\App\Http\Controllers\NotificationController::class, 'index'])->name('notifications.index');
|
|
|
|
|
Route::post('/notifications/{notification}/read', [\App\Http\Controllers\NotificationController::class, 'markRead'])->name('notifications.read');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Sitemap
|
|
|
|
|
Route::get('/sitemap.xml', function () {
|
|
|
|
|
$path = public_path('sitemap.xml');
|
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
|
abort(404);
|
|
|
|
|
}
|
|
|
|
|
return response()->file($path, ['Content-Type' => 'application/xml']);
|
|
|
|
|
})->name('sitemap');
|
|
|
|
|
|
2026-05-31 23:29:18 +03:00
|
|
|
// API Key Management
|
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
|
|
|
Route::get('/settings/api-keys', [\App\Http\Controllers\ApiKeyController::class, 'index'])->name('settings.api-keys');
|
|
|
|
|
Route::post('/settings/api-keys', [\App\Http\Controllers\ApiKeyController::class, 'store'])->name('settings.api-keys.store');
|
|
|
|
|
Route::delete('/settings/api-keys/{apiKey}', [\App\Http\Controllers\ApiKeyController::class, 'destroy'])->name('settings.api-keys.destroy');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// API Docs (public)
|
|
|
|
|
Route::get('/api/docs', function () {
|
|
|
|
|
return view('api.docs');
|
|
|
|
|
})->name('api.docs');
|
|
|
|
|
|
2026-05-29 09:37:07 +03:00
|
|
|
// Dashboard (Breeze default, keep for now)
|
2026-05-29 00:33:00 +03:00
|
|
|
Route::get('/dashboard', function () {
|
2026-05-29 09:37:07 +03:00
|
|
|
return redirect()->route('home');
|
2026-05-29 00:33:00 +03:00
|
|
|
})->middleware(['auth', 'verified'])->name('dashboard');
|
|
|
|
|
|
2026-05-29 09:37:07 +03:00
|
|
|
// Profile (Breeze)
|
2026-05-29 00:33:00 +03:00
|
|
|
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');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
require __DIR__.'/auth.php';
|
2026-05-31 23:29:18 +03:00
|
|
|
require __DIR__.'/api.php';
|