organization_id !== $organization->id) { throw new AuthorizationException('Member does not belong to organization'); } } /** * List all members of an organization * * @return MemberCollection> * * @throws AuthorizationException * * @operationId getMembers */ public function index(Organization $organization, MemberIndexRequest $request): MemberCollection { $this->checkPermission($organization, 'members:view'); $members = $organization->users() ->paginate(config('app.pagination_per_page_default')); return MemberCollection::make($members); } /** * Update a member of the organization * * @throws AuthorizationException * * @operationId updateMember */ public function update(Organization $organization, Membership $membership, MemberUpdateRequest $request): JsonResource { $this->checkPermission($organization, 'members:update', $membership); $membership->billable_rate = $request->input('billable_rate'); $membership->role = $request->input('role'); $membership->save(); return new MemberResource($membership); } /** * Remove a member of the organization. * * @throws AuthorizationException|EntityStillInUseApiException * * @operationId removeMember */ public function destroy(Organization $organization, Membership $membership): JsonResponse { $this->checkPermission($organization, 'members:delete', $membership); if (TimeEntry::query()->where('user_id', $membership->user_id)->whereBelongsTo($organization, 'organization')->exists()) { throw new EntityStillInUseApiException('member', 'time_entry'); } if (ProjectMember::query()->whereBelongsToOrganization($organization)->where('user_id', $membership->user_id)->exists()) { throw new EntityStillInUseApiException('member', 'project_member'); } $membership->delete(); return response() ->json(null, 204); } /** * Invite a placeholder member to become a real member of the organization * * @throws AuthorizationException|UserNotPlaceholderApiException * * @operationId invitePlaceholder */ public function invitePlaceholder(Organization $organization, Membership $membership, Request $request): JsonResponse { $this->checkPermission($organization, 'members:invite-placeholder', $membership); $user = $membership->user; if (! $user->is_placeholder) { throw new UserNotPlaceholderApiException(); } app(InvitesTeamMembers::class)->invite( $request->user(), $organization, $user->email, 'employee' ); return response()->json(null, 204); } }