200, 'msg' => 'tp ok', 'data' => [ 'app' => 'tp', 'default_app' => 'smt', 'status' => 'running', ], ]); }); // 兼容原 Go 服务接口前缀:/api/v1/*。 Route::post('api/v1/auth/login', [Auth::class, 'login']); Route::post('api/v1/auth/dev-login', [Auth::class, 'devLogin']); Route::get('api/v1/smoke/share/:token', [Smoke::class, 'shareRead']); Route::group('api/v1', function () { Route::get('auth/me', [Auth::class, 'me']); Route::get('auth/mini-program-test-code', [Auth::class, 'miniProgramTestCode']); Route::put('auth/profile', [Auth::class, 'profile']); Route::post('auth/profile', [Auth::class, 'profile']); Route::get('smoke/home', [Smoke::class, 'home']); Route::get('smoke/profile', [Smoke::class, 'profile']); Route::post('smoke/profile', [Smoke::class, 'saveProfile']); Route::get('smoke/next_smoke_time', [Smoke::class, 'nextSmokeTime']); Route::get('smoke/dashboard', [Smoke::class, 'dashboard']); Route::get('smoke/stats', [Smoke::class, 'stats']); Route::post('smoke/logs', [Smoke::class, 'createLog']); Route::post('smoke/logs/resisted', [Smoke::class, 'createResistedLog']); Route::get('smoke/logs', [Smoke::class, 'logs']); Route::get('smoke/logs/latest', [Smoke::class, 'latestLogs']); Route::get('smoke/logs/:id', [Smoke::class, 'readLog']); Route::post('smoke/logs/:id', [Smoke::class, 'updateLog']); Route::delete('smoke/logs/:id', [Smoke::class, 'deleteLog']); Route::get('smoke/motivation', [Smoke::class, 'motivation']); Route::get('smoke/ai/advice', [Smoke::class, 'aiAdvice']); Route::post('smoke/ai/advice_unlocks', [Smoke::class, 'unlockAiAdvice']); Route::get('smoke/ai/next_smoke_time', [Smoke::class, 'aiNextSmokeTime']); Route::get('smoke/ai/daily_summary', [Smoke::class, 'aiDailySummary']); Route::post('smoke/share', [Smoke::class, 'createShare']); Route::post('smoke/share/:token/revoke', [Smoke::class, 'revokeShare']); Route::post('smoke/quit-plan/generate', [Smoke::class, 'generateQuitPlan']); Route::get('smoke/quit-plan', [Smoke::class, 'quitPlan']); Route::get('smoke/quit-plan/days', [Smoke::class, 'quitPlanDays']); Route::post('smoke/quit-plan/reset', [Smoke::class, 'resetQuitPlan']); Route::get('smoke/achievement/themes', [Smoke::class, 'achievementThemes']); Route::get('smoke/achievement', [Smoke::class, 'achievement']); })->middleware(\app\smt\middleware\Auth::class); // 兼容原 Go 服务 V2:无烟打卡监督人相关接口。 Route::group('api/v2', function () { Route::get('profile', [QuitCheckin::class, 'profile']); Route::post('profile', [QuitCheckin::class, 'saveProfile']); Route::get('checkin/home', [QuitCheckin::class, 'home']); Route::post('checkin/check', [QuitCheckin::class, 'checkin']); Route::get('dream-presets', [QuitCheckin::class, 'dreamPresets']); Route::get('reward-goals', [QuitCheckin::class, 'rewardGoals']); Route::post('reward-goals', [QuitCheckin::class, 'createRewardGoal']); Route::put('reward-goals/:id', [QuitCheckin::class, 'updateRewardGoal']); Route::post('supervisor/invites', [QuitCheckin::class, 'createSupervisorInvite']); Route::post('supervisor/bind', [QuitCheckin::class, 'bindSupervisorInvite']); Route::post('supervisor/revoke', [QuitCheckin::class, 'revokeSupervisorBinding']); Route::get('supervisor/overview', [QuitCheckin::class, 'supervisorOverview']); Route::get('supervisor/status', [QuitCheckin::class, 'supervisorStatus']); Route::get('supervisor/reminders/settings', [QuitCheckin::class, 'reminderSettings']); Route::put('supervisor/reminders/settings', [QuitCheckin::class, 'updateReminderSettings']); Route::post('supervisor/reminders/run', [QuitCheckin::class, 'runReminders']); })->middleware(\app\smt\middleware\Auth::class); // 统一处理未命中路由,避免引用已删除的 api/note 模块。 Route::miss(function () { return json([ 'code' => 404, 'msg' => '请求的接口不存在', 'data' => [ 'path' => request()->pathinfo(), ], ], 404); });