Wire new routes and environment keys for the recent modules.

Register AdSense, artwork review, comment captcha, lazy collections, and upload review props, and document the matching env vars and CLI commands.
This commit is contained in:
2026-09-20 14:51:04 +02:00
parent 02861b5a2f
commit a206981914
4 changed files with 75 additions and 1 deletions
+14 -1
View File
@@ -486,6 +486,11 @@ Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/uploads')-
Route::get('pending', [\App\Http\Controllers\Api\Admin\UploadModerationController::class, 'pending'])
->name('pending');
Route::get('{id}/preview', [\App\Http\Controllers\Api\Admin\UploadModerationController::class, 'preview'])
->middleware('signed')
->whereUuid('id')
->name('preview');
Route::post('{id}/approve', [\App\Http\Controllers\Api\Admin\UploadModerationController::class, 'approve'])
->whereUuid('id')
->name('approve');
@@ -495,6 +500,12 @@ Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/uploads')-
->name('reject');
});
Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/artwork-review')->name('api.admin.artwork-review.')->group(function () {
Route::get('pending', [\App\Http\Controllers\Api\Admin\ArtworkModerationController::class, 'pending'])->name('pending');
Route::post('{id}/approve', [\App\Http\Controllers\Api\Admin\ArtworkModerationController::class, 'approve'])->whereNumber('id')->name('approve');
Route::post('{id}/reject', [\App\Http\Controllers\Api\Admin\ArtworkModerationController::class, 'reject'])->whereNumber('id')->name('reject');
});
Route::middleware(['web', 'auth', 'admin.moderation'])->prefix('admin/reports')->name('api.admin.reports.')->group(function () {
Route::get('queue', [\App\Http\Controllers\Api\Admin\ModerationReportQueueController::class, 'index'])
->name('queue');
@@ -713,7 +724,7 @@ Route::middleware(['web', 'throttle:60,1'])
->whereNumber('id')
->name('api.artworks.comments.index');
Route::middleware(['web', 'auth', 'verified', 'normalize.username', 'throttle:20,1'])->group(function () {
Route::middleware(['web', 'auth', 'verified', 'normalize.username', 'throttle:20,1', 'comment.captcha', 'forum.spam.detection:artwork_comment'])->group(function () {
Route::post('artworks/{id}/comments', [\App\Http\Controllers\Api\ArtworkCommentController::class, 'store'])
->whereNumber('id')
->name('api.artworks.comments.store');
@@ -901,6 +912,7 @@ Route::middleware(['web', 'auth', 'normalize.username', 'throttle:60,1'])
// ── Profile API (public, throttled) ─────────────────────────────────────────
// GET /api/profile/{username}/artworks?sort=latest|trending|rising|views|favs&cursor=...
// GET /api/profile/{username}/favourites?cursor=...
// GET /api/profile/{username}/collections
// GET /api/profile/{username}/stats
Route::middleware(['web', 'throttle:60,1'])
->prefix('profile/{username}')
@@ -909,6 +921,7 @@ Route::middleware(['web', 'throttle:60,1'])
->group(function () {
Route::get('artworks', [\App\Http\Controllers\Api\ProfileApiController::class, 'artworks'])->name('artworks');
Route::get('favourites', [\App\Http\Controllers\Api\ProfileApiController::class, 'favourites'])->name('favourites');
Route::get('collections', [\App\Http\Controllers\Api\ProfileApiController::class, 'collections'])->name('collections');
Route::get('stats', [\App\Http\Controllers\Api\ProfileApiController::class, 'stats'])->name('stats');
Route::get('featured-artworks', [\App\Http\Controllers\User\ProfileController::class, 'featuredArtworks'])->name('featured-artworks');
Route::get('world-history', [\App\Http\Controllers\User\ProfileController::class, 'worldHistory'])->name('world-history');
+22
View File
@@ -40,6 +40,7 @@ use App\Http\Controllers\RSS\TagFeedController;
use App\Http\Controllers\RSS\CreatorFeedController;
use App\Http\Controllers\RSS\BlogFeedController;
use App\Http\Controllers\Admin\AdminController;
use App\Http\Controllers\Admin\AdsenseAnalyticsController;
use App\Http\Controllers\Moderation\StaffApplicationsController;
use App\Http\Controllers\Moderation\StoriesController as ModerationStoriesController;
use App\Http\Controllers\Moderation\UsernameQueueController;
@@ -78,6 +79,7 @@ use App\Http\Controllers\Settings\CollectionManageController;
use App\Http\Controllers\Settings\CollectionProgrammingController;
use App\Http\Controllers\Settings\CollectionSurfaceController;
use App\Services\GroupMembershipService;
use App\Services\Moderation\ArtworkUploadPolicy;
use Inertia\Inertia;
Route::get('/build-info.json', BuildInfoController::class)->name('build-info');
@@ -976,6 +978,10 @@ Route::middleware(['auth', 'ensure.onboarding.complete'])->group(function () {
'filesCdnUrl' => config('cdn.files_url'),
'chunkSize' => (int) config('uploads.chunk.max_bytes', 5242880),
'chunkRequestTimeoutMs' => (int) config('uploads.chunk.request_timeout_ms', 45000),
'max_secondary_categories' => (int) config('categories.max_secondary_categories', 5),
'requires_upload_review' => $user
? (bool) app(ArtworkUploadPolicy::class)->assess($user)['requires_review']
: false,
'feature_flags' => [
'uploads_v2' => (bool) config('features.uploads_v2', false),
],
@@ -1036,6 +1042,10 @@ Route::middleware(['auth', 'ensure.onboarding.complete'])->group(function () {
'filesCdnUrl' => config('cdn.files_url'),
'chunkSize' => (int) config('uploads.chunk.max_bytes', 5242880),
'chunkRequestTimeoutMs' => (int) config('uploads.chunk.request_timeout_ms', 45000),
'max_secondary_categories' => (int) config('categories.max_secondary_categories', 5),
'requires_upload_review' => $user
? (bool) app(ArtworkUploadPolicy::class)->assess($user)['requires_review']
: false,
'feature_flags' => [
'uploads_v2' => (bool) config('features.uploads_v2', false),
],
@@ -1069,6 +1079,18 @@ Route::middleware(['auth', 'verified', 'ensure.onboarding.complete'])->prefix('m
Route::get('/{id}', [\App\Http\Controllers\Messaging\MessagesPageController::class, 'show'])->whereNumber('id')->name('show');
});
Route::middleware(['auth', 'admin.role'])
->prefix('admin/adsense')
->name('admin.adsense.')
->group(function (): void {
Route::get('/', [AdsenseAnalyticsController::class, 'index'])->name('index');
Route::get('/connect', [AdsenseAnalyticsController::class, 'connect'])->name('connect');
Route::get('/oauth/callback', [AdsenseAnalyticsController::class, 'callback'])->name('callback');
Route::post('/account', [AdsenseAnalyticsController::class, 'selectAccount'])->name('account');
Route::post('/sync', [AdsenseAnalyticsController::class, 'sync'])->name('sync');
Route::delete('/disconnect', [AdsenseAnalyticsController::class, 'disconnect'])->name('disconnect');
});
Route::middleware(['auth'])
->prefix('admin')
->group(function () {