group(function () { // Onboarding Route::get('/onboarding/status', [OnboardingController::class, 'status'])->name('api.onboarding.status'); Route::get('/onboarding/options', [OnboardingController::class, 'options'])->name('api.onboarding.options'); Route::post('/onboarding/platform', [OnboardingController::class, 'createPlatform'])->name('api.onboarding.platform'); Route::post('/onboarding/feed', [OnboardingController::class, 'createFeed'])->name('api.onboarding.feed'); Route::post('/onboarding/channel', [OnboardingController::class, 'createChannel'])->name('api.onboarding.channel'); Route::post('/onboarding/route', [OnboardingController::class, 'createRoute'])->name('api.onboarding.route'); Route::post('/onboarding/complete', [OnboardingController::class, 'complete'])->name('api.onboarding.complete'); Route::post('/onboarding/skip', [OnboardingController::class, 'skip'])->name('api.onboarding.skip'); Route::post('/onboarding/reset-skip', [OnboardingController::class, 'resetSkip'])->name('api.onboarding.reset-skip'); // Dashboard stats Route::get('/dashboard/stats', [DashboardController::class, 'stats'])->name('api.dashboard.stats'); // Articles Route::get('/articles', [ArticlesController::class, 'index'])->name('api.articles.index'); Route::post('/articles/{article}/approve', [ArticlesController::class, 'approve'])->name('api.articles.approve'); Route::post('/articles/{article}/reject', [ArticlesController::class, 'reject'])->name('api.articles.reject'); Route::post('/articles/refresh', [ArticlesController::class, 'refresh'])->name('api.articles.refresh'); // Platform Accounts Route::apiResource('platform-accounts', PlatformAccountsController::class)->names([ 'index' => 'api.platform-accounts.index', 'store' => 'api.platform-accounts.store', 'show' => 'api.platform-accounts.show', 'update' => 'api.platform-accounts.update', 'destroy' => 'api.platform-accounts.destroy', ]); Route::post('/platform-accounts/{platformAccount}/set-active', [PlatformAccountsController::class, 'setActive']) ->name('api.platform-accounts.set-active'); // Platform Channels // NOTE: Specific routes must come before resource routes to avoid parameter conflicts Route::get('/platform-channels/communities', [PlatformChannelsController::class, 'getCommunities']) ->name('api.platform-channels.get-communities'); Route::apiResource('platform-channels', PlatformChannelsController::class)->names([ 'index' => 'api.platform-channels.index', 'store' => 'api.platform-channels.store', 'show' => 'api.platform-channels.show', 'update' => 'api.platform-channels.update', 'destroy' => 'api.platform-channels.destroy', ]); Route::post('/platform-channels/{channel}/toggle', [PlatformChannelsController::class, 'toggle']) ->name('api.platform-channels.toggle'); Route::post('/platform-channels/{channel}/accounts', [PlatformChannelsController::class, 'attachAccount']) ->name('api.platform-channels.attach-account'); Route::delete('/platform-channels/{channel}/accounts/{account}', [PlatformChannelsController::class, 'detachAccount']) ->name('api.platform-channels.detach-account'); Route::put('/platform-channels/{channel}/accounts/{account}', [PlatformChannelsController::class, 'updateAccountRelation']) ->name('api.platform-channels.update-account-relation'); // Feeds Route::apiResource('feeds', FeedsController::class)->names([ 'index' => 'api.feeds.index', 'store' => 'api.feeds.store', 'show' => 'api.feeds.show', 'update' => 'api.feeds.update', 'destroy' => 'api.feeds.destroy', ]); Route::post('/feeds/{feed}/toggle', [FeedsController::class, 'toggle'])->name('api.feeds.toggle'); // Routing Route::get('/routing', [RoutingController::class, 'index'])->name('api.routing.index'); Route::post('/routing', [RoutingController::class, 'store'])->name('api.routing.store'); Route::get('/routing/{feed}/{channel}', [RoutingController::class, 'show'])->name('api.routing.show'); Route::put('/routing/{feed}/{channel}', [RoutingController::class, 'update'])->name('api.routing.update'); Route::delete('/routing/{feed}/{channel}', [RoutingController::class, 'destroy'])->name('api.routing.destroy'); Route::post('/routing/{feed}/{channel}/toggle', [RoutingController::class, 'toggle'])->name('api.routing.toggle'); // Keywords Route::get('/routing/{feed}/{channel}/keywords', [KeywordsController::class, 'index'])->name('api.keywords.index'); Route::post('/routing/{feed}/{channel}/keywords', [KeywordsController::class, 'store'])->name('api.keywords.store'); Route::put('/routing/{feed}/{channel}/keywords/{keyword}', [KeywordsController::class, 'update'])->name('api.keywords.update'); Route::delete('/routing/{feed}/{channel}/keywords/{keyword}', [KeywordsController::class, 'destroy'])->name('api.keywords.destroy'); Route::post('/routing/{feed}/{channel}/keywords/{keyword}/toggle', [KeywordsController::class, 'toggle'])->name('api.keywords.toggle'); // Settings Route::get('/settings', [SettingsController::class, 'index'])->name('api.settings.index'); Route::put('/settings', [SettingsController::class, 'update'])->name('api.settings.update'); // Languages Route::get('/languages/available-for-routes', [LanguagesController::class, 'availableForRoutes'])->name('api.languages.available-for-routes'); Route::get('/languages/{language}/feeds', [LanguagesController::class, 'feedsByLanguage'])->name('api.languages.feeds'); Route::get('/languages/{language}/channels', [LanguagesController::class, 'channelsByLanguage'])->name('api.languages.channels'); // Logs Route::get('/logs', [LogsController::class, 'index'])->name('api.logs.index'); });