*/ #[NoDiscard] public function search(string $value): Collection { return ConnectionProvider::query() ->whereLike('slug', "%{$value}%") ->orWhereLike('name', "%{$value}%") ->get(); } /** * @throws Throwable */ public function create(StoreConnectionProviderRequestData $data): void { DB::transaction( function () use ($data): void { ConnectionProvider::query()->create($data->toArray()); } ); } /** * @return PaginatedDataCollection */ #[NoDiscard] public function getAll(): PaginatedDataCollection { $data = ConnectionProvider::query()->select(['id', 'name', 'slug'])->paginate(); return ConnectionProviderData::collect($data, PaginatedDataCollection::class); } /** * @throws InvalidArgumentException when id is invalid * @throws Throwable when an error occurs during the update. */ public function update(string $slug, StoreConnectionProviderRequestData $data): void { DB::transaction( fn () => ConnectionProvider::query() ->where('slug', $slug) ->update($data->toArray()) ); } /** * @throws Throwable when an error occurs during the deletion. * @throws InvalidArgumentException when id is invalid */ public function delete(string $slug): void { DB::transaction( fn () => ConnectionProvider::query() ->where('slug', $slug) ->delete() ); } /** * @throws ModelNotFoundException when the connected app is not found. * @throws InvalidArgumentException when id is invalid. */ #[NoDiscard] public function getProvider(string $slug): ConnectionProviderData { $data = ConnectionProvider::query() ->select(['id', 'name', 'slug']) ->where('slug', $slug) ->first(); return ConnectionProviderData::from($data); } }