Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
CompanyController
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 8
156
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 licenses
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 companiesLicenses
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 update
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 info
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 group
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 delete
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 deleteCompanies
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Http\Controllers\v2\Company;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\Admin\Company;
7use App\Http\Requests\DeleteCompaniesRequest;
8use App\Http\Requests\EditCompanyRequest;
9use App\Http\Resources\CompanyInfo;
10use App\Http\Resources\CompanyResource;
11use App\Http\Services\Admin\Companies\CompanyLicensesService;
12use App\Http\Services\Admin\Companies\CompanyService;
13use App\Traits\AccountCenter\Reporting\ChartTrait;
14use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
15use Illuminate\Http\JsonResponse;
16use Illuminate\Http\Request;
17use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
18
19class CompanyController extends Controller
20{
21    use SendsPasswordResetEmails;
22    use ChartTrait;
23
24    public function __construct(
25        private CompanyService $companyService,
26        private CompanyLicensesService $companyLicensesService,
27    ) {}
28
29    public function licenses(Request $request)
30    {
31        $company_id = $request->company_id;
32
33        $company_license = array_values($this->companyLicensesService->getCompanyLicenses($company_id));
34
35        return response()->json([
36            'success' => true,
37            'licenses' => $company_license,
38        ], 200);
39    }
40
41    public function companiesLicenses(): JsonResponse
42    {
43        $companies_licenses = $this->companyLicensesService->getAllCompaniesLicenses();
44
45        return response()->json([
46            'data' => $companies_licenses,
47            'success' => true,
48        ]);
49    }
50
51    public function update(EditCompanyRequest $request, Company $company): JsonResponse
52    {
53        $data = $request->validated();
54        $result = $this->companyService->updateCompany($company, $data['company']);
55
56        return response()->json([
57            'success' => true,
58            'message' => "Company updated",
59            'data' => new CompanyResource($result),
60        ]);
61    }
62
63    public function info(Request $request): JsonResponse
64    {
65        $company = $this->companyService->getCompanyBySlug($request->slug);
66
67        return response()->json([
68            'success' => true,
69            'data' => filled($company) ? new CompanyInfo($company) : [],
70        ]);
71    }
72
73    public function group(Request $request): JsonResponse
74    {
75        $company = $this->companyService->getCompanyBySlug($request->slug);
76        $group = $this->companyService->getGroupBySlug($company->id, $request->group_slug);
77
78        return response()->json([
79            'success' => true,
80            'data' => filled($group) ? $group : [],
81        ]);
82    }
83
84    public function delete(Request $request, Company $company): JsonResponse
85    {
86        $admin = auth()->user();
87
88        if (!$admin instanceof \App\Http\Models\Auth\User) {
89            throw new UnprocessableEntityHttpException("User not authenticated");
90        }
91
92        $this->companyService->deleteCompany($company, $admin);
93
94        return response()->json([
95            'success' => true,
96            'message' => "Company deleted successfully",
97        ]);
98    }
99
100    public function deleteCompanies(DeleteCompaniesRequest $request): JsonResponse
101    {
102        $admin = auth()->user();
103        $data = $request->validated();
104
105        if (!$admin instanceof \App\Http\Models\Auth\User) {
106            throw new UnprocessableEntityHttpException("User not authenticated");
107        }
108
109        $this->companyService->deleteCompanies($data['companies'], $admin);
110
111        return response()->json([
112            'success' => true,
113            'message' => "Companies deleted successfully",
114        ]);
115    }
116}