feat: ship creator journey v2 and profile updates
This commit is contained in:
@@ -49,7 +49,7 @@ Route::middleware(['web', 'auth', 'normalize.username'])->prefix('profile/cover'
|
||||
|
||||
// ── Per-artwork signal tracking (public) ────────────────────────────────────
|
||||
// GET /api/art/{id}/similar → up to 12 similar artworks (Meilisearch)
|
||||
// POST /api/art/{id}/view → record a view (session-deduped, 5 per 10 min)
|
||||
// POST /api/art/{id}/view → record a page visit as a view
|
||||
// POST /api/art/{id}/download → record a download, returns file URL (10/min)
|
||||
Route::middleware(['web', 'throttle:300,1'])
|
||||
->get('art/{id}/similar', \App\Http\Controllers\Api\SimilarArtworksController::class)
|
||||
@@ -61,7 +61,7 @@ Route::middleware(['web', 'throttle:120,1'])
|
||||
->whereNumber('id')
|
||||
->name('api.art.similar-ai');
|
||||
|
||||
Route::middleware(['web', 'throttle:5,10'])
|
||||
Route::middleware(['web', 'throttle:120,1'])
|
||||
->post('art/{id}/view', \App\Http\Controllers\Api\ArtworkViewController::class)
|
||||
->middleware('forum.bot.protection:api_write')
|
||||
->whereNumber('id')
|
||||
@@ -86,6 +86,11 @@ Route::middleware(['web', 'throttle:social-read'])
|
||||
->where('username', '[A-Za-z0-9_-]{3,20}')
|
||||
->name('api.profile.activity');
|
||||
|
||||
Route::middleware(['web', 'throttle:social-read'])
|
||||
->get('profile/{username}/journey', \App\Http\Controllers\Api\ProfileJourneyController::class)
|
||||
->where('username', '[A-Za-z0-9_-]{3,20}')
|
||||
->name('api.profile.journey');
|
||||
|
||||
Route::middleware(['web', 'throttle:social-read'])
|
||||
->get('comments', [\App\Http\Controllers\Api\SocialCompatibilityController::class, 'comments'])
|
||||
->name('api.social.comments.index');
|
||||
@@ -130,6 +135,7 @@ Route::middleware(['web', 'auth'])->prefix('studio')->name('api.studio.')->group
|
||||
Route::post('artworks/bulk', [\App\Http\Controllers\Studio\StudioArtworksApiController::class, 'bulk'])->name('artworks.bulk');
|
||||
Route::put('artworks/{id}', [\App\Http\Controllers\Studio\StudioArtworksApiController::class, 'update'])->whereNumber('id')->name('artworks.update');
|
||||
Route::post('artworks/{id}/toggle', [\App\Http\Controllers\Studio\StudioArtworksApiController::class, 'toggle'])->whereNumber('id')->name('artworks.toggle');
|
||||
Route::get('artworks/{id}/evolution-options', [\App\Http\Controllers\Studio\StudioArtworksApiController::class, 'evolutionOptions'])->whereNumber('id')->name('artworks.evolution-options');
|
||||
Route::get('artworks/{id}/analytics', [\App\Http\Controllers\Studio\StudioArtworksApiController::class, 'analytics'])->whereNumber('id')->name('artworks.analytics');
|
||||
Route::get('artworks/{id}/ai', [\App\Http\Controllers\Studio\StudioArtworkAiAssistApiController::class, 'show'])->whereNumber('id')->name('artworks.ai.show');
|
||||
Route::post('artworks/{id}/ai/analyze', [\App\Http\Controllers\Studio\StudioArtworkAiAssistApiController::class, 'analyze'])->whereNumber('id')->name('artworks.ai.analyze');
|
||||
@@ -585,6 +591,14 @@ Route::middleware(['web', 'auth', 'normalize.username', 'throttle:artwork-awards
|
||||
Route::delete('{id}/award', [\App\Http\Controllers\Api\ArtworkAwardController::class, 'destroy']) ->whereNumber('id')->name('destroy');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth', 'normalize.username', 'throttle:artwork-awards'])
|
||||
->prefix('artworks')
|
||||
->name('api.artworks.medals.')
|
||||
->group(function () {
|
||||
Route::post('{id}/medal', [\App\Http\Controllers\Api\ArtworkAwardController::class, 'upsert'])->whereNumber('id')->name('store');
|
||||
Route::delete('{id}/medal', [\App\Http\Controllers\Api\ArtworkAwardController::class, 'destroyMedal'])->whereNumber('id')->name('destroy');
|
||||
});
|
||||
|
||||
// ── Latest Comments feed ──────────────────────────────────────────────────────
|
||||
// GET /api/comments/latest?type=all|following|mine&page=N
|
||||
Route::middleware(['web', 'throttle:60,1'])
|
||||
@@ -598,6 +612,13 @@ Route::middleware(['web'])
|
||||
Route::get('{id}/awards', [\App\Http\Controllers\Api\ArtworkAwardController::class, 'show'])->whereNumber('id')->name('show');
|
||||
});
|
||||
|
||||
Route::middleware(['web'])
|
||||
->prefix('artworks')
|
||||
->name('api.artworks.medals.show.')
|
||||
->group(function () {
|
||||
Route::get('{id}/medal', [\App\Http\Controllers\Api\ArtworkAwardController::class, 'show'])->whereNumber('id')->name('show');
|
||||
});
|
||||
|
||||
Route::middleware(['web', 'auth', 'normalize.username'])->group(function () {
|
||||
Route::match(['post', 'delete'], 'like', [\App\Http\Controllers\Api\SocialCompatibilityController::class, 'like'])
|
||||
->name('api.social.like');
|
||||
|
||||
Reference in New Issue
Block a user