Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
RequestConcludeService
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 conclude
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
20
 processRequestLog
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\Request\Services;
4
5use Exception;
6
7use Illuminate\Support\Facades\DB;
8
9use App\Events\ServiceProcessed;
10use App\Models\Request\Request;
11use App\Models\User;
12use Domain\Request\DTOs\RequestLogStoreDTO;
13use Domain\Request\Enums\RequestLogOperationEnum;
14use Domain\Request\Enums\RequestStatusEnum;
15use Domain\Request\Exceptions\RequestNotSeparatedException;
16use Throwable;
17
18readonly class RequestConcludeService
19{
20    /**
21     * @param Request $request
22     * @param User $user
23     * @return Request
24     * @throws Exception|Throwable
25     */
26    public function conclude(Request $request, User $user): Request
27    {
28        if (!$request->isSeparated() && !$request->isConcluded()) {
29            return $request;
30        }
31
32        try {
33            DB::beginTransaction();
34
35            $request->setAttribute('status', RequestStatusEnum::CONCLUDE);
36            $request->save();
37
38            $this->processRequestLog($request, $user);
39
40            DB::commit();
41        } catch (Exception $exception) {
42            DB::rollBack();
43            throw $exception;
44        }
45
46        ServiceProcessed::dispatch(self::class, $user);
47        return $request;
48    }
49
50    /**
51     * @param Request $request
52     * @param User $user
53     */
54    private function processRequestLog(
55        Request $request,
56        User $user): void
57    {
58        $RequestLogStoreDTO = new RequestLogStoreDTO([
59            'request'     => $request,
60            'stockIO'     => $request->stockIO,
61            'operation'   => RequestLogOperationEnum::CONCLUDED_REQUEST,
62            'user'        => $user,
63            'detail'      => $request->toJson(),
64            'observation' => "Requisição concluída: ". $request->getKey(),
65        ]);
66
67        (new RequestLogStoreService())->store($RequestLogStoreDTO, $user);
68    }
69}