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
AddressOrderGroupStoreService
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
 store
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 AddressOrderGroupStoreService
13{
14    /**
15     * @param AddressOrderGroupDTO $addressOrderGroupDTO
16     * @param User $user
17     * @return AddressOrderGroup
18     * @throws Throwable
19     */
20    public function store(AddressOrderGroupDTO $addressOrderGroupDTO, User $user): AddressOrderGroup
21    {
22        try {
23            DB::beginTransaction();
24
25            $addressOrderGroup = new AddressOrderGroup();
26            $addressOrderGroup->fill($addressOrderGroupDTO->toArray());
27            $addressOrderGroup->team()->associate($addressOrderGroupDTO->team);
28            $addressOrderGroup->save();
29
30            (new AddressOrderGroupProcessOrderService($addressOrderGroup, $user))->store();
31
32            DB::commit();
33        } catch (Throwable $throwable) {
34            DB::rollBack();
35            throw $throwable;
36        }
37
38        ServiceProcessed::dispatch(self::class, $user);
39        return $addressOrderGroup;
40    }
41}