Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
ProductPriorityConfigurationService
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
1 / 1
 update
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace Domain\Product\Services;
4
5use App\Models\User;
6use App\Models\Item\Item;
7use App\Models\Product\Product;
8use App\Models\Address\Address;
9
10use App\Events\ServiceProcessed;
11
12use Domain\Product\DTOs\ProductPriorityConfigurationDTO;
13use Domain\Item\Exceptions\ItemRelationExistsException;
14
15readonly class ProductPriorityConfigurationService
16{
17    public function update(
18      ProductPriorityConfigurationDTO $productPriorityConfigurationDTO,
19      Product $product,
20      User $user
21    ): Product {
22
23        $count = Item::where('product_id', $product->id)
24            ->where('itemable_type', Address::class)
25            ->count();
26
27        if($count > 0){
28            throw new ItemRelationExistsException(
29                __('This product already have an existing output configuration.')
30            );
31        }
32
33        $product->fill($productPriorityConfigurationDTO->toArray());
34        if ($product->isDirty()) {
35            $product->save();
36        }
37
38        ServiceProcessed::dispatch(self::class, $user);
39        return $product;
40    }
41}