Files
ai-web/routes/web.php
cjd 260460df03
Some checks failed
Tests / PHP 8.2 (push) Has been cancelled
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
爬虫开发
2026-02-18 12:56:36 +08:00

135 lines
9.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Http\Controllers\Admin\AiModelController as AdminAiModelController;
use App\Http\Controllers\Admin\ArticleController as AdminArticleController;
use App\Http\Controllers\Admin\AuthController as AdminAuthController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\FeedbackController as AdminFeedbackController;
use App\Http\Controllers\Admin\GuideController as AdminGuideController;
use App\Http\Controllers\Admin\CategoryController as AdminCategoryController;
use App\Http\Controllers\Admin\CrawlAlertController as AdminCrawlAlertController;
use App\Http\Controllers\Admin\CrawlerRuleController as AdminCrawlerRuleController;
use App\Http\Controllers\Admin\CrawlRunController as AdminCrawlRunController;
use App\Http\Controllers\Admin\SiteSettingController as AdminSiteSettingController;
use App\Http\Controllers\Admin\UploadController as AdminUploadController;
use App\Http\Controllers\Admin\SourceController as AdminSourceController;
use App\Http\Controllers\Admin\ToolController as AdminToolController;
use App\Http\Controllers\Site\FeedbackController;
use App\Http\Controllers\Site\GuideController;
use App\Http\Controllers\Site\ModelController;
use App\Http\Controllers\Site\NewsController;
use App\Http\Controllers\Site\SeoController;
use App\Http\Controllers\Site\ToolController;
use Illuminate\Support\Facades\Route;
Route::get('/', [ToolController::class, 'index'])->name('home');
Route::get('/tools', [ToolController::class, 'index'])->name('tools.index');
Route::get('/tools/list', [ToolController::class, 'list'])->name('tools.list');
Route::get('/tools/category/{slug}', [ToolController::class, 'byCategory'])->name('tools.by-category');
Route::get('/tools/{slug}', [ToolController::class, 'show'])->name('tools.show');
Route::get('/models', [ModelController::class, 'index'])->name('models.index');
Route::get('/models/use-case/{slug}', [ModelController::class, 'byUseCase'])->name('models.by-use-case');
Route::get('/models/{slug}', [ModelController::class, 'show'])->name('models.show');
Route::get('/news', [NewsController::class, 'index'])->name('news.index');
Route::get('/news/{slug}', [NewsController::class, 'show'])->name('news.show');
Route::get('/guides', [GuideController::class, 'index'])->name('guides.index');
Route::get('/guides/topic/{slug}', [GuideController::class, 'byTopic'])->name('guides.by-topic');
Route::get('/guides/{slug}', [GuideController::class, 'show'])->name('guides.show');
Route::post('/feedback', [FeedbackController::class, 'store'])->name('feedback.store');
Route::get('/robots.txt', [SeoController::class, 'robots'])->name('seo.robots');
Route::get('/sitemap.xml', [SeoController::class, 'sitemap'])->name('seo.sitemap');
Route::prefix('admin')->name('admin.')->group(function (): void {
Route::middleware('admin.guest')->group(function (): void {
Route::get('/login', [AdminAuthController::class, 'showLogin'])->name('login');
Route::post('/login', [AdminAuthController::class, 'login'])->name('login.submit');
});
Route::get('/captcha', [AdminAuthController::class, 'captcha'])->name('captcha');
Route::middleware('admin.auth')->group(function (): void {
Route::post('/logout', [AdminAuthController::class, 'logout'])->name('logout');
Route::post('/uploads/markdown-image', [AdminUploadController::class, 'markdownImage'])->name('uploads.markdown-image');
Route::post('/markdown/preview', [AdminUploadController::class, 'markdownPreview'])->name('markdown.preview');
Route::get('/', DashboardController::class)->name('dashboard');
Route::get('/tools', [AdminToolController::class, 'index'])->name('tools.index');
Route::get('/tools/create', [AdminToolController::class, 'create'])->name('tools.create');
Route::post('/tools', [AdminToolController::class, 'store'])->name('tools.store');
Route::get('/tools/{tool}/edit', [AdminToolController::class, 'edit'])->name('tools.edit');
Route::put('/tools/{tool}', [AdminToolController::class, 'update'])->name('tools.update');
Route::post('/tools/{tool}/publish', [AdminToolController::class, 'publish'])->name('tools.publish');
Route::post('/tools/{tool}/mark-stale', [AdminToolController::class, 'markStale'])->name('tools.mark-stale');
Route::get('/models', [AdminAiModelController::class, 'index'])->name('models.index');
Route::get('/models/create', [AdminAiModelController::class, 'create'])->name('models.create');
Route::post('/models', [AdminAiModelController::class, 'store'])->name('models.store');
Route::get('/models/{model}/edit', [AdminAiModelController::class, 'edit'])->name('models.edit');
Route::put('/models/{model}', [AdminAiModelController::class, 'update'])->name('models.update');
Route::post('/models/{model}/publish', [AdminAiModelController::class, 'publish'])->name('models.publish');
Route::post('/models/{model}/mark-stale', [AdminAiModelController::class, 'markStale'])->name('models.mark-stale');
Route::get('/articles', [AdminArticleController::class, 'index'])->name('articles.index');
Route::get('/articles/create', [AdminArticleController::class, 'create'])->name('articles.create');
Route::post('/articles', [AdminArticleController::class, 'store'])->name('articles.store');
Route::get('/articles/{article}/edit', [AdminArticleController::class, 'edit'])->name('articles.edit');
Route::put('/articles/{article}', [AdminArticleController::class, 'update'])->name('articles.update');
Route::post('/articles/{article}/publish', [AdminArticleController::class, 'publish'])->name('articles.publish');
Route::post('/articles/{article}/mark-stale', [AdminArticleController::class, 'markStale'])->name('articles.mark-stale');
Route::get('/guides', [AdminGuideController::class, 'index'])->name('guides.index');
Route::get('/guides/create', [AdminGuideController::class, 'create'])->name('guides.create');
Route::post('/guides', [AdminGuideController::class, 'store'])->name('guides.store');
Route::get('/guides/{guide}/edit', [AdminGuideController::class, 'edit'])->name('guides.edit');
Route::put('/guides/{guide}', [AdminGuideController::class, 'update'])->name('guides.update');
Route::post('/guides/{guide}/publish', [AdminGuideController::class, 'publish'])->name('guides.publish');
Route::get('/categories', [AdminCategoryController::class, 'index'])->name('categories.index');
Route::get('/categories/create', [AdminCategoryController::class, 'create'])->name('categories.create');
Route::post('/categories', [AdminCategoryController::class, 'store'])->name('categories.store');
Route::get('/categories/{category}/edit', [AdminCategoryController::class, 'edit'])->name('categories.edit');
Route::put('/categories/{category}', [AdminCategoryController::class, 'update'])->name('categories.update');
Route::get('/sources', [AdminSourceController::class, 'index'])->name('sources.index');
Route::get('/sources/create', [AdminSourceController::class, 'create'])->name('sources.create');
Route::post('/sources', [AdminSourceController::class, 'store'])->name('sources.store');
Route::get('/sources/{source}/edit', [AdminSourceController::class, 'edit'])->name('sources.edit');
Route::put('/sources/{source}', [AdminSourceController::class, 'update'])->name('sources.update');
Route::get('/settings', [AdminSiteSettingController::class, 'index'])->name('settings.index');
Route::get('/settings/{module}', [AdminSiteSettingController::class, 'show'])->name('settings.show');
Route::put('/settings/{module}', [AdminSiteSettingController::class, 'update'])->name('settings.update');
Route::post('/settings/{module}/items', [AdminSiteSettingController::class, 'storeItem'])->name('settings.items.store');
Route::get('/settings/{module}/items/{item}/edit', [AdminSiteSettingController::class, 'editItem'])->name('settings.items.edit');
Route::put('/settings/{module}/items/{item}', [AdminSiteSettingController::class, 'updateItem'])->name('settings.items.update');
Route::delete('/settings/{module}/items/{item}', [AdminSiteSettingController::class, 'destroyItem'])->name('settings.items.destroy');
Route::get('/feedback', [AdminFeedbackController::class, 'index'])->name('feedback.index');
Route::put('/feedback/{feedback}', [AdminFeedbackController::class, 'updateStatus'])->name('feedback.status');
Route::get('/crawlers', [AdminCrawlerRuleController::class, 'index'])->name('crawlers.index');
Route::get('/crawlers/create', [AdminCrawlerRuleController::class, 'create'])->name('crawlers.create');
Route::post('/crawlers', [AdminCrawlerRuleController::class, 'store'])->name('crawlers.store');
Route::post('/crawlers/preview', [AdminCrawlerRuleController::class, 'preview'])->name('crawlers.preview');
Route::post('/crawlers/ai-suggest-extractor', [AdminCrawlerRuleController::class, 'aiSuggestExtractor'])->name('crawlers.ai-suggest-extractor');
Route::get('/crawlers/{crawler}/edit', [AdminCrawlerRuleController::class, 'edit'])->name('crawlers.edit');
Route::put('/crawlers/{crawler}', [AdminCrawlerRuleController::class, 'update'])->name('crawlers.update');
Route::post('/crawlers/{crawler}/run', [AdminCrawlerRuleController::class, 'run'])->name('crawlers.run');
Route::get('/crawl-runs', [AdminCrawlRunController::class, 'index'])->name('crawl-runs.index');
Route::get('/crawl-runs/{run}', [AdminCrawlRunController::class, 'show'])->name('crawl-runs.show');
Route::post('/crawl-runs/{run}/retry', [AdminCrawlRunController::class, 'retry'])->name('crawl-runs.retry');
Route::get('/crawl-alerts', [AdminCrawlAlertController::class, 'index'])->name('crawl-alerts.index');
Route::post('/crawl-alerts/{alert}/resolve', [AdminCrawlAlertController::class, 'resolve'])->name('crawl-alerts.resolve');
});
});