implement save and get all in flat file carrier repo
This commit is contained in:
parent
9043b93555
commit
6776dc6291
1 changed files with 60 additions and 1 deletions
|
|
@ -4,6 +4,15 @@ namespace FreightQuote\Carrier;
|
||||||
|
|
||||||
class FlatFileCarrierRepository implements CarrierRepository
|
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
|
public function find(int $id): ?Carrier
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -11,6 +20,56 @@ class FlatFileCarrierRepository implements CarrierRepository
|
||||||
|
|
||||||
public function save(Carrier $carrier): Carrier
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue