. */ declare(strict_types=1); namespace FireflyIII\Repositories\Webhook; use FireflyIII\Models\Webhook; use FireflyIII\Models\WebhookAttempt; use FireflyIII\Models\WebhookMessage; use FireflyIII\Support\Repositories\UserGroup\UserGroupInterface; use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait; use Illuminate\Support\Collection; use Illuminate\Support\Str; /** * Class WebhookRepository */ class WebhookRepository implements WebhookRepositoryInterface, UserGroupInterface { use UserGroupTrait; public function all(): Collection { return $this->user->webhooks()->get(); } public function destroy(Webhook $webhook): void { $webhook->delete(); } public function destroyAttempt(WebhookAttempt $attempt): void { $attempt->delete(); } public function destroyMessage(WebhookMessage $message): void { $message->delete(); } public function getAttempts(WebhookMessage $webhookMessage): Collection { return $webhookMessage->webhookAttempts()->orderBy('created_at', 'DESC')->get(['webhook_attempts.*']); } public function getMessages(Webhook $webhook): Collection { return $webhook->webhookMessages() ->orderBy('created_at', 'DESC') ->get(['webhook_messages.*']) ; } public function getReadyMessages(Webhook $webhook): Collection { return $webhook->webhookMessages() ->where('webhook_messages.sent', 0) ->where('webhook_messages.errored', 0) ->get(['webhook_messages.*']) ->filter( static fn (WebhookMessage $message) // @phpstan-ignore-line => $message->webhookAttempts()->count() <= 2 )->splice(0, 3) ; } public function store(array $data): Webhook { $secret = Str::random(24); $fullData = [ 'user_id' => $this->user->id, 'user_group_id' => $this->user->user_group_id, 'active' => $data['active'] ?? false, 'title' => $data['title'] ?? null, 'trigger' => $data['trigger'], 'response' => $data['response'], 'delivery' => $data['delivery'], 'secret' => $secret, 'url' => $data['url'], ]; return Webhook::create($fullData); } public function update(Webhook $webhook, array $data): Webhook { $webhook->active = $data['active'] ?? $webhook->active; $webhook->trigger = $data['trigger'] ?? $webhook->trigger; $webhook->response = $data['response'] ?? $webhook->response; $webhook->delivery = $data['delivery'] ?? $webhook->delivery; $webhook->title = $data['title'] ?? $webhook->title; $webhook->url = $data['url'] ?? $webhook->url; if (true === $data['secret']) { $secret = Str::random(24); $webhook->secret = $secret; } $webhook->save(); return $webhook; } }