Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
75.00% covered (warning)
75.00%
9 / 12
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
AddressOrderGroupUpdateService
75.00% covered (warning)
75.00%
9 / 12
0.00% covered (danger)
0.00%
0 / 1
2.06
0.00% covered (danger)
0.00%
0 / 1
 update
75.00% covered (warning)
75.00%
9 / 12
0.00% covered (danger)
0.00%
0 / 1
2.06
1<?php
2
3namespace Domain\Address\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\Address\AddressOrderGroup;
7use App\Models\User;
8use Domain\Address\DTOs\AddressOrderGroupDTO;
9use Illuminate\Support\Facades\DB;
10use Throwable;
11
12readonly class AddressOrderGroupUpdateService
13{
14    /**
15     * @param AddressOrderGroupDTO $addressOrderGroupDTO
16     * @param AddressOrderGroup $addressOrderGroup
17     * @param User $user
18     * @return AddressOrderGroup
19     * @throws Throwable
20     */
21    public function update(AddressOrderGroupDTO $addressOrderGroupDTO, AddressOrderGroup $addressOrderGroup, User $user): AddressOrderGroup
22    {
23        try {
24            DB::beginTransaction();
25            $current = $addressOrderGroup->getAttribute('order');
26
27            $addressOrderGroup->fill($addressOrderGroupDTO->toArray());
28            $addressOrderGroup->team()->addSelect($addressOrderGroupDTO->team);
29            $addressOrderGroup->save();
30
31            (new AddressOrderGroupProcessOrderService($addressOrderGroup, $user))->update($current);
32
33            DB::commit();
34        } catch (Throwable $throwable) {
35            DB::rollBack();
36            throw $throwable;
37        }
38
39        ServiceProcessed::dispatch(self::class, $user);
40        return $addressOrderGroup;
41    }
42}