implement save and get all in flat file carrier repo

This commit is contained in:
Yisroel Baum 2025-11-08 22:55:54 +02:00
parent 9043b93555
commit 6776dc6291
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9

View file

@ -4,6 +4,15 @@ namespace FreightQuote\Carrier;
class FlatFileCarrierRepository implements CarrierRepository
{
private string $pathToCarrierFile = __DIR__.'/../../storage/carriers.json';
private function getCarrierData(): array
{
$json = file_get_contents($this->pathToCarrierFile);
return json_decode($json, true);
}
public function find(int $id): ?Carrier
{
return null;
@ -11,6 +20,56 @@ class FlatFileCarrierRepository implements CarrierRepository
public function save(Carrier $carrier): Carrier
{
return new Carrier(null, 'fake@email.com');
$data = $this->getCarrierData();
foreach ($data as $jsonCarrier) {
if ($jsonCarrier['id'] === $carrier->getId()) {
file_put_contents(
$this->pathToCarrierFile,
json_encode($data, JSON_PRETTY_PRINT)
);
return new Carrier(
$jsonCarrier['id'],
$jsonCarrier['email'],
$jsonCarrier['companyName'],
);
}
}
$newCarrier = [
'id' => $this->autoIncrementId($data),
'email' => $carrier->getEmail(),
'companyName' => $carrier->getCompanyName(),
];
$data[] = $newCarrier;
file_put_contents(
$this->pathToCarrierFile,
json_encode($data, JSON_PRETTY_PRINT)
);
return new Carrier(
$newCarrier['id'],
$newCarrier['email'],
$newCarrier['companyName'],
);
}
/**
* @return Carrier[]
*/
public function getAll(): array
{
return array_map(function ($carrier) {
return new Carrier(
$carrier['id'],
$carrier['email'],
$carrier['companyName']
);
}, $this->getCarrierData());
}
/**
* @param array<int,mixed> $data
*/
private function autoIncrementId(array $data): int
{
return count($data);
}
}