Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ShortcutResolveService
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 3
110
0.00% covered (danger)
0.00%
0 / 1
 resolve_category
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
20
 resolve_sub_categories_lv1
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
 resolve_sub_categories_lv2
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Http\Services;
4
5use App\Http\Models\Shortcut;
6use App\Http\Models\ShortcutCategory;
7use App\Http\Models\ShortcutSubCategoryLv1;
8use App\Http\Models\ShortcutSubCategoryLv2;
9use Exception;
10use Illuminate\Support\Facades\DB;
11use Illuminate\Support\Facades\Log;
12
13class ShortcutResolveService
14{
15    public function resolve_category($id, $category_id)
16    {
17        $category = ShortcutCategory::find($id);
18
19        if (! $category) {
20            abort(404, 'Category not found');
21        }
22
23        if ($category->is_default) {
24            abort(403, 'Cannot delete default category');
25        }
26
27        $session = DB::getMongoClient()->startSession();
28        $session->startTransaction();
29
30        try {
31            Shortcut::where('category_id', $id)->update([
32                'category_id' => $category_id,
33                'sub_categories_lv1_id' => null,
34                'sub_categories_lv2_id' => null,
35            ]);
36
37            $category->delete();
38
39            $userId = request()->user()->getKey();
40            $obj = new ShortcutCategoryPositionService;
41            $obj->removeCategoryPosition($userId, $id);
42
43            $session->commitTransaction();
44        } catch (Exception $e) {
45            Log::error($e->getMessage());
46            abort(400, 'Error deleting category');
47            $session->abortTransaction();
48        }
49    }
50
51    public function resolve_sub_categories_lv1($id, $default_category_id = '')
52    {
53        $sub_category_lvl_1 = ShortcutSubCategoryLv1::where([
54            '_id' => $id,
55            'user_id' => request()->user()->id,
56        ])->first();
57        if (! $sub_category_lvl_1) {
58            abort(404, 'Category not found');
59        }
60
61        $session = DB::getMongoClient()->startSession();
62        $session->startTransaction();
63
64        try {
65            Shortcut::where('sub_categories_lv1_id', $id)->update([
66                'category_id' => $sub_category_lvl_1->category_id,
67                'sub_categories_lv1_id' => null,
68                'sub_categories_lv2_id' => null,
69            ]);
70
71            $res = $sub_category_lvl_1->delete();
72            $userId = request()->user()->getKey();
73            $obj = new ShortcutCategoryPositionServiceLv1;
74            $obj->removeCategoryPosition($userId, $id);
75            $session->commitTransaction();
76        } catch (Exception $e) {
77            Log::error($e->getMessage());
78            abort(400, 'Error deleting category');
79            $session->abortTransaction();
80        }
81    }
82
83    public function resolve_sub_categories_lv2($id, $default_category_id = '')
84    {
85        $sub_category_lvl_2 = ShortcutSubCategoryLv2::with('subCategoryLv1')->where([
86            '_id' => $id,
87            'user_id' => request()->user()->id,
88        ])->first();
89
90        if (! $sub_category_lvl_2) {
91            abort(404, 'Category not found');
92        }
93
94        $session = DB::getMongoClient()->startSession();
95        $session->startTransaction();
96
97        try {
98            Shortcut::where('sub_categories_lv2_id', $id)->update([
99                'category_id' => $sub_category_lvl_2->subCategoryLv1->category_id,
100                'sub_categories_lv1_id' => $sub_category_lvl_2->subCategoryLv1->id,
101                'sub_categories_lv2_id' => null,
102            ]);
103
104            $sub_category_lvl_2->delete();
105
106            $userId = request()->user()->getKey();
107            $obj = new ShortcutCategoryPositionServiceLv2;
108            $obj->removeCategoryPosition($userId, $id);
109            $session->commitTransaction();
110        } catch (Exception $e) {
111            Log::error($e->getMessage());
112            abort(400, 'Error deleting category');
113            $session->abortTransaction();
114        }
115    }
116}