Files
chatroom/routes/web.php

384 lines
29 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
use App\Http\Controllers\AdminCommandController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ChangelogController;
use App\Http\Controllers\ChatBotController;
use App\Http\Controllers\ChatController;
use App\Http\Controllers\FeedbackController;
use App\Http\Controllers\FishingController;
use App\Http\Controllers\RoomController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
// 聊天室首页 (即登录/注册页面)
Route::get('/', function () {
if (Auth::check()) {
return redirect()->route('rooms.index');
}
// 获取可用房间列表供登录页选择(原版风格)
$rooms = \App\Models\Room::orderBy('id')->get();
return view('index', compact('rooms'));
})->name('home');
// 处理登录/自动注册请求
Route::post('/login', [AuthController::class, 'login'])->name('login.post');
// 处理退出登录
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
// 聊天室系统内部路由 (需要鉴权)
Route::middleware(['chat.auth'])->group(function () {
// ---- 第六阶段:大厅与房间管理 ----
Route::get('/guide', fn () => view('rooms.guide'))->name('guide');
Route::get('/rooms', [RoomController::class, 'index'])->name('rooms.index');
Route::post('/rooms', [RoomController::class, 'store'])->name('rooms.store');
Route::put('/rooms/{id}', [RoomController::class, 'update'])->name('rooms.update');
Route::delete('/rooms/{id}', [RoomController::class, 'destroy'])->name('rooms.destroy');
Route::post('/rooms/{id}/transfer', [RoomController::class, 'transfer'])->name('rooms.transfer');
// ---- 第九阶段:外围矩阵 - 风云排行榜 ----
Route::get('/leaderboard', [\App\Http\Controllers\LeaderboardController::class, 'index'])->name('leaderboard.index');
// 今日风云榜(独立页,经验/金币/魅力今日排行)
Route::get('/leaderboard/today', [\App\Http\Controllers\LeaderboardController::class, 'todayIndex'])->name('leaderboard.today');
// 用户个人积分流水日志(查询自己的经验/金币/魅力历史)
Route::get('/my/currency-logs', [\App\Http\Controllers\LeaderboardController::class, 'myLogs'])->name('currency.my-logs');
// ---- 勤务台(展示四榜)----
Route::get('/duty-hall', [\App\Http\Controllers\DutyHallController::class, 'index'])->name('duty-hall.index');
// ---- 第十阶段:站内信与留言板系统 ----
Route::get('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'index'])->name('guestbook.index');
Route::post('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'store'])->middleware('throttle:10,1')->name('guestbook.store');
Route::delete('/guestbook/{id}', [\App\Http\Controllers\GuestbookController::class, 'destroy'])->name('guestbook.destroy');
// ---- 第七阶段:用户资料与特权管理 ----
Route::get('/user/{username}', [UserController::class, 'show'])->name('user.show');
Route::put('/user/profile', [UserController::class, 'updateProfile'])->name('user.update_profile');
Route::post('/user/send-email-code', [\App\Http\Controllers\Api\VerificationController::class, 'sendEmailCode'])->name('user.send_email_code');
Route::put('/user/password', [UserController::class, 'changePassword'])->name('user.update_password');
Route::post('/user/{username}/kick', [UserController::class, 'kick'])->name('user.kick');
Route::post('/user/{username}/mute', [UserController::class, 'mute'])->name('user.mute');
Route::post('/user/{username}/ban', [UserController::class, 'ban'])->name('user.ban');
Route::post('/user/{username}/banip', [UserController::class, 'banIp'])->name('user.banip');
// ---- 好友系统 ----
Route::get('/friends', [\App\Http\Controllers\FriendController::class, 'index'])->name('friend.index');
Route::get('/friend/{username}/status', [\App\Http\Controllers\FriendController::class, 'status'])->name('friend.status');
Route::post('/friend/{username}/add', [\App\Http\Controllers\FriendController::class, 'addFriend'])->name('friend.add');
Route::delete('/friend/{username}/remove', [\App\Http\Controllers\FriendController::class, 'removeFriend'])->name('friend.remove');
// ── 婚姻系统(前台)──────────────────────────────────────────────
Route::prefix('marriage')->name('marriage.')->group(function () {
// 查询当前用户婚姻状态
Route::get('/status', [\App\Http\Controllers\MarriageController::class, 'status'])->name('status');
// 查询目标用户婚姻信息(名片用)
Route::get('/target', [\App\Http\Controllers\MarriageController::class, 'targetStatus'])->name('target-status');
// 当前用户持有的戒指列表
Route::get('/rings', [\App\Http\Controllers\MarriageController::class, 'myRings'])->name('rings');
// 发起求婚
Route::post('/propose', [\App\Http\Controllers\MarriageController::class, 'propose'])->name('propose');
// 接受/拒绝求婚
Route::post('/{marriage}/accept', [\App\Http\Controllers\MarriageController::class, 'accept'])->name('accept');
Route::post('/{marriage}/reject', [\App\Http\Controllers\MarriageController::class, 'reject'])->name('reject');
// 申请离婚type: mutual|forced
Route::post('/{marriage}/divorce', [\App\Http\Controllers\MarriageController::class, 'divorce'])->name('divorce');
// 离婚惩罚配置查询(前端展示风险提示用)
Route::get('/divorce-config', [\App\Http\Controllers\MarriageController::class, 'divorceConfig'])->name('divorce-config');
// 确认协议离婚
Route::post('/{marriage}/confirm-divorce', [\App\Http\Controllers\MarriageController::class, 'confirmDivorce'])->name('confirm-divorce');
// 拒绝离婚申请(被申请方选择不同意→弹强制离婚)
Route::post('/{marriage}/reject-divorce', [\App\Http\Controllers\MarriageController::class, 'rejectDivorce'])->name('reject-divorce');
});
// ── 婚礼系统(前台)──────────────────────────────────────────────
Route::prefix('wedding')->name('wedding.')->group(function () {
// 婚礼档位列表
Route::get('/tiers', [\App\Http\Controllers\WeddingController::class, 'tiers'])->name('tiers');
// 设置并发起婚礼
Route::post('/{marriage}/setup', [\App\Http\Controllers\WeddingController::class, 'setup'])->name('setup');
// 领取婚礼红包
Route::post('/ceremony/{ceremony}/claim', [\App\Http\Controllers\WeddingController::class, 'claim'])->name('claim');
// 查询是否有待领取红包
Route::get('/ceremony/{ceremony}/envelope', [\App\Http\Controllers\WeddingController::class, 'envelopeStatus'])->name('envelope-status');
});
// ── 节日福利(前台)──────────────────────────────────────────────
Route::prefix('holiday')->name('holiday.')->group(function () {
// 领取节日福利红包
Route::post('/{event}/claim', [\App\Http\Controllers\HolidayController::class, 'claim'])->name('claim');
// 查询当前用户在活动中的领取状态
Route::get('/{event}/status', [\App\Http\Controllers\HolidayController::class, 'status'])->name('status');
});
// ── 百家乐(前台)────────────────────────────────────────────────
Route::prefix('baccarat')->name('baccarat.')->group(function () {
Route::get('/current', [\App\Http\Controllers\BaccaratController::class, 'currentRound'])->name('current');
Route::post('/bet', [\App\Http\Controllers\BaccaratController::class, 'bet'])->name('bet');
Route::get('/history', [\App\Http\Controllers\BaccaratController::class, 'history'])->name('history');
});
// ── 老虎机(前台)────────────────────────────────────────────────
Route::prefix('slot')->name('slot.')->group(function () {
// 获取配置及今日剩余次数
Route::get('/info', [\App\Http\Controllers\SlotMachineController::class, 'info'])->name('info');
// 执行一次转动
Route::post('/spin', [\App\Http\Controllers\SlotMachineController::class, 'spin'])->name('spin');
// 个人历史记录
Route::get('/history', [\App\Http\Controllers\SlotMachineController::class, 'history'])->name('history');
});
// ---- 第五阶段:具体房间内部聊天核心 ----
// 进入具体房间界面的初始化
Route::get('/room/{id}', [ChatController::class, 'init'])->name('chat.room');
// 发送消息
Route::post('/room/{id}/send', [ChatController::class, 'send'])->name('chat.send');
// 挂机心跳存点 (限制每分钟最多调用 6 次防止挂机脚本滥用)
Route::post('/room/{id}/heartbeat', [ChatController::class, 'heartbeat'])
->middleware('throttle:6,1')
->name('chat.heartbeat');
// 退出房间
Route::post('/room/{id}/leave', [ChatController::class, 'leave'])->name('chat.leave');
// 头像列表(供选择)
Route::get('/headface/list', [ChatController::class, 'headfaceList'])->name('headface.list');
// 修改头像
Route::post('/headface/change', [ChatController::class, 'changeAvatar'])->name('headface.change');
// 设置房间公告/祝福语
Route::post('/room/{id}/announcement', [ChatController::class, 'setAnnouncement'])->name('chat.announcement');
// ---- 钓鱼小游戏(复刻原版 diaoyu/ 功能)----
Route::post('/room/{id}/fish/cast', [FishingController::class, 'cast'])->name('fishing.cast');
Route::post('/room/{id}/fish/reel', [FishingController::class, 'reel'])->name('fishing.reel');
// ---- AI 聊天机器人 ----
Route::post('/chatbot/chat', [ChatBotController::class, 'chat'])->name('chatbot.chat');
Route::post('/chatbot/clear', [ChatBotController::class, 'clearContext'])->name('chatbot.clear');
// ---- 送花/礼物互动 ----
Route::post('/gift/flower', [ChatController::class, 'sendFlower'])->name('gift.flower');
// ---- 管理员命令(聊天室内实时操作)----
Route::post('/command/warn', [AdminCommandController::class, 'warn'])->name('command.warn');
Route::post('/command/kick', [AdminCommandController::class, 'kick'])->name('command.kick');
Route::post('/command/mute', [AdminCommandController::class, 'mute'])->name('command.mute');
Route::post('/command/freeze', [AdminCommandController::class, 'freeze'])->name('command.freeze');
Route::post('/command/reward', [AdminCommandController::class, 'reward'])->name('command.reward');
Route::get('/command/reward-quota', [AdminCommandController::class, 'rewardQuota'])->name('command.reward_quota');
Route::get('/command/whispers/{username}', [AdminCommandController::class, 'viewWhispers'])->name('command.whispers');
Route::post('/command/announce', [AdminCommandController::class, 'announce'])->name('command.announce');
Route::post('/command/clear-screen', [AdminCommandController::class, 'clearScreen'])->name('command.clear_screen');
Route::post('/command/effect', [AdminCommandController::class, 'effect'])->name('command.effect');
// ---- 商店(购买特效卡/改名卡)----
Route::get('/shop/items', [\App\Http\Controllers\ShopController::class, 'items'])->name('shop.items');
Route::post('/shop/buy', [\App\Http\Controllers\ShopController::class, 'buy'])->name('shop.buy');
Route::post('/shop/rename', [\App\Http\Controllers\ShopController::class, 'rename'])->name('shop.rename');
// ---- 开发日志(独立前台页面 /changelog----
Route::get('/changelog', [ChangelogController::class, 'index'])->name('changelog.index');
// 懒加载接口scroll 到底追加更多日志
Route::get('/changelog/more', [ChangelogController::class, 'loadMoreChangelogs'])->name('changelog.more');
// ---- 用户反馈(独立前台页面 /feedback----
// 反馈列表页
Route::get('/feedback', [FeedbackController::class, 'index'])->name('feedback.index');
// 懒加载接口scroll 到底追加更多反馈
Route::get('/feedback/more', [FeedbackController::class, 'loadMore'])->name('feedback.more');
// 提交新反馈
Route::post('/feedback', [FeedbackController::class, 'store'])->middleware('throttle:5,1')->name('feedback.store');
// 赞同/取消赞同Toggle
Route::post('/feedback/{id}/vote', [FeedbackController::class, 'vote'])->name('feedback.vote');
// 提交补充评论
Route::post('/feedback/{id}/reply', [FeedbackController::class, 'reply'])->middleware('throttle:10,1')->name('feedback.reply');
// 删除反馈本人24小时内或管理员
Route::delete('/feedback/{id}', [FeedbackController::class, 'destroy'])->name('feedback.destroy');
});
// ═══════════════════════════════════════════════════════════════════
// 后台管理路由(三层权限)
// 层级 1chat.has_position ── 有在职职务即可id=1 始终通过)
// 层级 2chat.site_owner ── 仅站长id=1
// 聊天室内快速任命/撤销(需登录 + 有在职职务)
Route::middleware(['chat.auth', 'chat.has_position'])->prefix('chat-appoint')->name('chat.appoint.')->group(function () {
Route::get('/positions', [\App\Http\Controllers\ChatAppointmentController::class, 'positions'])->name('positions');
Route::post('/appoint', [\App\Http\Controllers\ChatAppointmentController::class, 'appoint'])->name('appoint');
Route::post('/revoke', [\App\Http\Controllers\ChatAppointmentController::class, 'revoke'])->name('revoke');
});
// ═══════════════════════════════════════════════════════════════════
Route::middleware(['chat.auth', 'chat.has_position'])->prefix('admin')->name('admin.')->group(function () {
// ──────────────────────────────────────────────────────────────
// 层级 1有在职职务即可访问
// ──────────────────────────────────────────────────────────────
// 后台首页概览
Route::get('/', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
// 积分流水统计
Route::get('/currency-stats', [\App\Http\Controllers\Admin\CurrencyStatsController::class, 'index'])->name('currency-stats.index');
// 用户管理有职务的人只能查看indexupdate/destroy 仅站长
Route::get('/users', [\App\Http\Controllers\Admin\UserManagerController::class, 'index'])->name('users.index');
// 秘语查看(耳语记录)
Route::get('/whispers', function () {
return view('admin.whispers');
})->name('whispers.index');
// 我的履职记录(当前登录者自己的权限操作记录)
Route::get('/my-duty-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'myDutyLogs'])->name('appointments.my-duty-logs');
// 任命管理(任命权限由 AppointmentService 内部校验)
Route::get('/appointments', [\App\Http\Controllers\Admin\AppointmentController::class, 'index'])->name('appointments.index');
Route::post('/appointments', [\App\Http\Controllers\Admin\AppointmentController::class, 'store'])->name('appointments.store');
Route::delete('/appointments/{userPosition}/revoke', [\App\Http\Controllers\Admin\AppointmentController::class, 'revoke'])->name('appointments.revoke');
Route::get('/appointments/{userPosition}/duty-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'dutyLogs'])->name('appointments.duty-logs');
Route::get('/appointments/{userPosition}/authority-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'authorityLogs'])->name('appointments.authority-logs');
Route::get('/appointments/history', [\App\Http\Controllers\Admin\AppointmentController::class, 'history'])->name('appointments.history');
Route::get('/appointments/search-users', [\App\Http\Controllers\Admin\AppointmentController::class, 'searchUsers'])->name('appointments.search-users');
// ── 层级 1.5superlevel 及以上可完整操作以下模块 ──
Route::middleware(['chat.level:super'])->group(function () {
// 部门 / 职务列表 + 编辑(删除仍限 id=1
Route::get('/departments', [\App\Http\Controllers\Admin\DepartmentController::class, 'index'])->name('departments.index');
Route::get('/positions', [\App\Http\Controllers\Admin\PositionController::class, 'index'])->name('positions.index');
Route::put('/departments/{department}', [\App\Http\Controllers\Admin\DepartmentController::class, 'update'])->name('departments.update');
Route::put('/positions/{position}', [\App\Http\Controllers\Admin\PositionController::class, 'update'])->name('positions.update');
Route::patch('/positions/{position}/patch', [\App\Http\Controllers\Admin\PositionController::class, 'quickPatch'])->name('positions.quick_patch');
Route::post('/positions/reward-config', [\App\Http\Controllers\Admin\PositionController::class, 'saveRewardConfig'])->name('positions.reward_config');
// 大卡片通知广播(仅超级管理员,安全隔离:普通用户无此接口)
Route::post('/banner/broadcast', [\App\Http\Controllers\Admin\BannerBroadcastController::class, 'send'])->name('admin.banner.broadcast');
// 聊天室参数(含保存)
Route::get('/system', [\App\Http\Controllers\Admin\SystemController::class, 'edit'])->name('system.edit');
Route::put('/system', [\App\Http\Controllers\Admin\SystemController::class, 'update'])->name('system.update');
// 房间管理(含编辑/删除)
Route::get('/rooms', [\App\Http\Controllers\Admin\RoomManagerController::class, 'index'])->name('rooms.index');
Route::put('/rooms/{room}', [\App\Http\Controllers\Admin\RoomManagerController::class, 'update'])->name('rooms.update');
Route::delete('/rooms/{room}', [\App\Http\Controllers\Admin\RoomManagerController::class, 'destroy'])->name('rooms.destroy');
// 随机事件(含新增/编辑/删除/切换)
Route::get('/autoact', [\App\Http\Controllers\Admin\AutoactController::class, 'index'])->name('autoact.index');
Route::post('/autoact', [\App\Http\Controllers\Admin\AutoactController::class, 'store'])->name('autoact.store');
Route::put('/autoact/{autoact}', [\App\Http\Controllers\Admin\AutoactController::class, 'update'])->name('autoact.update');
Route::delete('/autoact/{autoact}', [\App\Http\Controllers\Admin\AutoactController::class, 'destroy'])->name('autoact.destroy');
Route::post('/autoact/{autoact}/toggle', [\App\Http\Controllers\Admin\AutoactController::class, 'toggle'])->name('autoact.toggle');
// VIP 会员等级(含新增/编辑/删除)
Route::get('/vip', [\App\Http\Controllers\Admin\VipController::class, 'index'])->name('vip.index');
Route::post('/vip', [\App\Http\Controllers\Admin\VipController::class, 'store'])->name('vip.store');
Route::put('/vip/{vip}', [\App\Http\Controllers\Admin\VipController::class, 'update'])->name('vip.update');
Route::delete('/vip/{vip}', [\App\Http\Controllers\Admin\VipController::class, 'destroy'])->name('vip.destroy');
// 🛒 商店商品管理(查看/编辑所有 superlevel 可用,新增/删除仅 id=1
Route::get('/shop', [\App\Http\Controllers\Admin\ShopItemController::class, 'index'])->name('shop.index');
Route::post('/shop', [\App\Http\Controllers\Admin\ShopItemController::class, 'store'])->name('shop.store');
Route::put('/shop/{shopItem}', [\App\Http\Controllers\Admin\ShopItemController::class, 'update'])->name('shop.update');
Route::patch('/shop/{shopItem}/toggle', [\App\Http\Controllers\Admin\ShopItemController::class, 'toggle'])->name('shop.toggle');
Route::delete('/shop/{shopItem}', [\App\Http\Controllers\Admin\ShopItemController::class, 'destroy'])->name('shop.destroy');
// 💒 婚姻管理superlevel 及以上)
Route::prefix('marriages')->name('marriages.')->group(function () {
// 总览统计
Route::get('/', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'index'])->name('index');
// 婚姻列表(支持筛选)
Route::get('/list', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'list'])->name('list');
// 求婚记录
Route::get('/proposals', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'proposals'])->name('proposals');
// 婚礼红包记录
Route::get('/ceremonies', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'ceremonies'])->name('ceremonies');
// 红包领取明细
Route::get('/ceremonies/{ceremony}/claims', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'claimDetail'])->name('claim-detail');
// 亲密度日志
Route::get('/intimacy-logs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'intimacyLogs'])->name('intimacy-logs');
// 参数配置GET=页面POST=保存)
Route::get('/configs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'configs'])->name('configs');
Route::post('/configs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'updateConfigs'])->name('configs.update');
// 婚礼档位GET=页面PUT=保存)
Route::get('/tiers', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'tiers'])->name('tiers');
Route::put('/tiers/{tier}', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'updateTier'])->name('tiers.update');
// 强制离婚
Route::post('/{marriage}/force-dissolve', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'forceDissolve'])->name('force-dissolve');
Route::post('/{marriage}/cancel-proposal', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'cancelProposal'])->name('cancel-proposal');
});
// 📅 节日福利活动管理
Route::prefix('holiday-events')->name('holiday-events.')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\HolidayEventController::class, 'index'])->name('index');
Route::get('/create', [\App\Http\Controllers\Admin\HolidayEventController::class, 'create'])->name('create');
Route::post('/', [\App\Http\Controllers\Admin\HolidayEventController::class, 'store'])->name('store');
Route::get('/{holidayEvent}/edit', [\App\Http\Controllers\Admin\HolidayEventController::class, 'edit'])->name('edit');
Route::put('/{holidayEvent}', [\App\Http\Controllers\Admin\HolidayEventController::class, 'update'])->name('update');
Route::post('/{holidayEvent}/toggle', [\App\Http\Controllers\Admin\HolidayEventController::class, 'toggle'])->name('toggle');
Route::post('/{holidayEvent}/trigger-now', [\App\Http\Controllers\Admin\HolidayEventController::class, 'triggerNow'])->name('trigger-now');
Route::delete('/{holidayEvent}', [\App\Http\Controllers\Admin\HolidayEventController::class, 'destroy'])->name('destroy');
});
// 🎮 游戏管理(开关 + 核心参数配置)
Route::prefix('game-configs')->name('game-configs.')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\GameConfigController::class, 'index'])->name('index');
Route::post('/{gameConfig}/toggle', [\App\Http\Controllers\Admin\GameConfigController::class, 'toggle'])->name('toggle');
Route::post('/{gameConfig}/params', [\App\Http\Controllers\Admin\GameConfigController::class, 'updateParams'])->name('params');
});
});
// ──────────────────────────────────────────────────────────────
// 层级 2仅站长id=1可进行以下操作
// ──────────────────────────────────────────────────────────────
Route::middleware(['chat.site_owner'])->group(function () {
// 用户编辑 & 删除
Route::put('/users/{user}', [\App\Http\Controllers\Admin\UserManagerController::class, 'update'])->name('users.update');
Route::delete('/users/{user}', [\App\Http\Controllers\Admin\UserManagerController::class, 'destroy'])->name('users.destroy');
// 发信配置管理
Route::get('/smtp', [\App\Http\Controllers\Admin\SmtpController::class, 'edit'])->name('smtp.edit');
Route::put('/smtp', [\App\Http\Controllers\Admin\SmtpController::class, 'update'])->name('smtp.update');
Route::post('/smtp/test', [\App\Http\Controllers\Admin\SmtpController::class, 'test'])->name('smtp.test');
// 部门新增/删除(编辑已在 superlevel 层)
Route::post('/departments', [\App\Http\Controllers\Admin\DepartmentController::class, 'store'])->name('departments.store');
Route::delete('/departments/{department}', [\App\Http\Controllers\Admin\DepartmentController::class, 'destroy'])->name('departments.destroy');
// 职务新增/删除(编辑已在 superlevel 层)
Route::post('/positions', [\App\Http\Controllers\Admin\PositionController::class, 'store'])->name('positions.store');
Route::delete('/positions/{position}', [\App\Http\Controllers\Admin\PositionController::class, 'destroy'])->name('positions.destroy');
// AI 厂商配置管理
Route::get('/ai-providers', [\App\Http\Controllers\Admin\AiProviderController::class, 'index'])->name('ai-providers.index');
Route::post('/ai-providers', [\App\Http\Controllers\Admin\AiProviderController::class, 'store'])->name('ai-providers.store');
Route::put('/ai-providers/{id}', [\App\Http\Controllers\Admin\AiProviderController::class, 'update'])->name('ai-providers.update');
Route::post('/ai-providers/{id}/toggle', [\App\Http\Controllers\Admin\AiProviderController::class, 'toggleEnabled'])->name('ai-providers.toggle');
Route::post('/ai-providers/{id}/default', [\App\Http\Controllers\Admin\AiProviderController::class, 'setDefault'])->name('ai-providers.default');
Route::post('/ai-providers/toggle-chatbot', [\App\Http\Controllers\Admin\AiProviderController::class, 'toggleChatBot'])->name('ai-providers.toggle-chatbot');
Route::delete('/ai-providers/{id}', [\App\Http\Controllers\Admin\AiProviderController::class, 'destroy'])->name('ai-providers.destroy');
// 开发日志管理
Route::resource('changelogs', \App\Http\Controllers\Admin\ChangelogController::class)->except(['show']);
// 用户反馈管理
Route::get('/feedback', [\App\Http\Controllers\Admin\FeedbackManagerController::class, 'index'])->name('feedback.index');
Route::put('/feedback/{id}', [\App\Http\Controllers\Admin\FeedbackManagerController::class, 'update'])->name('feedback.update');
// 禁用用户名管理(永久禁止注册/改名的词语:领导人名称、攻击性词汇等)
Route::get('/forbidden-usernames', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'index'])->name('forbidden-usernames.index');
Route::post('/forbidden-usernames', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'store'])->name('forbidden-usernames.store');
Route::post('/forbidden-usernames/batch', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'batchStore'])->name('forbidden-usernames.batch');
Route::put('/forbidden-usernames/{id}', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'update'])->name('forbidden-usernames.update');
Route::delete('/forbidden-usernames/{id}', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'destroy'])->name('forbidden-usernames.destroy');
});
});