powerboard->gatewayRequest('/v1/gateways', (\App\Enum\HttpVerb::GET)->value, [], []); if($r->failed()) $r->throw(); return (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Gateway::class."[]", $r->object()->resource->data); } /** We will need to have a process that updates this at intervals */ public function updateSettings():self { $gateways = $this->getGateways(); $settings = $this->powerboard->company_gateway->getSettings(); $settings->gateways = $gateways; $this->powerboard->company_gateway->setSettings($settings); return $this; } public function getSettings(): mixed { return $this->powerboard->company_gateway->getSettings(); } public function getPaymentGatewayConfiguration(int $gateway_type_id): mixed { $type = self::GATEWAY_CBA; match($gateway_type_id){ \App\Models\GatewayType::CREDIT_CARD => $type = self::GATEWAY_CBA, default => $type = self::GATEWAY_CBA, }; return $this->getGatewayByType($type); } private function getGatewayByType(string $gateway_type_const): mixed { $settings = $this->getSettings(); if(!property_exists($settings,'gateways')){ $this->updateSettings(); $settings = $this->getSettings(); } $gateways = (new \App\PaymentDrivers\CBAPowerBoard\Models\Parse())->encode(Gateway::class."[]", $settings->gateways); if ($gateway_type_const == self::GATEWAY_CBA && strlen($this->powerboard->company_gateway->getConfigField('gatewayId') ?? '') > 1) { return collect($gateways)->first(function (Gateway $gateway) { return $gateway->_id == $this->powerboard->company_gateway->getConfigField('gatewayId'); }); } return collect($gateways)->first(function (Gateway $gateway) use ($gateway_type_const){ return $gateway->type == $gateway_type_const; }); } public function getGatewayId(int $gateway_type_id): string { //allows us to override the gateway id for credit card if configured. $gateway = $this->getPaymentGatewayConfiguration($gateway_type_id); return $gateway->_id; } }