*/ class UserPreorderMessages extends ArrayCollection implements \JsonSerializable, PersistentCollection { public function __construct( private readonly UserPreorder $userPreorder, ) { $messages = $this->fetchMessages(); parent::__construct(array_map( fn (array $m) => UserPreorderMessage::createFromArray($m), $messages, )); } public function save(): ?\Throwable { $messages = $this->toArray(); usort($messages, fn (UserPreorderMessage $m0, UserPreorderMessage $m1) => $m0->date <=> $m1->date); try { UserPreordersDataUtil::upsert($this->userPreorder, messages: $messages); } catch (\Doctrine\DBAL\Exception $e) { return $e; } return null; } private function fetchMessages(): array { try { $data = UserPreordersDataUtil::get($this->userPreorder); } catch (\Doctrine\DBAL\Exception|Exception) { return []; } return $data['history'] ?? []; } public function jsonSerialize(): mixed { return $this->toArray(); } }