Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
UnitMeasurementUpdateService
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 update
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Domain\UnitMeasurement\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\UnitMeasurement\UnitMeasurement;
7use App\Models\User;
8use Domain\Integration\Services\IntegrationUpdateService;
9use Domain\UnitMeasurement\DTOs\UnitMeasurementDTO;
10use Exception;
11use Illuminate\Support\Facades\DB;
12
13readonly class UnitMeasurementUpdateService
14{
15
16    /**
17     * @param UnitMeasurementDTO $measurementDTO
18     * @param UnitMeasurement $measurement
19     * @param User $user
20     * @return UnitMeasurement
21     * @throws Exception
22     */
23    public function update(UnitMeasurementDTO $measurementDTO, UnitMeasurement $measurement, User $user): UnitMeasurement
24    {
25        try {
26            DB::beginTransaction();
27
28            $measurement->fill($measurementDTO->toArray());
29            if ($measurement->isDirty()) {
30                $measurement->save();
31            }
32
33            (new IntegrationUpdateService())->update($measurementDTO->integrationUnitMeasurementDTO, $measurement->integration, $user);
34
35            DB::commit();
36        } catch (Exception $exception) {
37            DB::rollBack();
38            throw $exception;
39        }
40
41        ServiceProcessed::dispatch(self::class, $user);
42        return $measurement;
43    }
44}