diff --git a/src/Contracts/IssueActorModelContract.php b/src/Contracts/IssueActorModelContract.php index 3580dba..29742d3 100644 --- a/src/Contracts/IssueActorModelContract.php +++ b/src/Contracts/IssueActorModelContract.php @@ -4,6 +4,8 @@ use AuroraWebSoftware\Connective\Collections\ConnectiveCollection; use AuroraWebSoftware\Connective\Contracts\ConnectiveContract; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; /** * issue actor can be one of the following: @@ -26,4 +28,9 @@ public function getActingIssues(string $connectionType): ConnectiveCollection; * ['channel' => 'email', 'email' => 'example@ex.com'] */ public function getIssueReminderConfig(): array; + + /** + * @return Collection + */ + public static function searchIssueActor(string $searchTerm): Collection; } diff --git a/src/Models/AIssue.php b/src/Models/AIssue.php index 9fbedaa..9bf4118 100644 --- a/src/Models/AIssue.php +++ b/src/Models/AIssue.php @@ -15,6 +15,7 @@ use AuroraWebSoftware\Connective\Contracts\ConnectiveContract; use AuroraWebSoftware\Connective\Exceptions\ConnectionTypeException; use AuroraWebSoftware\Connective\Exceptions\ConnectionTypeNotSupportedException; +use AuroraWebSoftware\Connective\Models\Connection; use AuroraWebSoftware\Connective\Traits\Connective; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Carbon; @@ -167,18 +168,25 @@ public function addObserver(IssueActorModelContract&Model $issueActorModel): voi public function removeObserver(IssueActorModelContract $issueActorModel): void { - foreach ($this->getObservers() ?? [] as $observer) { - if ($observer->getId() === $issueActorModel->getId()) { - $observer->delete(); - break; - } + if ($this->connections('issue_observer')) { + $this->connections('issue_observer') + ->each(function (Model $connection) use ($issueActorModel) { + + /** + * @var Connection $connection + */ + if ($connection->connectedTo()->getId() === $issueActorModel->getId()) { + $connection->delete(); + } + }); } } public function removeAllObservers(): void { - foreach ($this->getObservers() ?? [] as $observer) { - $observer->delete(); + if ($this->connections('issue_observer')) { + $this->connections('issue_observer') + ->each(fn (Model $connection) => $connection->delete()); } } diff --git a/tests/Models/User.php b/tests/Models/User.php index be2577b..bf2da05 100644 --- a/tests/Models/User.php +++ b/tests/Models/User.php @@ -6,6 +6,7 @@ use AuroraWebSoftware\AIssue\Traits\AIssueActor; use AuroraWebSoftware\Connective\Contracts\ConnectiveContract; use AuroraWebSoftware\Connective\Traits\Connective; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; /** @@ -32,4 +33,14 @@ public function getIssueReminderConfig(): array { return ['channel' => 'email', 'email' => 'example@ex.com']; } + + /** + * @return Collection + * + * @phpstan-ignore-next-line + */ + public static function searchIssueActor(string $searchTerm): Collection + { + return User::query()->where('name', 'like', '%'.$searchTerm.'%')->get(); + } } diff --git a/tests/Unit/AIssueTest.php b/tests/Unit/AIssueTest.php index 6cd4263..0294553 100644 --- a/tests/Unit/AIssueTest.php +++ b/tests/Unit/AIssueTest.php @@ -203,6 +203,20 @@ $exampleIssueOwner1->ownIssue($issue); expect($exampleIssueOwner1->getOwningIssues())->toHaveCount(1); + // dd(User::searchIssueActor('user')); + + // search actor + expect(User::searchIssueActor('user')) + ->toHaveCount(4) + ->and(User::searchIssueActor('user 1')) + ->toHaveCount(1) + ->and(User::searchIssueActor('user 2')) + ->toHaveCount(1) + ->and(User::searchIssueActor('user 3')) + ->toHaveCount(1) + ->and(User::searchIssueActor('user 4')) + ->toHaveCount(1); + // todo delete kısmı yazılmadı henüz });