-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathAgentWebController.php
More file actions
122 lines (104 loc) · 4.29 KB
/
AgentWebController.php
File metadata and controls
122 lines (104 loc) · 4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
namespace App\Http\Controllers;
use App\Http\Requests\CreateAgentRequest;
use App\Http\Resources\ApiResource;
use App\Models\CompanyDatabase;
use App\Services\AddressesService;
use App\Services\AgentService;
use App\Services\CountryService;
use App\Services\DatabaseProxyService;
use App\Services\PersonAddressService;
use App\Services\PersonService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Tymon\JWTAuth\JWTGuard;
class AgentWebController extends Controller {
public function __construct(
private AgentService $agentService,
private AddressesService $addressService,
private PersonService $personService,
private PersonAddressService $personAddressService,
private CountryService $countryService,
private DatabaseProxyService $databaseProxyService,
) {}
public function index(Request $request): ApiResource {
$limit = $request->input('per_page');
return ApiResource::make($this->agentService->getAll($limit));
}
public function show(int $agentId, Request $request): ApiResource {
return ApiResource::make($this->agentService->getById($agentId));
}
public function store(CreateAgentRequest $request): ApiResource {
$addressData = $this->addressService->createAddressDataFromRequest($request);
$personData = $this->personService->createPersonDataFromRequest($request);
$country = $this->countryService->getByCode($request->get('nationality'));
$agentData = [
'password' => $request['password'],
'email' => $request['email'],
'mini_grid_id' => $request['village_id'],
'agent_commission_id' => $request['agent_commission_id'],
'mobile_device_id' => '-',
'fire_base_token' => '-',
'connection' => ' ', // TODO: solve this. //auth('api')->user()->company->database->database_name
];
/** @var JWTGuard $guard */
$guard = auth('api');
$companyId = $guard->payload()->get('companyId');
$companyDatabase = CompanyDatabase::query()->where('company_id', $companyId)->firstOrFail();
$databaseProxyData = [
'email' => $request['email'],
'fk_company_id' => $companyId,
'fk_company_database_id' => $companyDatabase->getId(),
];
$this->databaseProxyService->create($databaseProxyData);
return ApiResource::make($this->agentService->create(
$agentData,
$addressData,
$personData,
$country,
$this->addressService,
$this->countryService,
$this->personService,
$this->personAddressService
));
}
public function update(int $agentId, Request $request): ApiResource {
$agent = $this->agentService->getById($agentId);
$agentData = $request->all();
return ApiResource::make($this->agentService->update($agent, $agentData));
}
public function destroy(int $agentId, Request $request): ApiResource {
$agent = $this->agentService->getById($agentId);
$deleted = $this->agentService->delete($agent);
return ApiResource::make([
'message' => $deleted ? 'Agent deleted successfully' : 'Failed to delete agent',
'status_code' => $deleted ? 200 : 400,
]);
}
public function search(Request $request): ApiResource {
$term = $request->input('term');
$paginate = $request->input('paginate', 1);
return ApiResource::make($this->agentService->searchAgent($term, $paginate));
}
public function resetPassword(Request $request, Response $response): Response {
$responseMessage = $this->agentService->resetPassword($request->input('email'));
if ($responseMessage === 'Invalid email.') {
return $response->setStatusCode(422)->setContent(
[
'data' => [
'message' => $responseMessage,
'status_code' => 400,
],
]
);
}
return $response->setStatusCode(200)->setContent(
[
'data' => [
'message' => $responseMessage,
'status_code' => 200,
],
]
);
}
}