Browse Source

feat:添加用户、账户API路由,及其账户发送短信、登录、退出、注销

醉梦人间三千年 5 months ago
parent
commit
dfdcb0b3e8

+ 62 - 0
app/Http/Controllers/Client/AccountController.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Http\Controllers\Client;
+
+use App\Http\Controllers\Controller;
+use App\Services\Client\AccountService;
+use Illuminate\Http\Request;
+
+class AccountController extends Controller
+{
+    protected AccountService $service;
+
+    public function __construct(AccountService $service)
+    {
+        $this->service = $service;
+    }
+
+    /**
+     * 发送验证码
+     */
+    public function sendVerifyCode(Request $request)
+    {
+        $mobile = $request->input('mobile');
+        return $this->service->sendVerifyCode($mobile);
+    }
+
+    /**
+     * 用户登录
+     */
+    public function login(Request $request)
+    {
+        $mobile = $request->input('mobile');
+        $code = $request->input('code');
+        return $this->service->login($mobile, $code);
+    }
+
+    /**
+     * 微信登录
+     */
+    public function wxLogin(Request $request)
+    {
+        $openid = $request->input('openid');
+        return $this->service->wxLogin($openid);
+    }
+
+    /**
+     * 用户退出
+     */
+    public function logout()
+    {
+        return $this->service->logout();
+    }
+
+    /**
+     * 用户注销
+     */
+    public function destroy()
+    {
+        return $this->service->deleteAccount();
+    }
+
+} 

+ 4 - 1
app/Models/MemberUser.php

@@ -4,13 +4,14 @@ namespace App\Models;
 
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Slowlyo\OwlAdmin\Models\BaseModel as Model;
+use \Laravel\Sanctum\HasApiTokens;
 
 /**
  * 用户
  */
 class MemberUser extends Model
 {
-	use SoftDeletes;
+	use HasApiTokens, SoftDeletes;
 
 	protected $table = 'member_users';
 	protected $hidden = ['password'];
@@ -25,4 +26,6 @@ class MemberUser extends Model
 		});
 	}
 
+
+
 }

+ 123 - 0
app/Services/Client/AccountService.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace App\Services\Client;
+
+use App\Models\MemberUser;
+use App\Models\MemberSocialAccount;
+use App\Models\SysConfig;
+use App\Models\Wallet;
+use App\Models\CoachUser;
+use App\Models\WalletWithdrawRecord;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
+
+
+class AccountService
+{
+    /**
+     * 发送验证码
+     */
+    public function sendVerifyCode(string $mobile)
+    {
+        // 生成验证码
+        $code = mt_rand(100000, 999999);
+        
+        // 保存验证码到缓存
+        Cache::put("verify_code:{$mobile}", $code, 300);
+        
+        // TODO: 调用短信服务发送验证码
+        
+        return ['code' => $code];
+    }
+
+    /**
+     * 用户登录
+     */
+    public function login(string $mobile, string $code)
+    {
+
+        // 验证验证码
+        $cacheCode = Cache::get("verify_code:{$mobile}");
+
+        if (!$cacheCode || $cacheCode != $code) {
+            throw new \Exception('验证码错误');
+        }
+       
+        // 查找或创建用户
+        $user = MemberUser::firstOrCreate(
+            ['mobile' => $mobile],
+            [
+                'state' => 'enable',
+                'register_area' => request()->header('area_code')
+            ]
+        );
+
+        // 生成token
+        $token = $user->createToken('auth-token')->plainTextToken;
+
+        return [
+            'token' => $token,
+            'user' => $user
+        ];
+    }
+
+    /**
+     * 微信登录
+     */
+    public function wxLogin(string $openid)
+    {
+        // 查找或创建微信用户
+        $socialAccount = MemberSocialAccount::firstOrCreate(
+            [
+                'platform' => 'WECHAT',
+                'social_id' => $openid
+            ]
+        );
+
+        $user = $socialAccount->user;
+        if (!$user) {
+            $user = MemberUser::create([
+                'state' => 'enable',
+                'register_area' => request()->header('area_code')
+            ]);
+            $socialAccount->update(['user_id' => $user->id]);
+        }
+
+        // 生成token
+        $token = $user->createToken('auth-token')->plainTextToken;
+
+        return [
+            'token' => $token,
+            'user' => $user
+        ];
+    }
+
+    /**
+     * 用户退出
+     */
+    public function logout()
+    {
+        Auth::user()->tokens()->delete();
+        return ['message' => '退出成功'];
+    }
+
+    /**
+     * 用户注销
+     */
+    public function deleteAccount()
+    {
+        $user = Auth::user();
+      
+        if (!$user || $user->state !== 'enable') {
+            throw new \Exception('用户状态异常');
+        }
+
+        $user->state = 'disable';
+        $user->save();
+        $user->delete();
+        $user->tokens()->delete();
+        return ['message' => '账号已注销'];
+    }
+
+} 

+ 2 - 102
app/Services/Client/UserService.php

@@ -12,92 +12,9 @@ use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 
+
 class UserService
 {
-    /**
-     * 发送验证码
-     */
-    public function sendVerifyCode(string $mobile)
-    {
-        // 生成验证码
-        $code = mt_rand(100000, 999999);
-        
-        // 保存验证码到缓存
-        Cache::put("verify_code:{$mobile}", $code, 300);
-        
-        // TODO: 调用短信服务发送验证码
-        
-        return ['code' => $code];
-    }
-
-    /**
-     * 用户登录
-     */
-    public function login(string $mobile, string $code)
-    {
-        // 验证验证码
-        $cacheCode = Cache::get("verify_code:{$mobile}");
-        if (!$cacheCode || $cacheCode != $code) {
-            throw new \Exception('验证码错误');
-        }
-
-        // 查找或创建用户
-        $user = MemberUser::firstOrCreate(
-            ['mobile' => $mobile],
-            [
-                'state' => 'enable',
-                'register_area' => request()->header('area_code')
-            ]
-        );
-
-        // 生成token
-        $token = $user->createToken('auth-token')->plainTextToken;
-
-        return [
-            'token' => $token,
-            'user' => $user
-        ];
-    }
-
-    /**
-     * 微信登录
-     */
-    public function wxLogin(string $openid)
-    {
-        // 查找或创建微信用户
-        $socialAccount = MemberSocialAccount::firstOrCreate(
-            [
-                'platform' => 'WECHAT',
-                'social_id' => $openid
-            ]
-        );
-
-        $user = $socialAccount->user;
-        if (!$user) {
-            $user = MemberUser::create([
-                'state' => 'enable',
-                'register_area' => request()->header('area_code')
-            ]);
-            $socialAccount->update(['user_id' => $user->id]);
-        }
-
-        // 生成token
-        $token = $user->createToken('auth-token')->plainTextToken;
-
-        return [
-            'token' => $token,
-            'user' => $user
-        ];
-    }
-
-    /**
-     * 用户退出
-     */
-    public function logout()
-    {
-        Auth::user()->tokens()->delete();
-        return ['message' => '退出成功'];
-    }
 
     /**
      * 获取用户信息
@@ -183,23 +100,6 @@ class UserService
         return ['message' => '提现申请已提交'];
     }
 
-    /**
-     * 用户注销
-     */
-    public function deleteAccount()
-    {
-        $user = Auth::user();
-        if (!$user || $user->state !== 'enable') {
-            throw new \Exception('用户状态异常');
-        }
-
-        $user->state = 'disable';
-        $user->save();
-        $user->delete();
-
-        return ['message' => '账号已注销'];
-    }
-
     /**
      * 用户反馈
      */
@@ -219,7 +119,7 @@ class UserService
         return ['message' => '反馈已提交'];
     }
 
-        /**
+    /**
      * 申请成为技师
      */
     public function applyCoach()

+ 40 - 4
routes/api.php

@@ -1,8 +1,44 @@
 <?php
 
-use Illuminate\Http\Request;
+use App\Http\Controllers\Client\AccountController;
+use App\Http\Controllers\Client\UserController;
 use Illuminate\Support\Facades\Route;
 
-Route::get('/user', function (Request $request) {
-    return $request->user();
-})->middleware('auth:sanctum');
+// 无需认证的公开路由
+Route::prefix('account')->group(function () {
+    // 发送验证码
+    Route::post('send-code', [AccountController::class, 'sendVerifyCode']);
+    // 手机号登录
+    Route::post('login', [AccountController::class, 'login']);
+    // 微信登录
+    Route::post('wx-login', [AccountController::class, 'wxLogin']);
+});
+
+// 需要认证的路由组
+Route::middleware('auth:sanctum')->group(function () {
+    // 账号相关
+    Route::prefix('account')->group(function () {
+        // 退出登录
+        Route::post('logout', [AccountController::class, 'logout']);
+        // 注销账号
+        Route::delete('/', [AccountController::class, 'destroy']);
+    });
+
+    // 用户相关
+    Route::prefix('user')->group(function () {
+        // 获取用户信息
+        Route::get('info', [UserController::class, 'getUserInfo']);
+        // 更新用户信息
+        Route::put('info', [UserController::class, 'updateUserInfo']);
+        // 获取钱包信息
+        Route::get('wallet', [UserController::class, 'getUserWallet']);
+        // 提现
+        Route::post('withdraw', [UserController::class, 'withdraw']);
+    
+        // 用户反馈
+        Route::post('feedback', [UserController::class, 'feedback']);
+        // 申请成为技师
+        Route::post('apply-coach', [UserController::class, 'applyCoach']);
+    });
+});
+