diff --git a/app/Text/JsonTextRepository.php b/app/Text/JsonTextRepository.php new file mode 100644 index 0000000..fc8640d --- /dev/null +++ b/app/Text/JsonTextRepository.php @@ -0,0 +1,108 @@ +filePath = __DIR__.'/../../data/texts.json'; + } + + public function create(CreateTextDto $dto): Text + { + $texts = $this->readTexts(); + $id = $this->getNextId($texts); + + $text = new Text(id: $id, name: $dto->name); + $texts[] = ['id' => $id, 'name' => $dto->name]; + + $this->writeTexts($texts); + + return $text; + } + + public function find(int $id): ?Text + { + $texts = $this->readTexts(); + + foreach ($texts as $data) { + if ($data['id'] === $id) { + return new Text( + id: $data['id'], + name: $data['name'], + ); + } + } + + return null; + } + + /** + * @return Text[] + */ + public function getAll(): array + { + $texts = $this->readTexts(); + + return array_map( + function (array $data) { + return new Text( + id: $data['id'], + name: $data['name'], + ); + }, + $texts + ); + } + + /** + * @return array + */ + private function readTexts(): array + { + if (!file_exists($this->filePath)) { + return []; + } + + $content = file_get_contents($this->filePath); + + return json_decode($content, true) ?? []; + } + + /** + * @param array $texts + */ + private function writeTexts(array $texts): void + { + file_put_contents( + $this->filePath, + json_encode($texts, JSON_PRETTY_PRINT) + ); + } + + /** + * @param array $texts + */ + private function getNextId(array $texts): int + { + if (empty($texts)) { + return 1; + } + + $maxId = 0; + foreach ($texts as $text) { + if ($text['id'] > $maxId) { + $maxId = $text['id']; + } + } + + return $maxId + 1; + } +}