> */ public function rules(): array { return [ 'name' => [ 'required', 'min:3', 'regex:/^[\w]+[\s\w.-]+$/u', Rule::unique(VaultNode::class) ->where('vault_id', $this->vault->id) ->where('parent_id', $this->parent_id) ->where('extension', $this->extension) ->ignore($this->node), ], ]; } public function setVault(Vault $vault): void { $this->vault = $vault; } public function setNode(VaultNode $node): void { $this->node = $node; $this->parent_id = $node->parent_id; $this->is_file = (bool) $node->is_file; $this->name = $node->name; $this->extension = $node->extension; $this->content = $node->content; } public function create(): VaultNode { $this->name = mb_trim($this->name); $this->validate(); $node = new CreateVaultNode()->handle($this->vault, [ 'parent_id' => $this->parent_id, 'is_file' => $this->is_file, 'name' => $this->name, 'extension' => $this->is_file ? 'md' : null, 'content' => $this->content, ]); $this->reset(['name']); return $node; } public function update(): void { if (is_null($this->node)) { return; } $this->name = mb_trim($this->name); $this->validate(); new UpdateVaultNode()->handle($this->node, [ 'parent_id' => $this->parent_id, 'is_file' => (bool) $this->node->is_file, 'name' => $this->name, 'extension' => $this->node->extension, 'content' => $this->content, ]); } }