-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathMaintenanceUserController.php
More file actions
64 lines (54 loc) · 2.29 KB
/
MaintenanceUserController.php
File metadata and controls
64 lines (54 loc) · 2.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
<?php
namespace App\Http\Controllers;
use App\Http\Requests\MaintenanceRequest;
use App\Http\Resources\ApiResource;
use App\Models\Person\Person;
use App\Plugins\BulkRegistration\Services\AddressService;
use App\Services\PersonService;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
class MaintenanceUserController extends Controller {
public function __construct(
private Person $person,
private PersonService $personService,
private AddressService $addressService,
) {}
public function index(): ApiResource {
$maintenance_user_list = $this->personService->getAllMaintenanceUsers();
return new ApiResource($maintenance_user_list);
}
public function store(MaintenanceRequest $request): JsonResponse {
$phone = $request->get('phone');
try {
$person = $this->person->newQuery()->whereHas(
'addresses',
static function ($q) use ($phone) {
$q->where('phone', $phone);
}
)->firstOrFail();
} catch (ModelNotFoundException) {
$personData = $this->personService->createPersonDataFromRequest($request);
// Create maintenance person with mini_grid_id if provided
if ($request->has('mini_grid_id')) {
$personData['mini_grid_id'] = $request->get('mini_grid_id');
$person = $this->personService->createMaintenancePerson($personData);
} else {
$person = $this->personService->createMaintenancePerson($personData);
}
$this->addressService->createForPerson($person->getId(), $request->getVillageId(), $request->getPhone(), $request->getEmail(), $request->getStreet(), true);
}
// Ensure the person is marked as maintenance type
if ($person->type !== 'maintenance') {
$person->type = 'maintenance';
if ($request->has('mini_grid_id') && !$person->mini_grid_id) {
$person->mini_grid_id = $request->get('mini_grid_id');
}
$person->save();
}
$maintenanceUser = $person;
return
(new ApiResource($maintenanceUser))
->response()
->setStatusCode(201);
}
}