|
@@ -72,53 +72,73 @@ class ProjectService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 技师开通项目
|
|
|
+ * 技师开通/关闭项目
|
|
|
*
|
|
|
* 业务流程:
|
|
|
* 1. 验证技师状态
|
|
|
* 2. 验证项目状态
|
|
|
- * 3. 检查是否已开通
|
|
|
- * 4. 创建项目关联
|
|
|
- * 5. 返回开通结果
|
|
|
- *
|
|
|
- * 注意事项:
|
|
|
- * - 技师状态必须正常
|
|
|
- * - 只能开通状态为开放的项目
|
|
|
- * - 不能重复开通同一个项目
|
|
|
- * - 使用事务确保数据一致性
|
|
|
- * - 返回标准化的开通结果
|
|
|
+ * 3. 根据操作类型处理项目
|
|
|
+ * 4. 返回操作结果
|
|
|
*
|
|
|
* @param CoachUser $coach 技师对象
|
|
|
- * @param array $data 开通项目数据,包含:
|
|
|
+ * @param array $data 项目操作数据,包含:
|
|
|
* - project_id: int 项目ID
|
|
|
- * @return array 开通结果,包含:
|
|
|
+ * - action: string 操作类型(open:开通 close:关闭)
|
|
|
+ * @return array 操作结果,包含:
|
|
|
* - project_id: int 项目ID
|
|
|
* - project_name: string 项目名称
|
|
|
* - state: int 项目状态
|
|
|
- * - state_text: string 状态描述(已开通)
|
|
|
+ * - state_text: string 状态描述
|
|
|
* @throws \Illuminate\Http\Exceptions\HttpResponseException 当验证失败时抛出异常
|
|
|
*/
|
|
|
public function openProject(CoachUser $coach, array $data): array
|
|
|
{
|
|
|
return DB::transaction(function () use ($coach, $data) {
|
|
|
// 检查技师状态是否正常
|
|
|
- $coach->validateActiveStatus('技师状态异常,无法开通项目');
|
|
|
+ $coach->validateActiveStatus('技师状态异常,无法操作项目');
|
|
|
|
|
|
// 验证项目是否存在且状态为开放
|
|
|
- // 验证项目是否存在且状态正常
|
|
|
$project = Project::validateOpenProject($data['project_id']);
|
|
|
|
|
|
- // 检查是否已开通该项目
|
|
|
- $coach->validateProjectNotOpened($data['project_id']);
|
|
|
-
|
|
|
- // 创建技师项目关联
|
|
|
- $coachProject = $coach->createProjectRelation($data['project_id']);
|
|
|
+ // 根据操作类型处理项目并获取状态
|
|
|
+ $state = match ($data['action']) {
|
|
|
+ 'open' => $this->handleProjectOpen($coach, $data['project_id']),
|
|
|
+ 'close' => $this->handleProjectClose($coach, $data['project_id']),
|
|
|
+ };
|
|
|
|
|
|
- // 返回格式化的开通结果
|
|
|
- return $project->formatOpenResult($coachProject);
|
|
|
+ // 返回格式化的操作结果
|
|
|
+ return $project->formatActionResult($state);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理项目开通
|
|
|
+ *
|
|
|
+ * @param CoachUser $coach 技师对象
|
|
|
+ * @param int $projectId 项目ID
|
|
|
+ * @return int 返回开通后的状态值
|
|
|
+ */
|
|
|
+ private function handleProjectOpen(CoachUser $coach, int $projectId): int
|
|
|
+ {
|
|
|
+ // 创建或更新项目关联为开通状态
|
|
|
+ $coach->updateOrCreateProjectRelation($projectId, ProjectStatus::OPEN->value);
|
|
|
+ return ProjectStatus::OPEN->value;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理项目关闭
|
|
|
+ *
|
|
|
+ * @param CoachUser $coach 技师对象
|
|
|
+ * @param int $projectId 项目ID
|
|
|
+ * @return int 返回关闭后的状态值
|
|
|
+ */
|
|
|
+ private function handleProjectClose(CoachUser $coach, int $projectId): int
|
|
|
+ {
|
|
|
+ // 创建或更新项目关联为关闭状态
|
|
|
+ $coach->updateOrCreateProjectRelation($projectId, ProjectStatus::CLOSE->value);
|
|
|
+ return ProjectStatus::CLOSE->value;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置项目
|
|
|
*
|