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