Offload stuff to repositories for rules and rule groups, see issue #185

This commit is contained in:
James Cole
2016-02-17 17:27:41 +01:00
parent 2ef1c54417
commit f9e2a677d9
5 changed files with 124 additions and 76 deletions

View File

@@ -11,6 +11,7 @@ declare(strict_types = 1);
namespace FireflyIII\Repositories\Rule;
use Auth;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleAction;
use FireflyIII\Models\RuleGroup;
@@ -68,6 +69,22 @@ class RuleRepository implements RuleRepositoryInterface
return intval($ruleGroup->rules()->max('order'));
}
/**
* @param Rule $rule
*
* @return string
* @throws FireflyException
*/
public function getPrimaryTrigger(Rule $rule): string
{
$count = $rule->ruleTriggers()->count();
if ($count === 0) {
throw new FireflyException('Rules should have more than zero triggers, rule #' . $rule->id . ' has none!');
}
return $rule->ruleTriggers()->where('trigger_type', 'user_action')->first()->trigger_value;
}
/**
* @param Rule $rule
*

View File

@@ -22,6 +22,7 @@ use FireflyIII\Models\RuleTrigger;
*/
interface RuleRepositoryInterface
{
/**
* @return int
*/
@@ -46,6 +47,13 @@ interface RuleRepositoryInterface
*/
public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup);
/**
* @param Rule $rule
*
* @return string
*/
public function getPrimaryTrigger(Rule $rule): string;
/**
* @param Rule $rule
*

View File

@@ -7,6 +7,8 @@ namespace FireflyIII\Repositories\RuleGroup;
use Auth;
use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleGroup;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Collection;
/**
@@ -73,6 +75,33 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface
return intval($entry);
}
/**
* @param User $user
*
* @return Collection
*/
public function getRuleGroupsWithRules(User $user): Collection
{
return $user->ruleGroups()
->orderBy('active', 'DESC')
->orderBy('order', 'ASC')
->with(
[
'rules' => function (HasMany $query) {
$query->orderBy('active', 'DESC');
$query->orderBy('order', 'ASC');
},
'rules.ruleTriggers' => function (HasMany $query) {
$query->orderBy('order', 'ASC');
},
'rules.ruleActions' => function (HasMany $query) {
$query->orderBy('order', 'ASC');
},
]
)->get();
}
/**
* @param RuleGroup $ruleGroup
*
@@ -203,5 +232,4 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface
return $ruleGroup;
}
}

View File

@@ -5,6 +5,7 @@ namespace FireflyIII\Repositories\RuleGroup;
use FireflyIII\Models\RuleGroup;
use FireflyIII\User;
use Illuminate\Support\Collection;
/**
@@ -14,6 +15,8 @@ use Illuminate\Support\Collection;
*/
interface RuleGroupRepositoryInterface
{
/**
* @return int
*/
@@ -37,6 +40,13 @@ interface RuleGroupRepositoryInterface
*/
public function getHighestOrderRuleGroup();
/**
* @param User $user
*
* @return Collection
*/
public function getRuleGroupsWithRules(User $user): Collection;
/**
* @param RuleGroup $ruleGroup
*