From 6776dc629190aba4543c389b3efaf1260e1748f5 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Sat, 8 Nov 2025 22:55:54 +0200 Subject: [PATCH] implement save and get all in flat file carrier repo --- src/Carrier/FlatFileCarrierRepository.php | 61 ++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/Carrier/FlatFileCarrierRepository.php b/src/Carrier/FlatFileCarrierRepository.php index 961ede7..8de3c85 100644 --- a/src/Carrier/FlatFileCarrierRepository.php +++ b/src/Carrier/FlatFileCarrierRepository.php @@ -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 $data + */ + private function autoIncrementId(array $data): int + { + return count($data); } }