Implement catalog CRUD overhaul, snapshot fallback activation, and billing/UX hardening

This commit is contained in:
Dwindi Ramadhana
2026-02-17 00:03:35 +07:00
parent e6aef31dd1
commit 2726b6c312
37 changed files with 2936 additions and 204 deletions

View File

@@ -1,6 +1,7 @@
<?php
use App\Http\Controllers\Dashboard\AdminDashboardController;
use App\Http\Controllers\Dashboard\AdminEmojiCatalogController;
use App\Http\Controllers\Dashboard\UserDashboardController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
@@ -12,6 +13,7 @@ Route::middleware('auth')->prefix('dashboard')->name('dashboard.')->group(functi
Route::get('/keywords/search', [UserDashboardController::class, 'keywordSearch'])->name('keywords.search');
Route::post('/keywords', [UserDashboardController::class, 'storeKeyword'])->name('keywords.store');
Route::put('/keywords/{keyword}', [UserDashboardController::class, 'updateKeyword'])->name('keywords.update');
Route::put('/keywords/{keyword}/active', [UserDashboardController::class, 'toggleKeywordActive'])->name('keywords.toggle_active');
Route::delete('/keywords/{keyword}', [UserDashboardController::class, 'deleteKeyword'])->name('keywords.delete');
Route::post('/keywords/import', [UserDashboardController::class, 'importKeywords'])->name('keywords.import');
Route::get('/keywords/export', [UserDashboardController::class, 'exportKeywords'])->name('keywords.export');
@@ -41,6 +43,16 @@ Route::middleware('auth')->prefix('dashboard')->name('dashboard.')->group(functi
Route::post('/pricing/snapshot', [AdminDashboardController::class, 'createPricingSnapshot'])->name('pricing.snapshot');
Route::post('/pricing/paypal-sync', [AdminDashboardController::class, 'syncPaypalPlans'])->name('pricing.paypal_sync');
Route::get('/catalog', [AdminEmojiCatalogController::class, 'index'])->name('catalog');
Route::get('/catalog/create', [AdminEmojiCatalogController::class, 'create'])->name('catalog.create');
Route::get('/catalog/{emojiId}/edit', [AdminEmojiCatalogController::class, 'edit'])->whereNumber('emojiId')->name('catalog.edit');
Route::post('/catalog', [AdminEmojiCatalogController::class, 'store'])->name('catalog.store');
Route::put('/catalog/{emojiId}', [AdminEmojiCatalogController::class, 'update'])->whereNumber('emojiId')->name('catalog.update');
Route::delete('/catalog/{emojiId}', [AdminEmojiCatalogController::class, 'destroy'])->whereNumber('emojiId')->name('catalog.delete');
Route::post('/catalog/import-json', [AdminEmojiCatalogController::class, 'importCurrentJson'])->name('catalog.import_json');
Route::post('/catalog/publish', [AdminEmojiCatalogController::class, 'publish'])->name('catalog.publish');
Route::post('/catalog/snapshots/activate', [AdminEmojiCatalogController::class, 'activateSnapshot'])->name('catalog.snapshot.activate');
Route::get('/webhooks', [AdminDashboardController::class, 'webhooks'])->name('webhooks');
Route::post('/webhooks/{id}/replay', [AdminDashboardController::class, 'replayWebhook'])->name('webhooks.replay');
Route::post('/webhooks/replay-failed', [AdminDashboardController::class, 'replayFailedWebhooks'])->name('webhooks.replay_failed');