2026-02-06 11:26:13 +02:00
|
|
|
<?php
|
|
|
|
|
|
2026-02-21 15:10:37 +02:00
|
|
|
use App\Http\Controllers\Admin\FeatureFlagController;
|
2026-02-21 14:27:38 +02:00
|
|
|
use App\Http\Controllers\Admin\UserManagementController;
|
2026-02-14 17:20:50 +02:00
|
|
|
use App\Http\Controllers\AdminController;
|
2026-02-06 15:13:20 +02:00
|
|
|
use App\Http\Controllers\BookmarkController;
|
2026-02-21 14:57:38 +02:00
|
|
|
use App\Http\Controllers\CategoryManagementController;
|
2026-02-06 15:13:20 +02:00
|
|
|
use App\Http\Controllers\CommentController;
|
2026-02-21 15:50:32 +02:00
|
|
|
use App\Http\Controllers\CommentModerationController;
|
2026-02-06 14:56:56 +02:00
|
|
|
use App\Http\Controllers\ProductController;
|
2026-02-06 14:33:11 +02:00
|
|
|
use App\Http\Controllers\ProfileController;
|
2026-02-21 16:12:57 +02:00
|
|
|
use App\Http\Controllers\TagController;
|
2026-02-06 15:13:20 +02:00
|
|
|
use App\Http\Controllers\UpvoteController;
|
2026-10-17 16:04:25 +03:00
|
|
|
use App\Http\Controllers\UserSearchController;
|
2026-02-15 16:24:47 +02:00
|
|
|
use App\Http\Controllers\WaitlistController;
|
2026-02-06 11:26:13 +02:00
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
2026-02-14 16:11:09 +02:00
|
|
|
Route::get('/', [ProductController::class, 'homepage'])->name('homepage');
|
2026-02-06 11:26:13 +02:00
|
|
|
|
2026-02-15 16:24:47 +02:00
|
|
|
// Waitlist Routes
|
|
|
|
|
Route::get('/waitlist', [WaitlistController::class, 'index'])->name('waitlist.index');
|
|
|
|
|
Route::post('/waitlist', [WaitlistController::class, 'store'])->name('waitlist.store');
|
|
|
|
|
|
2026-02-06 11:26:13 +02:00
|
|
|
Auth::routes();
|
|
|
|
|
|
|
|
|
|
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
|
2026-02-06 14:33:11 +02:00
|
|
|
|
|
|
|
|
// Profile Routes
|
|
|
|
|
Route::middleware(['auth'])->group(function () {
|
|
|
|
|
Route::get('/profile/edit', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
|
|
|
Route::put('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
|
|
|
Route::delete('/profile/avatar', [ProfileController::class, 'deleteAvatar'])->name('profile.avatar.delete');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Route::get('/profile/{user}', [ProfileController::class, 'show'])->name('profile.show');
|
|
|
|
|
|
2026-02-06 14:56:56 +02:00
|
|
|
// Product Routes
|
|
|
|
|
Route::get('/products', [ProductController::class, 'index'])->name('products.index');
|
|
|
|
|
Route::get('/products/{product}', [ProductController::class, 'show'])->name('products.show');
|
|
|
|
|
|
|
|
|
|
Route::middleware(['auth'])->group(function () {
|
|
|
|
|
Route::get('/products-submit', [ProductController::class, 'create'])->name('products.create');
|
|
|
|
|
Route::post('/products', [ProductController::class, 'store'])->name('products.store');
|
|
|
|
|
Route::get('/products/{product}/edit', [ProductController::class, 'edit'])->name('products.edit');
|
|
|
|
|
Route::put('/products/{product}', [ProductController::class, 'update'])->name('products.update');
|
|
|
|
|
Route::delete('/products/{product}', [ProductController::class, 'destroy'])->name('products.destroy');
|
2026-02-06 15:13:20 +02:00
|
|
|
|
2026-10-17 16:04:25 +03:00
|
|
|
// User search (team member picker)
|
|
|
|
|
Route::get('/users/search', UserSearchController::class)->name('users.search');
|
|
|
|
|
|
2026-02-06 15:13:20 +02:00
|
|
|
// Upvotes
|
|
|
|
|
Route::post('/products/{product}/upvote', [UpvoteController::class, 'store'])->name('products.upvote');
|
2026-02-14 17:06:03 +02:00
|
|
|
Route::get('/upvotes', [UpvoteController::class, 'index'])->name('upvotes.index');
|
2026-02-06 15:13:20 +02:00
|
|
|
|
|
|
|
|
// Comments
|
|
|
|
|
Route::post('/products/{product}/comments', [CommentController::class, 'store'])->name('products.comments.store');
|
|
|
|
|
Route::delete('/comments/{comment}', [CommentController::class, 'destroy'])->name('comments.destroy');
|
|
|
|
|
|
|
|
|
|
// Bookmarks
|
|
|
|
|
Route::post('/products/{product}/bookmark', [BookmarkController::class, 'store'])->name('products.bookmark');
|
2026-02-14 17:06:03 +02:00
|
|
|
Route::get('/bookmarks', [BookmarkController::class, 'index'])->name('bookmarks.index');
|
2026-02-06 14:56:56 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Admin/Moderator Product Management Routes
|
|
|
|
|
Route::middleware(['auth', 'moderator'])->group(function () {
|
|
|
|
|
Route::get('/products-manage', [ProductController::class, 'manage'])->name('products.manage');
|
|
|
|
|
Route::post('/products/{product}/approve', [ProductController::class, 'approve'])->name('products.approve');
|
|
|
|
|
Route::post('/products/{product}/reject', [ProductController::class, 'reject'])->name('products.reject');
|
2026-02-21 14:57:38 +02:00
|
|
|
|
|
|
|
|
// Category Management Routes (Moderators & Admins)
|
|
|
|
|
Route::resource('categories', CategoryManagementController::class);
|
2026-02-21 15:50:32 +02:00
|
|
|
|
2026-02-21 16:12:57 +02:00
|
|
|
// Tag Management Routes (Moderators & Admins)
|
|
|
|
|
Route::resource('tags', TagController::class);
|
|
|
|
|
|
2026-02-21 15:50:32 +02:00
|
|
|
// Comment Moderation Routes (Moderators & Admins)
|
|
|
|
|
Route::prefix('moderation')->name('moderation.')->group(function () {
|
|
|
|
|
Route::get('/comments', [CommentModerationController::class, 'index'])->name('comments.index');
|
|
|
|
|
Route::get('/comments/{comment}/edit', [CommentModerationController::class, 'edit'])->name('comments.edit');
|
|
|
|
|
Route::put('/comments/{comment}', [CommentModerationController::class, 'update'])->name('comments.update');
|
|
|
|
|
Route::post('/comments/{comment}/approve', [CommentModerationController::class, 'approve'])->name('comments.approve');
|
|
|
|
|
Route::post('/comments/{comment}/reject', [CommentModerationController::class, 'reject'])->name('comments.reject');
|
|
|
|
|
Route::post('/comments/{comment}/pending', [CommentModerationController::class, 'setPending'])->name('comments.setPending');
|
|
|
|
|
Route::delete('/comments/{comment}', [CommentModerationController::class, 'destroy'])->name('comments.destroy');
|
|
|
|
|
});
|
2026-02-06 14:56:56 +02:00
|
|
|
});
|
|
|
|
|
|
2026-02-14 17:20:50 +02:00
|
|
|
// Admin Routes
|
2026-02-06 14:33:11 +02:00
|
|
|
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
|
2026-02-14 17:20:50 +02:00
|
|
|
Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
|
2026-02-06 14:33:11 +02:00
|
|
|
|
2026-02-21 14:27:38 +02:00
|
|
|
// User Management
|
|
|
|
|
Route::get('/users', [UserManagementController::class, 'index'])->name('users.index');
|
|
|
|
|
Route::get('/users/{user}/edit', [UserManagementController::class, 'edit'])->name('users.edit');
|
|
|
|
|
Route::put('/users/{user}', [UserManagementController::class, 'update'])->name('users.update');
|
|
|
|
|
Route::delete('/users/{user}', [UserManagementController::class, 'destroy'])->name('users.destroy');
|
|
|
|
|
Route::post('/users/{user}/roles/{role}/toggle', [UserManagementController::class, 'toggleRole'])->name('users.roles.toggle');
|
2026-02-06 14:33:11 +02:00
|
|
|
|
2026-02-21 15:10:37 +02:00
|
|
|
// Feature Flag Management
|
|
|
|
|
Route::get('/feature-flags', [FeatureFlagController::class, 'index'])->name('feature-flags.index');
|
|
|
|
|
Route::post('/feature-flags/toggle', [FeatureFlagController::class, 'toggle'])->name('feature-flags.toggle');
|
|
|
|
|
Route::post('/feature-flags/purge', [FeatureFlagController::class, 'purge'])->name('feature-flags.purge');
|
|
|
|
|
|
2026-02-06 14:33:11 +02:00
|
|
|
Route::get('/settings', function () {
|
|
|
|
|
return 'Settings (Admin Only)';
|
|
|
|
|
})->name('settings');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Moderator Routes (example)
|
|
|
|
|
Route::middleware(['auth', 'moderator'])->prefix('moderator')->name('moderator.')->group(function () {
|
|
|
|
|
Route::get('/dashboard', function () {
|
|
|
|
|
return 'Moderator Dashboard';
|
|
|
|
|
})->name('dashboard');
|
|
|
|
|
|
|
|
|
|
Route::get('/products/pending', function () {
|
|
|
|
|
return 'Pending Products (Moderator Only)';
|
|
|
|
|
})->name('products.pending');
|
|
|
|
|
});
|