validated(); throw_unless($data, ValidationException::withMessages([])); $projectMembers = ProjectMemberService::getMembers($data['project_id']); $projectMembers['users'] = $projectMembers['users'] ?? []; return responder()->success($projectMembers)->respond(); } /** * @api {post} /api/project-members/bulk-edit Bulk Edit Project Members * @apiDescription Edit roles of multiple project members * * @apiVersion 4.0.0 * @apiName BulkEditProjectMembers * @apiGroup ProjectMember * * @apiUse AuthHeader * * @apiParam {Integer} project_id Project ID * @apiParam {Object[]} user_roles Array of user roles * @apiParam {Integer} user_roles.user_id User ID * @apiParam {Integer} user_roles.role_id Role ID * * @apiParamExample {json} Request Example * { * "project_id": 1, * "user_roles": [ * { * "user_id": 1, * "role_id": 2 * }, * { * "user_id": 2, * "role_id": 3 * } * ] * } * * @apiSuccessExample {json} Response Example * HTTP/1.1 204 No Content * * @apiUse 400Error * @apiUse ValidationError * @apiUse UnauthorizedError */ /** * @param BulkEditProjectMemberRequest $request * @return JsonResponse */ public function bulkEdit(BulkEditProjectMemberRequest $request): JsonResponse { $data = Filter::process(Filter::getRequestFilterName(), $request->validated()); $userRoles = []; foreach ($data['user_roles'] as $value) { $userRoles[$value['user_id']] = ['role_id' => $value['role_id']]; } CatEvent::dispatch(Filter::getBeforeActionEventName(), [$data['project_id'], $userRoles]); ProjectMemberService::syncMembers($data['project_id'], $userRoles); CatEvent::dispatch(Filter::getAfterActionEventName(), [$data['project_id'], $userRoles]); return responder()->success()->respond(204); } }