소스 검색

fixed:技师端->认证详情

刘学玺 4 달 전
부모
커밋
2c977acfb4
3개의 변경된 파일369개의 추가작업 그리고 9개의 파일을 삭제
  1. 43 5
      app/Services/Coach/AuthService.php
  2. 326 0
      coach-architecture.md
  3. 0 4
      database/seeders/DatabaseSeeder.php

+ 43 - 5
app/Services/Coach/AuthService.php

@@ -37,7 +37,7 @@ class AuthService
     }
 
     /**
-     * 检查提交数限制
+     * 检查提交��数限制
      *
      * @param string $type 认证类型(basic_info/real_auth/qual_auth)
      * @throws \Exception 超出限制时抛出异常
@@ -215,7 +215,7 @@ class AuthService
     /**
      * 检查认证状态
      *
-     * @return array
+     * @return array 返回认证状态和详细信息
      */
     public function checkAuthStatus(): array
     {
@@ -248,9 +248,47 @@ class AuthService
         };
 
         return [
-            'basic_info' => $getStateInfo($latestInfo),
-            'real_auth' => $getStateInfo($latestRealAuth),
-            'qual_auth' => $getStateInfo($latestQualAuth)
+            'basic_info' => [
+                ...$getStateInfo($latestInfo),
+                'detail' => $latestInfo ? [
+                    'nickname' => $latestInfo->nickname,
+                    'avatar' => $latestInfo->avatar,
+                    'gender' => $latestInfo->gender,
+                    'mobile' => $latestInfo->mobile,
+                    'age' => $latestInfo->age,
+                    'birthday' => $latestInfo->birthday,
+                    'work_years' => $latestInfo->work_years,
+                    'intention_city' => $latestInfo->intention_city,
+                    'introduction' => $latestInfo->introduction,
+                    'portrait_images' => $latestInfo->portrait_images,
+                    'created_at' => $latestInfo->created_at,
+                    'updated_at' => $latestInfo->updated_at,
+                ] : null,
+            ],
+            'real_auth' => [
+                ...$getStateInfo($latestRealAuth),
+                'detail' => $latestRealAuth ? [
+                    'real_name' => $latestRealAuth->real_name,
+                    'id_card' => $latestRealAuth->id_card,
+                    'id_card_front_photo' => $latestRealAuth->id_card_front_photo,
+                    'id_card_back_photo' => $latestRealAuth->id_card_back_photo,
+                    'id_card_hand_photo' => $latestRealAuth->id_card_hand_photo,
+                    'created_at' => $latestRealAuth->created_at,
+                    'updated_at' => $latestRealAuth->updated_at,
+                ] : null,
+            ],
+            'qual_auth' => [
+                ...$getStateInfo($latestQualAuth),
+                'detail' => $latestQualAuth ? [
+                    'qual_type' => $latestQualAuth->qual_type,
+                    'qual_no' => $latestQualAuth->qual_no,
+                    'qual_photo' => $latestQualAuth->qual_photo,
+                    'valid_start' => $latestQualAuth->valid_start,
+                    'valid_end' => $latestQualAuth->valid_end,
+                    'created_at' => $latestQualAuth->created_at,
+                    'updated_at' => $latestQualAuth->updated_at,
+                ] : null,
+            ],
         ];
     }
 

+ 326 - 0
coach-architecture.md

@@ -0,0 +1,326 @@
+# 技师端架构说明
+
+## 用户与技师关系
+
+1. 技师端的用户模型:
+
+-   基础用户模型为 MemberUser
+-   技师信息通过 coach 关联获取
+-   Auth::user() 获取的是当前登录的 MemberUser 实例
+-   技师信息通过 Auth::user()->coach 获取
+
+2. 关键代码示例:
+
+```php
+/** @var MemberUser $user */
+// 获取当前登录用户
+$user = Auth::user(); // 返回 MemberUser 实例
+// 获取用户关联的技师信息
+$coach = $user->coach; // 返回 CoachUser 实例
+// 常见的验证模式
+abort_if(!$user->coach, 404, '技师信息不存在');
+```
+
+3. 主要模型关系:
+
+-   MemberUser: 基础用户模型
+-   CoachUser: 技师模型
+-   一对一关联: MemberUser hasOne CoachUser
+
+4. 技师相关验证:
+
+-   需要验证用户是否为技师(coach 关联是否存在)
+-   需要验证技师状态是否正常
+-   需要验证技师认证状态
+
+## 技师认证验证
+
+1. 认证验证要求:
+
+-   除认证相关接口外,所有技师端接口都需要进行完整的认证验证
+-   必须验证以下认证状态:
+    -   基础信息认证
+    -   实名认证
+    -   资质认证
+    -   其他必要认证
+
+2. 验证流程:
+
+```php
+/**
+ * 技师认证状态验证
+ *
+ * @param MemberUser $user 当前登录用户
+ * @throws BusinessException 认证未通过时抛出异常
+ */
+private function validateTechnicianAuth(MemberUser $user): void
+{
+    // 验证技师是否存在
+    abort_if(!$user->coach, 404, '技师信息不存在');
+
+    $coach = $user->coach;
+
+    // 基础信息认证验证
+    if (!$coach->isBaseInfoVerified()) {
+        throw new BusinessException('请先完成基础信息认证');
+    }
+
+    // 实名认证验证
+    if (!$coach->isRealNameVerified()) {
+        throw new BusinessException('请先完成实名认证');
+    }
+
+    // 资质认证验证
+    if (!$coach->isQualificationVerified()) {
+        throw new BusinessException('请先完成资质认证');
+    }
+
+    // 其他必要认证验证...
+}
+```
+
+3. 验证规则:
+
+-   所有认证状态必须为 PASSED (已通过)
+-   未提交认证时提示"请先完成 XX 认证"
+-   认证审核中时提示"XX 认证审核中"
+-   认证被拒绝时提示"XX 认证未通过,请重新提交"
+
+4. 实现位置:
+
+-   在 Service 层基类中实现认证验证方法
+-   所有需要认证验证的方法必须调用验证方法
+-   可以使用中间件统一处理认证验证
+
+5. 异常处理:
+
+-   认证验证失败时抛出 BusinessException
+-   异常信息需要明确指出具体未通过的认证项
+-   前端需要根据异常信息引导用户完成认证
+
+6. 注意事项:
+
+-   认证验证应该在业务逻辑执行前进行
+-   需要考虑多个认证未通过的情况
+-   验证提示信息要友好且明确
+-   记录认证验证失败的日志
+
+## 目录结构
+
+1. 控制器位置:
+
+-   app/Http/Controllers/Coach/\*
+
+2. 服务类位置:
+
+-   app/Services/Coach/\*
+
+3. 请求验证类位置:
+
+-   app/Http/Requests/Coach/\*
+
+## 核心服务类说明
+
+1. AccountService:
+
+-   处理技师账户相关操作
+-   包括基本信息、资质信息、实名认证的提交和查询
+-   处理技师位置信息和排班设置
+
+2. AuthService:
+
+-   处理技师认证相关操作
+-   包括基本信息认证、实名认证、资质认证
+-   提供认证状态查询
+
+3. OrderService:
+
+-   处理技师订单相关操作
+-   包括订单列表查询、抢单、接单、拒单
+-   处理订单状态流转(出发、到达、开始服务、撤离)
+
+4. ProjectService:
+
+-   处理技师项目相关操作
+-   包括可开通项目查询、项目开通
+-   处理项目设置(折扣、性别限制等)
+
+5. WalletService:
+
+-   处理技师钱包相关操作
+-   包括钱包信息查询、流水记录
+-   处理提现申请
+
+## 注意事项
+
+1. 权限验证:
+
+-   所有技师端接口都需要验证用户是否为技师
+-   使用 abort_if(!$user->coach, 404, '技师信息不存在') 进行验证
+
+2. 数据获取:
+
+-   优先通过关联关系获取数据
+-   使用 with() 进行预加载以优化性能
+
+3. 错误处理:
+
+-   使用 abort_if �� 行前置条件验证
+-   在 Service 层进行详细的业务逻辑验证
+
+4. 事务处理:
+
+-   涉及多表操作时使用数据库事务
+-   在 Service 层实现事务逻辑
+
+5. 缓存策略:
+
+-   技师信息优先使用缓存
+-   更新操作时及时处理相关缓存
+
+6. 日志记录:
+
+-   重要操作需要记录日志
+-   包含用户 ID、技师 ID、操作内容等关键信息
+
+7. 敏感数据处理:
+
+-   手机号、身份证等敏感信息需要脱敏处理
+-   日志中不应该出现完整的敏感信息
+
+## 常用枚举类型
+
+1. 技师状态相关:
+
+-   TechnicianStatus: 技师状态
+
+    -   PENDING: 待认证 (1)
+    -   ACTIVE: 正常服务 (2)
+    -   SUSPENDED: 暂停服务 (3)
+    -   BLACKLIST: 黑名单 (4)
+    -   TERMINATED: 已终止 (5)
+
+-   TechnicianAuthStatus: 认证状态
+
+    -   AUDITING: 审核中 (1)
+    -   PASSED: 审核通过 (2)
+    -   REJECTED: 审核拒绝 (3)
+
+-   TechnicianWorkStatus: 工作状态
+
+    -   REST: 休息 (1)
+    -   FREE: 空闲 (2)
+    -   BUSY: 忙碌 (3)
+
+-   TechnicianLocationType: 位置类型
+    -   CURRENT: 当前定位 (1)
+    -   COMMON: 常用定位 (2)
+
+2. 订单相关:
+
+-   OrderStatus: 订单状态
+
+    -   CREATED: 下单 (1)
+    -   ASSIGNED: 指定 (2)
+    -   PAID: 支付 (3)
+    -   CANCELLED: 取消 (4)
+    -   REFUNDING: 退款中 (5)
+    -   REFUNDED: 退款成功 (6)
+    -   REFUND_FAILED: 退款失败 (7)
+    -   ACCEPTED: 接单 (8)
+    -   DEPARTED: 出发 (9)
+    -   ARRIVED: 到达 (10)
+    -   STARTED: 开始服务 (11)
+    -   SERVING: 服务中 (12)
+    -   FINISHED: 服务结束 (13)
+    -   LEFT: 撤离 (14)
+    -   COMMENTED: 已评价 (15)
+    -   REJECTED: 已拒单 (16)
+    -   ALARM: 报警 (17)
+    -   COMPLETED: 服务完成 (18)
+
+-   OrderType: 订单类型
+
+    -   VISIT: 上门 (1)
+    -   GRAB: 抢单 (2)
+    -   OVERTIME: 加钟 (3)
+    -   SHOP: 到店 (4)
+    -   EMERGENCY: 应急 (5)
+
+-   OrderRecordStatus: 订单记录状态
+    -   CREATED: 创建订单 (1)
+    -   PAID: 支付完成 (2)
+    -   ASSIGNED: 已分配技师 (3)
+    -   ARRIVED: 技师到达 (4)
+    -   STARTED: 开始服务 (5)
+    -   COMPLETED: 服务完成 (6)
+    -   EVALUATED: 已评价 (7)
+    -   CANCELLED: 已取消 (8)
+    -   REJECTED: 已拒单 (9)
+    -   DEPARTED: 技师出发 (10)
+    -   LEFT: 技师撤离 (11)
+    -   REFUNDING: 退款中 (12)
+    -   REFUNDED: 退款完成 (13)
+    -   CHANGE_COACH: 更换技师 (14)
+    -   RESET_COACH: 重置技师 (15)
+    -   TEMPORARY_ACCEPTED: 临时接单 (16)
+    -   ALARM_HANDLED: 报警已处理 (17)
+
+3. 项目相关:
+
+-   ProjectStatus: 项目状态
+    -   OPEN: 开 �� (1)
+    -   CLOSE: 关闭 (2)
+
+4. 钱包相关:
+
+-   WithdrawStatus: 提现状态
+    -   PROCESSING: 提现中 (1)
+    -   SUCCESS: 提现成功 (2)
+    -   FAILED: 提现失败 (3)
+
+## 数据验证和安全
+
+1. 输入验证:
+
+-   使用专门的 Request 类进行请求验证
+-   在 Service 层进行业务规则验证
+-   所有外部输入都必须经过验证
+
+2. 数据安全:
+
+-   敏感数据传输需要加密
+-   关键操作需要验证用户身份
+-   定期清理临时数据和日志
+
+3. 并发处理:
+
+-   使用数据库事务确保数据一致性
+-   关键操作使用锁机制防止并发问题
+-   使用队列处理耗时操作
+
+## 开发规范
+
+1. 代码风格:
+
+-   遵循 PSR-12 编码规范
+-   使用类型提示和返回值类型声明
+-   所有属性和方法都要有清晰的访问修饰符
+
+2. 注释规范:
+
+-   类和方法必须有 PHPDoc 注释
+-   复杂的业务逻辑需要添加行内注释
+-   关键参数和返回值要有说明
+
+3. 异常处理:
+
+-   使用自定义异常类区分不同类型的错误
+-   统一的异常处理机制
+-   详细的错误日志记录
+
+4. 测试要求:
+
+-   核心业务逻辑需要单元测试
+-   关键接口需要集成测试
+-   定期进行性能测试

+ 0 - 4
database/seeders/DatabaseSeeder.php

@@ -15,9 +15,5 @@ class DatabaseSeeder extends Seeder
     {
         // User::factory(10)->create();
 
-        User::factory()->create([
-            'name' => 'Test User',
-            'email' => 'test@example.com',
-        ]);
     }
 }