*/ public function handle( Project $project, User $user, ProjectSettingsSection $section, mixed $status = null, mixed $error = null, ): array { return [ 'activeSection' => $section->value, 'error' => $error, 'project' => ProjectResource::make($project)->resolve(), 'sectionData' => $this->sectionData($project, $user, $section), 'status' => $status, ]; } /** * @return array */ private function sectionData( Project $project, User $user, ProjectSettingsSection $section, ): array { $payload = match ($section) { ProjectSettingsSection::General => $this->generalData($project), ProjectSettingsSection::Board => $this->buildProjectBoardSettingsPayload->handle($project), ProjectSettingsSection::Metadata => $this->buildProjectTicketMetadataSettingsPayload->handle($project), ProjectSettingsSection::Repositories => $this->buildProjectRepositorySettingsPayload->handle($project, $user), ProjectSettingsSection::Notifications => $this->buildProjectNotificationSettingsPayload->handle($project), ProjectSettingsSection::Access => $this->accessData($project), }; return Arr::except($payload, ['error', 'project', 'status']); } /** * @return array */ private function generalData(Project $project): array { return [ 'sourceTemplates' => ProjectTemplateResource::collection( ProjectTemplate::query() ->published() ->with('sourceProject') ->orderBy('name') ->get(), )->resolve(), 'templateState' => $this->resolveProjectTemplateState->handle($project), ]; } /** * @return array */ private function accessData(Project $project): array { return [ 'directPermissions' => $this->permissionService->assignmentMap(User::class, $project), 'permissionOptions' => PermissionOptionResource::collection( $this->permissionService->permissionOptions(User::class, Project::class), )->resolve(), 'teamPermissions' => $this->permissionService->assignmentMap(Team::class, $project), 'teams' => TeamResource::collection( Team::query() ->with('users') ->orderBy('name') ->get(), )->resolve(), 'users' => UserResource::collection( User::query() ->orderBy('name') ->get(), )->resolve(), ]; } }