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