Open brunolimame opened 5 years ago
Uma outra opção de hydrator, agora também servindo como factory, criando um novo objeto e hidratando o mesmo.
/**
* @param array $keys
* @param stdClass $response
*
* @return $this
*/
protected function hydratorNewObject($keys = [], stdClass $response)
{
if (count($keys) > 0) {
$hydrated = clone($this);
$hydrated->data = new stdClass();
$this->hydratorObject($hydrated->data, $keys, $response);
return $hydrated;
}
return $this;
}
/**
* @param stdClass $response
* @return mixed
*/
protected function fillEntity(stdClass $response)
{
$listKeys = [
"bins", "count", "amountCharged", "amountReceived", "id", "sellingKey", "status", "createdAt",
"canceledAt", "completedAt", "amount", "amountPaid", "cancelable", "additionalInformation",
"cardTransactions", "splitters", "bankSlips"
];
return $this->hydratorNewObject($listKeys, $response);
}
hydrator simples, que não clona o atual, cria um novo.
/**
* @param array $keys
* @param stdClass $base
*
* @return $this|mixed
*/
protected function hydratorNewSimpleObject($keys = [], stdClass $base)
{
if (count($keys) > 0) {
$hydrated = new stdClass();
$this->hydratorObject($hydrated, $keys, $base);
return $hydrated;
}
return false;
}
Aplicando hydrator
/**
* @param stdClass $response
*
* @return mixed
*/
protected function fillEntity(stdClass $response)
{
$this->data->banks = array_reduce($response->banks, function ($result, $bank) {
$bankHydrated = $this->hydratorNewSimpleObject(["id", "name"], $bank);
if($bankHydrated){
$return[] = $bankHydrated;
}
return $result;
}, []);
return $this->data->banks;
}
@brunolimame obrigado pela considerações a equipe irá trabalhar nisso. Assim que terminamos nossas prioridades aplicaremos essas mudanças, Obrigado.
O uso do getIfSet em vários campo pode ser automarizado usando um hydrator, facilitando a manutenção e a leitura do código.
Ao invés de chamar o método getIfSet para cada chave, junta todas em um array e hydrator se encarrega de todo o processo.
O método seria aplicado em Service/PaggcertoService.php
Um exemplo de aplicação em Service/CardPaymentService.php
Atual
https://github.com/paggcerto-sa/paggcerto-sdk-php/blob/8de9e55814be0f74d15ea87b293d86d093e19d0a/src/Service/CardPaymentService.php#L384-L412
Aplicando o hydrator