Wire admin studio SSR and search infrastructure

This commit is contained in:
2026-05-01 11:46:06 +02:00
parent 257b0dbef6
commit 18cea8b0f0
329 changed files with 197465 additions and 2741 deletions

View File

@@ -7,6 +7,10 @@ Route::middleware(['web', 'throttle:60,1'])
->get('categories', [\App\Http\Controllers\CategoryController::class, 'index'])
->name('api.categories.index');
Route::middleware(['web', 'throttle:120,1'])
->post('worlds/analytics/events', [\App\Http\Controllers\Api\WorldAnalyticsEventController::class, 'store'])
->name('api.worlds.analytics.events.store');
Route::middleware(['web', 'auth'])->prefix('dashboard')->name('api.dashboard.')->group(function () {
Route::get('activity', [DashboardController::class, 'activity'])->name('activity');
Route::get('analytics', [DashboardController::class, 'analytics'])->name('analytics');
@@ -139,6 +143,13 @@ Route::prefix('rank')->name('api.rank.')->middleware(['throttle:60,1'])->group(f
// ── Studio Pro API (authenticated) ─────────────────────────────────────────────
Route::middleware(['web', 'auth'])->prefix('studio')->name('api.studio.')->group(function () {
Route::post('events', [\App\Http\Controllers\Studio\StudioEventsApiController::class, 'store'])->name('events.store');
Route::get('upload-queue', [\App\Http\Controllers\Studio\StudioUploadQueueApiController::class, 'index'])->name('upload-queue.index');
Route::post('upload-queue/batches', [\App\Http\Controllers\Studio\StudioUploadQueueApiController::class, 'store'])->name('upload-queue.store');
Route::post('upload-queue/bulk', [\App\Http\Controllers\Studio\StudioUploadQueueApiController::class, 'bulk'])->name('upload-queue.bulk');
Route::post('upload-queue/items/{id}/fail', [\App\Http\Controllers\Studio\StudioUploadQueueApiController::class, 'markFailed'])->whereNumber('id')->name('upload-queue.items.fail');
Route::post('upload-queue/items/{id}/retry', [\App\Http\Controllers\Studio\StudioUploadQueueApiController::class, 'retry'])->whereNumber('id')->name('upload-queue.items.retry');
Route::post('news/media/upload', [\App\Http\Controllers\Studio\StudioNewsMediaApiController::class, 'store'])->middleware(['throttle:20,1', 'forum.bot.protection:api_write'])->name('news.media.upload');
Route::delete('news/media', [\App\Http\Controllers\Studio\StudioNewsMediaApiController::class, 'destroy'])->middleware(['throttle:20,1', 'forum.bot.protection:api_write'])->name('news.media.destroy');
Route::post('worlds/media/upload', [\App\Http\Controllers\Studio\StudioWorldMediaApiController::class, 'store'])->middleware(['throttle:20,1', 'forum.bot.protection:api_write'])->name('worlds.media.upload');
Route::delete('worlds/media', [\App\Http\Controllers\Studio\StudioWorldMediaApiController::class, 'destroy'])->middleware(['throttle:20,1', 'forum.bot.protection:api_write'])->name('worlds.media.destroy');
Route::put('preferences', [\App\Http\Controllers\Studio\StudioPreferencesApiController::class, 'updatePreferences'])->name('preferences.settings');
@@ -709,6 +720,21 @@ Route::middleware(['web', 'auth', 'normalize.username', 'throttle:20,1'])->group
->name('api.artworks.comments.destroy');
});
Route::middleware(['web', 'throttle:60,1'])
->get('news/articles/{id}/comments', [\App\Http\Controllers\Api\NewsArticleCommentController::class, 'index'])
->whereNumber('id')
->name('api.news.comments.index');
Route::middleware(['web', 'auth', 'normalize.username', 'throttle:20,1'])->group(function () {
Route::post('news/articles/{id}/comments', [\App\Http\Controllers\Api\NewsArticleCommentController::class, 'store'])
->whereNumber('id')
->name('api.news.comments.store');
Route::delete('news/articles/{id}/comments/{commentId}', [\App\Http\Controllers\Api\NewsArticleCommentController::class, 'destroy'])
->whereNumber(['id', 'commentId'])
->name('api.news.comments.destroy');
});
// ── Reactions ─────────────────────────────────────────────────────────────────
// GET /api/artworks/{id}/reactions list artwork reaction totals (public)
// POST /api/artworks/{id}/reactions toggle artwork reaction (auth)
@@ -723,6 +749,10 @@ Route::middleware(['web', 'throttle:reactions-read'])->group(function () {
Route::get('comments/{id}/reactions', [\App\Http\Controllers\Api\ReactionController::class, 'commentReactions'])
->whereNumber('id')
->name('api.comments.reactions.index');
Route::get('news/comments/{id}/reactions', [\App\Http\Controllers\Api\ReactionController::class, 'newsCommentReactions'])
->whereNumber('id')
->name('api.news.comments.reactions.index');
});
Route::middleware(['web', 'auth', 'normalize.username', 'throttle:reactions-write'])->group(function () {
@@ -733,6 +763,10 @@ Route::middleware(['web', 'auth', 'normalize.username', 'throttle:reactions-writ
Route::post('comments/{id}/reactions', [\App\Http\Controllers\Api\ReactionController::class, 'toggleCommentReaction'])
->whereNumber('id')
->name('api.comments.reactions.toggle');
Route::post('news/comments/{id}/reactions', [\App\Http\Controllers\Api\ReactionController::class, 'toggleNewsCommentReaction'])
->whereNumber('id')
->name('api.news.comments.reactions.toggle');
});
// ── Personalised suggestions (auth required) ────────────────────────────────