Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
70.00% covered (warning)
70.00%
7 / 10
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
AddressOrderDestroyService
70.00% covered (warning)
70.00%
7 / 10
0.00% covered (danger)
0.00%
0 / 1
2.11
0.00% covered (danger)
0.00%
0 / 1
 store
70.00% covered (warning)
70.00%
7 / 10
0.00% covered (danger)
0.00%
0 / 1
2.11
1<?php
2
3namespace Domain\Address\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\Address\AddressOrderGroup;
7use App\Models\User;
8use Domain\Address\DTOs\AddressOrderDestroyDTO;
9use Illuminate\Support\Facades\DB;
10use Throwable;
11
12readonly class AddressOrderDestroyService
13{
14
15    /**
16     * @param AddressOrderDestroyDTO $addressOrderDTO
17     * @param AddressOrderGroup $addressOrderGroup
18     * @param User $user
19     * @return void
20     * @throws Throwable
21     */
22    public function store(AddressOrderDestroyDTO $addressOrderDTO, AddressOrderGroup $addressOrderGroup, User $user): void
23    {
24        try {
25            DB::beginTransaction();
26
27            $addressOrderGroup->orders()->whereIn('address_id', $addressOrderDTO->addresses)->delete();
28
29            DB::select('update public.address_orders a
30                        set "order" = newOrderTable.newOrder
31                        from (select id, row_number() over (order by "order") as newOrder from public.address_orders a where a.address_order_grouper_id = ?) as newOrderTable
32                        where a.id = newOrderTable.id', [$addressOrderGroup->getKey()]
33            );
34
35            DB::commit();
36        } catch (Throwable $throwable) {
37            DB::rollBack();
38            throw $throwable;
39        }
40
41        ServiceProcessed::dispatch(self::class, $user);
42    }
43}