. */ declare(strict_types=1); namespace FireflyIII\Repositories\ObjectGroup; use FireflyIII\Models\ObjectGroup; /** * Trait CreatesObjectGroups */ trait CreatesObjectGroups { /** * @param int $groupId * * @return ObjectGroup|null */ protected function findObjectGroupById(int $groupId): ?ObjectGroup { return $this->user->objectGroups()->where('id', $groupId)->first(); } /** * @param string $title * * @return ObjectGroup|null */ protected function findOrCreateObjectGroup(string $title): ?ObjectGroup { $maxOrder = $this->getObjectGroupMaxOrder(); if (!$this->hasObjectGroup($title)) { return ObjectGroup::create( [ 'user_id' => $this->user->id, 'title' => $title, 'order' => $maxOrder + 1, ] ); } return $this->findObjectGroup($title); } /** * @return int */ protected function getObjectGroupMaxOrder(): int { return (int) $this->user->objectGroups()->max('order'); } /** * @param string $title * * @return bool */ protected function hasObjectGroup(string $title): bool { return 1 === $this->user->objectGroups()->where('title', $title)->count(); } /** * @param string $title * * @return null|ObjectGroup */ protected function findObjectGroup(string $title): ?ObjectGroup { return $this->user->objectGroups()->where('title', $title)->first(); } }