koel/app/Factories/SmartPlaylistRuleParameterFactory.php

36 lines
1.3 KiB
PHP
Raw Normal View History

<?php
namespace App\Factories;
use App\Models\Rule;
2021-06-05 10:47:56 +00:00
use Webmozart\Assert\Assert;
class SmartPlaylistRuleParameterFactory
{
/**
2020-12-22 20:11:22 +00:00
* @param array<mixed> $value
*
2020-12-22 20:11:22 +00:00
* @return array<string>
*/
public function createParameters(string $model, string $operator, array $value): array
{
$ruleParameterMap = [
2021-06-05 10:47:56 +00:00
Rule::OPERATOR_BEGINS_WITH => [$model, 'LIKE', "$value[0]%"],
Rule::OPERATOR_ENDS_WITH => [$model, 'LIKE', "%$value[0]"],
Rule::OPERATOR_IS => [$model, '=', $value[0]],
2020-09-06 21:20:42 +00:00
Rule::OPERATOR_IS_NOT => [$model, '<>', $value[0]],
2021-06-05 10:47:56 +00:00
Rule::OPERATOR_CONTAINS => [$model, 'LIKE', "%$value[0]%"],
Rule::OPERATOR_NOT_CONTAIN => [$model, 'NOT LIKE', "%$value[0]%"],
Rule::OPERATOR_IS_LESS_THAN => [$model, '<', $value[0]],
2020-09-06 21:20:42 +00:00
Rule::OPERATOR_IS_GREATER_THAN => [$model, '>', $value[0]],
Rule::OPERATOR_IS_BETWEEN => [$model, $value],
2021-06-05 10:47:56 +00:00
Rule::OPERATOR_NOT_IN_LAST => static fn (): array => [$model, '<', now()->subDays($value[0])],
Rule::OPERATOR_IN_LAST => static fn (): array => [$model, '>=', now()->subDays($value[0])],
];
2021-06-05 10:47:56 +00:00
Assert::keyExists($ruleParameterMap, $operator);
2019-11-30 08:11:26 +00:00
return is_array($ruleParameterMap[$operator]) ? $ruleParameterMap[$operator] : $ruleParameterMap[$operator]();
}
}