feat: add smt module
This commit is contained in:
+87
-68
@@ -2,76 +2,95 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
use think\facade\Route;
|
||||
use app\api\controller\v1\Auth;
|
||||
use app\api\controller\v1\Platform;
|
||||
use app\api\controller\v1\PublishPlan;
|
||||
use app\api\controller\v1\VideoWork;
|
||||
use app\note\controller\v1\Ai as NoteAi;
|
||||
use app\note\controller\v1\Auth as NoteAuth;
|
||||
use app\note\controller\v1\Meta as NoteMeta;
|
||||
use app\note\controller\v1\Note as NoteItem;
|
||||
use app\note\controller\v1\Share as NoteShare;
|
||||
use app\smt\controller\v1\Auth;
|
||||
use app\smt\controller\v1\QuitCheckin;
|
||||
use app\smt\controller\v1\Smoke;
|
||||
|
||||
/**
|
||||
* 全局路由入口。
|
||||
*
|
||||
* 当前项目使用 ThinkPHP 8 的根级 `route/app.php` 自动加载机制。
|
||||
* 之前把 API 路由写在 `app/api/route/app.php`,框架不会自动扫描该位置,
|
||||
* 因此会导致 `api/v1/platform/accounts` 等接口返回 404。
|
||||
*
|
||||
* 这里统一把 API 路由注册到真正生效的位置。
|
||||
*/
|
||||
|
||||
// v1 认证接口(公开)
|
||||
Route::post('api/v1/auth/login', [Auth::class, 'login']);
|
||||
Route::post('api/v1/auth/register', [Auth::class, 'register']);
|
||||
Route::post('api/v1/auth/refresh', [Auth::class, 'refresh']);
|
||||
|
||||
// v1 认证接口(需登录)
|
||||
Route::group('api/v1/auth', function () {
|
||||
Route::get('me', [Auth::class, 'me']);
|
||||
Route::post('logout', [Auth::class, 'logout']);
|
||||
Route::post('password', [Auth::class, 'password']);
|
||||
})->middleware(\app\api\middleware\Auth::class);
|
||||
|
||||
// v1 平台账号管理接口(需登录)
|
||||
Route::group('api/v1/platform', function () {
|
||||
Route::get('accounts', [Platform::class, 'accounts']);
|
||||
})->middleware(\app\api\middleware\Auth::class);
|
||||
|
||||
// v1 发布计划接口(需登录)
|
||||
Route::group('api/v1/publish-plan', function () {
|
||||
Route::get('list', [PublishPlan::class, 'index']);
|
||||
Route::post('start/:id', [PublishPlan::class, 'start']);
|
||||
Route::post('stop/:id', [PublishPlan::class, 'stop']);
|
||||
})->middleware(\app\api\middleware\Auth::class);
|
||||
|
||||
// v1 视频作品接口(需登录)
|
||||
Route::group('api/v1/video-work', function () {
|
||||
Route::get('list', [VideoWork::class, 'index']);
|
||||
})->middleware(\app\api\middleware\Auth::class);
|
||||
|
||||
// note v1 笔记小程序模块接口规划(公开)
|
||||
Route::group('note/v1', function () {
|
||||
Route::get('meta/interfaces', [NoteMeta::class, 'interfaces']);
|
||||
Route::post('auth/wechat-login', [NoteAuth::class, 'wechatLogin']);
|
||||
Route::get('share/read/:token', [NoteShare::class, 'read']);
|
||||
// 首页健康检查,方便验证 TP 站点是否已正确接入。
|
||||
Route::get('/', function () {
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => 'tp ok',
|
||||
'data' => [
|
||||
'app' => 'tp',
|
||||
'default_app' => 'smt',
|
||||
'status' => 'running',
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
// note v1 笔记小程序模块接口(需登录)
|
||||
Route::group('note/v1', function () {
|
||||
Route::get('auth/me', [NoteAuth::class, 'me']);
|
||||
// 兼容原 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::post('item/create', [NoteItem::class, 'create']);
|
||||
Route::get('item/list', [NoteItem::class, 'index']);
|
||||
Route::get('item/:id', [NoteItem::class, 'read']);
|
||||
Route::post('item/update/:id', [NoteItem::class, 'update']);
|
||||
Route::post('item/delete/:id', [NoteItem::class, 'delete']);
|
||||
Route::post('item/transcript/:id', [NoteItem::class, 'transcript']);
|
||||
Route::post('item/audio/:id', [NoteItem::class, 'audio']);
|
||||
Route::post('item/image/:id', [NoteItem::class, 'image']);
|
||||
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::post('ai/summary/:id', [NoteAi::class, 'summary']);
|
||||
Route::get('ai/summary/:id', [NoteAi::class, 'readSummary']);
|
||||
Route::post('share/create/:id', [NoteShare::class, 'create']);
|
||||
})->middleware(\app\api\middleware\Auth::class);
|
||||
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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user