api.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. use App\Http\Controllers\Client\AccountController;
  3. use App\Http\Controllers\Client\CoachController;
  4. use App\Http\Controllers\Client\CoachLocationController;
  5. use App\Http\Controllers\Client\MarketDistTeamController;
  6. use App\Http\Controllers\Client\OrderController;
  7. use App\Http\Controllers\Client\ProjectController;
  8. use App\Http\Controllers\Client\UserAddressController;
  9. use App\Http\Controllers\Client\UserController;
  10. use App\Http\Controllers\Client\WalletController;
  11. use App\Http\Controllers\Client\WechatController;
  12. use App\Http\Controllers\Coach\OrderController as CoachOrderController;
  13. use App\Http\Controllers\Coach\ProjectController as CoachProjectController;
  14. use App\Http\Controllers\Coach\WalletController as CoachWalletController;
  15. use App\Http\Controllers\EnumController;
  16. use App\Http\Controllers\ScribeController;
  17. use App\Http\Controllers\UploadController;
  18. use Illuminate\Support\Facades\Route;
  19. // API文档相关
  20. Route::get('scribe/update-token/{mobile}', [ScribeController::class, 'updateAuthToken']);
  21. Route::get('/enums', [EnumController::class, 'getEnumData']);
  22. // 客户端路由组
  23. Route::prefix('client')->group(function () {
  24. // 无需认证的路由
  25. Route::prefix('account')->group(function () {
  26. // 发验证码
  27. Route::post('send-code', [AccountController::class, 'sendVerifyCode']);
  28. // 手机号登录
  29. Route::post('login', [AccountController::class, 'login']);
  30. // 微信登录
  31. Route::post('wx-login', [AccountController::class, 'wxLogin']);
  32. });
  33. // 需要认证的路由组
  34. Route::middleware('auth:sanctum')->group(function () {
  35. // 账号相关
  36. Route::prefix('account')->group(function () {
  37. // 退出登录
  38. Route::post('logout', [AccountController::class, 'logout']);
  39. // 注销账号
  40. Route::delete('/', [AccountController::class, 'destroy']);
  41. // 绑定手机号
  42. Route::post('bind-mobile', [AccountController::class, 'bindMobile'])
  43. ->middleware(['throttle:6,1']); // 添加频率限制;
  44. });
  45. // 用户相关
  46. Route::prefix('user')->group(function () {
  47. // 获取用户信息
  48. Route::get('/', [UserController::class, 'show']);
  49. // 用户注册
  50. Route::post('/', [UserController::class, 'register']);
  51. // 更新用户信息
  52. Route::put('/', [UserController::class, 'update']);
  53. // 提现
  54. Route::post('withdraw', [UserController::class, 'withdraw']);
  55. // 户反馈
  56. // Route::post('/feedback', [UserController::class, 'feedback']);
  57. // 申请成为技师
  58. Route::post('/apply-coach', [UserController::class, 'applyCoach']);
  59. // 生成邀请码
  60. Route::get('/invite-code', [UserController::class, 'generateInviteCode']);
  61. // 获取技师申请记录
  62. Route::get('coach/application', [UserController::class, 'getCoachApplication']);
  63. });
  64. // 项目相关
  65. Route::prefix('project')->group(function () {
  66. Route::get('/', [ProjectController::class, 'index']); // 获取项目列表
  67. Route::get('/detail', [ProjectController::class, 'detail']); // 获取项目详情
  68. Route::get('/coach-list', [ProjectController::class, 'coachProjectList']); // 获取技师开通的项目列表
  69. });
  70. // 技师相关
  71. Route::prefix('coach')->group(function () {
  72. Route::prefix('location')->group(function () {
  73. Route::get('/', [CoachLocationController::class, 'index']); // 获取所有技师定位
  74. Route::post('/', [CoachLocationController::class, 'store']); // 创建新的技师定位
  75. Route::delete('/{id}', [CoachLocationController::class, 'destroy']); // 删除技师定位
  76. });
  77. // 获取可预约时间段
  78. Route::get('schedule', [CoachController::class, 'getSchedule']);
  79. Route::get('/', [CoachController::class, 'list']); // 获取技师列表
  80. Route::get('/{id}', [CoachController::class, 'detail']); // 获取技师详情
  81. });
  82. // 用户地址相关
  83. Route::prefix('address')->group(function () {
  84. Route::get('default', [UserAddressController::class, 'getDefault']);
  85. Route::get('/', [UserAddressController::class, 'list']);
  86. Route::post('/', [UserAddressController::class, 'store']);
  87. Route::put('/{id}', [UserAddressController::class, 'update']);
  88. Route::delete('/{id}', [UserAddressController::class, 'destroy']);
  89. Route::put('/{id}/default', [UserAddressController::class, 'setDefault']);
  90. });
  91. // 订单相关
  92. Route::prefix('orders')->group(function () {
  93. Route::post('initialize', [OrderController::class, 'initialize']);
  94. Route::post('create', [OrderController::class, 'create']);
  95. Route::post('cancel', [OrderController::class, 'cancel']);
  96. Route::post('finish', [OrderController::class, 'finish']);
  97. Route::post('confirm-leave', [OrderController::class, 'confirmLeave']);
  98. Route::get('list', [OrderController::class, 'list']);
  99. Route::get('detail/{id}', [OrderController::class, 'detail']);
  100. Route::post('add-time', [OrderController::class, 'addTime']);
  101. Route::post('calculate-order-amount', [OrderController::class, 'calculateOrderAmount']);
  102. // Route::post('refund/{id}', [OrderController::class, 'refund']);
  103. // Route::post('get-agent-config', [OrderController::class, 'getAgentConfig']);
  104. // Route::post('get-coach-config', [OrderController::class, 'getCoachConfig']);
  105. // Route::post('calculate-delivery-fee', [OrderController::class, 'calculateDeliveryFee']);
  106. Route::get('grab-list', [OrderController::class, 'getOrderGrabList']);
  107. // 指派技师
  108. Route::post('assign-coach', [App\Http\Controllers\Client\OrderController::class, 'assignCoach'])
  109. ->name('assign-coach');
  110. // 生成订单核销码
  111. Route::get('{id}/code', [OrderController::class, 'generateCode']);
  112. });
  113. // 钱包相关
  114. Route::prefix('wallet')->group(function () {
  115. Route::get('records', [WalletController::class, 'records']);
  116. // 获取钱包信息
  117. Route::get('wallet', [WalletController::class, 'wallet']);
  118. // 提现
  119. Route::post('withdraw', [WalletController::class, 'withdraw']);
  120. });
  121. // 团队管理路由
  122. Route::prefix('team')->group(function () {
  123. Route::get('list', [MarketDistTeamController::class, 'index'])->name('team.list');
  124. });
  125. // 微信相关路由
  126. Route::prefix('wechat')->group(function () {
  127. Route::get('auth-url', [WechatController::class, 'getAuthUrl']);
  128. Route::post('callback', [WechatController::class, 'handleCallback']);
  129. });
  130. });
  131. });
  132. // 技师端路由组
  133. Route::middleware(['auth:sanctum', 'coach'])->prefix('coach')->group(function () {
  134. // 账户相关路由组
  135. Route::prefix('account')->group(function () {
  136. Route::post('base-info', [App\Http\Controllers\Coach\AccountController::class, 'submitBaseInfo'])
  137. ->middleware(['throttle:6,1'])
  138. ->name('coach.account.base-info');
  139. Route::post('qualification', [App\Http\Controllers\Coach\AccountController::class, 'submitQualification']);
  140. Route::post('real-name', [App\Http\Controllers\Coach\AccountController::class, 'submitRealName'])
  141. ->middleware('throttle:3,1'); // 实名认证限制更严格
  142. Route::get('info', [App\Http\Controllers\Coach\AccountController::class, 'info']);
  143. // 设置位置信息
  144. Route::post('location', [App\Http\Controllers\Coach\AccountController::class, 'setLocation'])
  145. ->name('coach.account.location');
  146. // 获取技师位置信息
  147. Route::get('location', [\App\Http\Controllers\Coach\AccountController::class, 'getLocation']);
  148. // 排班管理
  149. Route::post('schedule', [\App\Http\Controllers\Coach\AccountController::class, 'setSchedule']);
  150. // 更新技师工作状态
  151. Route::post('work-status', [App\Http\Controllers\Coach\AccountController::class, 'updateWorkStatus']);
  152. // 获取技师工作状态
  153. Route::get('work-status', [App\Http\Controllers\Coach\AccountController::class, 'getWorkStatus']);
  154. // 获取技师排班信息
  155. Route::get('schedule', [App\Http\Controllers\Coach\AccountController::class, 'getSchedule']);
  156. });
  157. // 订单相关路由
  158. Route::prefix('orders')->group(function () {
  159. // 获取技师订单列表
  160. Route::get('/', [CoachOrderController::class, 'getOrderList']);
  161. // 获取可抢单列表
  162. Route::get('/grab', [CoachOrderController::class, 'getGrabList']);
  163. // 抢单
  164. Route::post('/grab/{order_id}', [CoachOrderController::class, 'grabOrder']);
  165. // 接受订单
  166. Route::post('/accept/{order_id}', [CoachOrderController::class, 'acceptOrder']);
  167. // 拒绝订单
  168. Route::post('/reject/{order_id}', [CoachOrderController::class, 'rejectOrder'])
  169. ->middleware(['throttle:6,1']); // 限制拒单频率
  170. // 技师出发
  171. Route::post('/depart/{order_id}', [CoachOrderController::class, 'depart']);
  172. // 技师到达
  173. Route::post('/arrive/{order_id}', [CoachOrderController::class, 'arrive']);
  174. // 技师开始服务
  175. Route::post('/start-service', [CoachOrderController::class, 'startService']);
  176. // 技师撤离
  177. Route::post('coach/orders/{order_id}/leave', [CoachOrderController::class, 'leave'])
  178. ->name('coach.orders.leave')
  179. ->where('order_id', '[0-9]+');
  180. Route::post('settings', [CoachOrderController::class, 'setOrder'])->name('coach.orders.settings'); // 订单设置
  181. });
  182. // 项目相关路由
  183. Route::prefix('projects')->group(function () {
  184. Route::get('/available', [CoachProjectController::class, 'getAvailableProjects']);
  185. Route::post('/open', [CoachProjectController::class, 'openProject']);
  186. Route::post('/set', [CoachProjectController::class, 'setProject']);
  187. });
  188. // 钱包相关路由
  189. Route::prefix('wallet')->group(function () {
  190. Route::get('/', [CoachWalletController::class, 'getWallet']);
  191. Route::get('/records', [CoachWalletController::class, 'getWalletRecords']);
  192. Route::post('/withdraw', [CoachWalletController::class, 'withdraw'])
  193. ->middleware(['throttle:10,1']); // 限制提现频率
  194. });
  195. // 获取技师工作状态
  196. Route::get('/work-status', [CoachController::class, 'getWorkStatus']);
  197. // 投流订单
  198. Route::post('flow/create-order', [\App\Http\Controllers\Coach\CoachFlowController::class, 'createOrder']);
  199. });
  200. // 大观支付回调
  201. Route::post('dgpay/notify', [App\Http\Controllers\Api\DgPayController::class, 'notify'])->name('dgpay.notify');
  202. Route::get('dgpay/return', [App\Http\Controllers\Api\DgPayController::class, 'return'])->name('dgpay.return');
  203. Route::post('/upload', [UploadController::class, 'upload']);
  204. Route::get('/download', [UploadController::class, 'download']);
  205. Route::get('/view', [UploadController::class, 'view']);