Passed
Push — main ( eeb558...207cac )
by Thierry
05:30
created

ChargeValidator::amountFields()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Siak\Tontine\Validation\Guild;
4
5
use Illuminate\Support\Facades\Validator;
6
use Illuminate\Validation\Rule;
7
use Siak\Tontine\Service\LocaleService;
8
use Siak\Tontine\Validation\AbstractValidator;
9
use Siak\Tontine\Validation\Traits\ValidationTrait;
10
use Siak\Tontine\Validation\ValidationException;
11
12
class ChargeValidator extends AbstractValidator
13
{
14
    use ValidationTrait;
15
16
    /**
17
     * @param LocaleService $localeService
18
     */
19
    public function __construct(private LocaleService $localeService)
20
    {}
21
22
    /**
23
     * @return array<string>
24
     */
25
    protected function amountFields(): array
26
    {
27
        return ['amount'];
28
    }
29
30
    /**
31
     * @param array $values
32
     *
33
     * @return array
34
     */
35
    public function validateItem(array $values): array
36
    {
37
        $validator = Validator::make($this->values($values), [
38
            'type' => 'required|integer|between:0,1',
39
            'period' => 'required|integer|between:0,3',
40
            'name' => 'required|string|min:1',
41
            'fixed' => [
42
                Rule::requiredIf((int)$values['type'] === 0 && (int)$values['period'] > 0),
43
                'in:1',
44
                'exclude',
45
            ],
46
            'amount' => $this->amountIfRule('fixed'),
47
        ]);
48
        if($validator->fails())
49
        {
50
            throw new ValidationException($validator);
51
        }
52
53
        $validated = $validator->validated();
54
        $validated['amount'] = empty($values['fixed']) ? 0 :
55
            $this->localeService->convertMoneyToInt((float)$validated['amount']);
56
        $validated['lendable'] = isset($values['lendable']);
57
58
        return $validated;
59
    }
60
}
61