InviteController.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Controllers\User;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Invite;
  5. use App\Models\Order;
  6. use Exception;
  7. use Illuminate\Contracts\View\View;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Response;
  10. use Log;
  11. use Str;
  12. class InviteController extends Controller
  13. {
  14. public function index(): Response|View
  15. { // 邀请页面
  16. if (Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist()) {
  17. return response()->view('auth.error', ['message' => trans('user.purchase.required').' <a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
  18. }
  19. return view('user.invite', [
  20. 'num' => auth()->user()->invite_num, // 还可以生成的邀请码数量
  21. 'inviteList' => Invite::uid()->with('invitee')->paginate(10), // 邀请码列表
  22. 'referral_reward_mode' => sysConfig('referral_reward_type', 0),
  23. 'referral_traffic' => formatBytes(sysConfig('referral_traffic'), 'MiB'),
  24. 'referral_percent' => sysConfig('referral_percent') * 100,
  25. ]);
  26. }
  27. public function store(): JsonResponse
  28. { // 生成邀请码
  29. $user = auth()->user();
  30. // 检查用户是否还有邀请码配额
  31. if ($user->invite_num <= 0) {
  32. return response()->json(['status' => 'fail', 'message' => trans('user.invite.generate_failed')]);
  33. }
  34. try {
  35. $invite = $user->invites()->create([
  36. 'code' => strtoupper(Str::random(12)), // 简化邀请码生成逻辑
  37. 'dateline' => now()->addDays((int) sysConfig('user_invite_days')),
  38. ]);
  39. if ($invite) {
  40. $user->decrement('invite_num');
  41. return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
  42. }
  43. } catch (Exception $e) {
  44. // 记录异常但不暴露给用户
  45. Log::error('Failed to generate invite code: '.$e->getMessage());
  46. }
  47. return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.generate')])]);
  48. }
  49. }