Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
76.92% covered (warning)
76.92%
10 / 13
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
TransferTaskProductStoreService
76.92% covered (warning)
76.92%
10 / 13
0.00% covered (danger)
0.00%
0 / 1
2.05
0.00% covered (danger)
0.00%
0 / 1
 store
76.92% covered (warning)
76.92%
10 / 13
0.00% covered (danger)
0.00%
0 / 1
2.05
1<?php
2
3namespace Domain\TransferTask\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\TransferTask\TransferTask;
7use App\Models\TransferTask\TransferTaskProduct;
8use App\Models\User;
9use Domain\TransferTask\DTOs\TransferTaskProductDTO;
10use Illuminate\Support\Facades\DB;
11use Throwable;
12
13readonly class TransferTaskProductStoreService
14{
15
16    /**
17     * @param TransferTaskProductDTO $productDTO
18     * @param TransferTask $transferTask
19     * @param User $user
20     * @return TransferTaskProduct
21     * @throws Throwable
22     */
23    public function store(TransferTaskProductDTO $productDTO, TransferTask $transferTask, User $user): TransferTaskProduct
24    {
25        try {
26            DB::beginTransaction();
27
28            $product = new TransferTaskProduct();
29            $product->fill($productDTO->toArray());
30            $product->product()->associate($productDTO->product);
31            $product->suggestionOrigin()->associate($productDTO->suggestionOrigin);
32            $product->suggestionDestination()->associate($productDTO->suggestionDestination);
33            $transferTask->TransferTaskProducts()->save($product);
34
35            DB::commit();
36        } catch (Throwable $throwable) {
37            DB::rollBack();
38            throw $throwable;
39        }
40
41        ServiceProcessed::dispatch(self::class, $user);
42        return $product;
43    }
44
45}