Skip to content

Commit ca18a7c

Browse files
feat(InvoiceController, MedicalRecordController, DoctorPrescriptionController, PrescriptionController, PatientInfoController): refactor methods to use QueryRequest for validation and improve query handling
1 parent 7a17704 commit ca18a7c

File tree

5 files changed

+56
-38
lines changed

5 files changed

+56
-38
lines changed

app/Http/Controllers/Invoice/InvoiceController.php

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace App\Http\Controllers\Invoice;
44

55
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\QueryRequest;
67
use App\Models\Invoice;
78
use Auth;
89
use Exception;
9-
use Illuminate\Http\Request;
1010
use Inertia\Inertia;
1111
use Log;
1212
use PDF;
@@ -17,14 +17,16 @@ class InvoiceController extends Controller
1717
/**
1818
* Display a listing of all invoices.
1919
*/
20-
public function index(Request $request)
20+
public function index(QueryRequest $request)
2121
{
2222
Log::info('Invoice: Viewed all invoices', ['action_user_id' => Auth::id()]);
2323

24-
$perPage = (int) $request->query('per_page', 10);
25-
$search = trim($request->query('search'));
26-
$sortBy = $request->query('sort_by', 'id');
27-
$sortDir = strtolower($request->query('sort_dir', 'desc')) === 'asc' ? 'asc' : 'desc';
24+
$validated = $request->validated();
25+
26+
$perPage = $validated['per_page'] ?? 10;
27+
$search = trim($validated['search'] ?? '');
28+
$sortBy = $validated['sort_by'] ?? 'id';
29+
$sortDir = $validated['sort_dir'] ?? 'asc';
2830

2931
$allowedSorts = ['id', 'consultation_date', 'patient_info.first_name', 'due_date', 'amount', 'payment_method', 'status'];
3032
if (! in_array($sortBy, $allowedSorts)) {
@@ -38,7 +40,7 @@ public function index(Request $request)
3840
$invoices->leftJoin('patient_info', 'patient_info.id', '=', 'invoices.patient_info_id');
3941
}
4042

41-
$invoices = $invoices->when($request->filled('search'), fn ($q) => $q->whereLike('notes', "%$search%")
43+
$invoices = $invoices->when($search, fn ($q) => $q->whereLike('notes', "%$search%")
4244
->orWhereLike('payment_method', "%$search%")->orWhereLike('status', "%$search%"))
4345
->orWhereHas('patientInfo', fn ($q) => $q->whereLike('first_name', "%$search%")->orWhereLike('last_name', "%$search%"))
4446
->orderBy($sortBy, $sortDir)
@@ -51,24 +53,26 @@ public function index(Request $request)
5153
/**
5254
* Display a listing of the patient's invoices.
5355
*/
54-
public function myInvoices(Request $request)
56+
public function myInvoices(QueryRequest $request)
5557
{
5658
Log::info('Patient Invoice: Viewed own invoices', ['action_user_id' => Auth::id()]);
5759

5860
$patientInfo = Auth::user()->patientInfo;
5961

60-
$perPage = (int) $request->query('per_page', 10);
61-
$search = trim($request->query('search'));
62-
$sortBy = $request->query('sort_by', 'id');
63-
$sortDir = strtolower($request->query('sort_dir', 'desc')) === 'asc' ? 'asc' : 'desc';
62+
$validated = $request->validated();
63+
64+
$perPage = $validated['per_page'] ?? 10;
65+
$search = trim($validated['search'] ?? '');
66+
$sortBy = $validated['sort_by'] ?? 'id';
67+
$sortDir = $validated['sort_dir'] ?? 'asc';
6468

6569
$allowedSorts = ['id', 'consultation_date', 'due_date', 'amount', 'payment_method', 'status'];
6670
if (! in_array($sortBy, $allowedSorts)) {
6771
$sortBy = 'id';
6872
}
6973

7074
$invoices = $patientInfo->invoices()
71-
->when($request->filled('search'), fn ($q) => $q->where(function ($q) use ($search) {
75+
->when($search, fn ($q) => $q->where(function ($q) use ($search) {
7276
$q->whereLike('notes', "%$search%")
7377
->orWhereLike('payment_method', "%$search%")
7478
->orWhereLike('status', "%$search%");

app/Http/Controllers/Medical/MedicalRecordController.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use App\Http\Controllers\Controller;
77
use App\Http\Requests\Medical\MedicalRecordEntryRequest;
88
use App\Http\Requests\Medical\MedicalRecordRequest;
9+
use App\Http\Requests\QueryRequest;
910
use App\Models\MedicalRecord;
1011
use App\Models\MedicalRecordEntry;
1112
use Auth;
@@ -153,9 +154,11 @@ public function create()
153154
/**
154155
* Display the specified resource.
155156
*/
156-
public function show(MedicalRecord $medicalRecord, Request $request)
157+
public function show(MedicalRecord $medicalRecord, QueryRequest $request)
157158
{
158-
$search = trim($request->query('search'));
159+
$validated = $request->validated();
160+
161+
$search = trim($validated['search'] ?? '');
159162

160163
Log::info('Medical Records: Viewed medical record', ['action_user_id' => Auth::id(), 'medical_record_id' => $medicalRecord->id]);
161164

@@ -168,7 +171,7 @@ public function show(MedicalRecord $medicalRecord, Request $request)
168171

169172
$entries = MedicalRecordEntry::select($columns)
170173
->whereMedicalRecordId($medicalRecord->id)
171-
->when($request->filled('search'), fn ($q) => $q->where(function ($q2) use ($search, $isSql) {
174+
->when($search, fn ($q) => $q->where(function ($q2) use ($search, $isSql) {
172175
if ($isSql) {
173176
$booleanQuery = Helpers::buildBooleanQuery($search);
174177
$q2->whereFullText(['title', 'content_html'], $booleanQuery, ['mode' => 'boolean']);

app/Http/Controllers/Medical/Prescription/DoctorPrescriptionController.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
use App\Common\Helpers;
66
use App\Http\Controllers\Controller;
77
use App\Http\Requests\Medical\PrescriptionRequest;
8+
use App\Http\Requests\QueryRequest;
89
use App\Models\EmployeeInfo;
910
use App\Models\PatientInfo;
1011
use App\Models\Prescription;
1112
use Auth;
1213
use DB;
1314
use Exception;
14-
use Illuminate\Http\Request;
1515
use Inertia\Inertia;
1616
use Log;
1717

@@ -27,18 +27,20 @@ public function __construct()
2727
/**
2828
* Display a listing of the resource.
2929
*/
30-
public function index(EmployeeInfo $doctor, Request $request)
30+
public function index(EmployeeInfo $doctor, QueryRequest $request)
3131
{
3232
if (Auth::user()->id !== $doctor->user_id) {
3333
return to_route('prescriptions.index', Auth::user()->employeeInfo->id);
3434
}
3535

3636
Log::info('Doctor Prescription: Viewed issued prescriptions', ['action_user_id' => Auth::id()]);
3737

38-
$perPage = (int) $request->query('per_page', 10);
39-
$search = trim($request->query('search'));
40-
$sortBy = $request->query('sort_by', 'id');
41-
$sortDir = strtolower($request->query('sort_dir', 'desc')) === 'asc' ? 'asc' : 'desc';
38+
$validated = $request->validated();
39+
40+
$perPage = $validated['per_page'] ?? 10;
41+
$search = trim($validated['search'] ?? '');
42+
$sortBy = $validated['sort_by'] ?? 'id';
43+
$sortDir = $validated['sort_dir'] ?? 'asc';
4244

4345
$allowedSorts = ['id', 'patient_info.first_name', 'patient_info.last_name', 'date_issued', 'date_expires', 'is_valid', 'updated_at'];
4446
if (! in_array($sortBy, $allowedSorts)) {
@@ -66,7 +68,7 @@ public function index(EmployeeInfo $doctor, Request $request)
6668
$query->leftJoin('patient_info', 'patient_info.id', '=', 'prescriptions.patient_info_id');
6769
}
6870

69-
$query->when($request->filled('search'), function ($qr) use ($search, $isSql) {
71+
$query->when($search, function ($qr) use ($search, $isSql) {
7072
if ($isSql) {
7173
$booleanQuery = Helpers::buildBooleanQuery($search);
7274
$qr->whereFullText('prescription_details_html', $booleanQuery, ['mode' => 'boolean'])

app/Http/Controllers/Medical/Prescription/PrescriptionController.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
use App\Common\Helpers;
66
use App\Http\Controllers\Controller;
7+
use App\Http\Requests\QueryRequest;
78
use App\Models\Prescription;
89
use Auth;
910
use Barryvdh\DomPDF\Facade\Pdf;
1011
use DB;
1112
use Exception;
12-
use Illuminate\Http\Request;
1313
use Illuminate\Http\Response;
1414
use Inertia\Inertia;
1515
use Log;
@@ -27,16 +27,18 @@ public function __construct()
2727
/**
2828
* Display a listing of the requesting user prescriptions.
2929
*/
30-
public function myPrescriptions(Request $request)
30+
public function myPrescriptions(QueryRequest $request)
3131
{
3232
Log::info('Patient Prescription: Viewed own prescriptions', ['action_user_id' => Auth::id()]);
3333

3434
$user = Auth::user();
3535

36-
$perPage = (int) $request->query('per_page', 10);
37-
$search = trim($request->query('search'));
38-
$sortBy = $request->query('sort_by', 'id');
39-
$sortDir = strtolower($request->query('sort_dir', 'desc')) === 'asc' ? 'asc' : 'desc';
36+
$validated = $request->validated();
37+
38+
$perPage = $validated['per_page'] ?? 10;
39+
$search = trim($validated['search'] ?? '');
40+
$sortBy = $validated['sort_by'] ?? 'id';
41+
$sortDir = $validated['sort_dir'] ?? 'asc';
4042

4143
$allowedSorts = ['id', 'employee_info.first_name', 'employee_info.specialization', 'date_issued', 'date_expires', 'updated_at'];
4244
if (! in_array($sortBy, $allowedSorts)) {
@@ -64,7 +66,7 @@ public function myPrescriptions(Request $request)
6466
$query->leftJoin('employee_info', 'employee_info.id', '=', 'prescriptions.employee_info_id');
6567
}
6668

67-
$query->when($request->filled('search'), function ($qr) use ($search, $isSql) {
69+
$query->when($search, function ($qr) use ($search, $isSql) {
6870
if ($isSql) {
6971
$booleanQuery = Helpers::buildBooleanQuery($search);
7072
$qr->whereFullText('prescription_details_html', $booleanQuery, ['mode' => 'boolean'])

app/Http/Controllers/Patient/PatientInfoController.php

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Common\Helpers;
66
use App\Http\Controllers\Controller;
77
use App\Http\Requests\Patient\PatientRequest;
8+
use App\Http\Requests\QueryRequest;
89
use App\Mail\AccountAssociationMail;
910
use App\Mail\NewAccountMail;
1011
use App\Models\PatientInfo;
@@ -65,7 +66,7 @@ public function storePartial(PatientRequest $request)
6566
/**
6667
* Search for patients based on query parameters.
6768
*/
68-
public function search(Request $request)
69+
public function search(QueryRequest $request)
6970
{
7071
if (Auth::user()->hasRole('Patient')) {
7172
return to_route('dashboard')->with('error', 'You do not have permission to edit this patient information.');
@@ -74,7 +75,10 @@ public function search(Request $request)
7475
$query = PatientInfo::select(['id', 'user_id', 'first_name', 'last_name', 'date_of_birth', 'phone_number']);
7576

7677
if ($request->filled('search')) {
77-
$searchTerm = trim($request->query('search'));
78+
$validated = $request->validated();
79+
80+
$searchTerm = trim($validated['search'] ?? '');
81+
7882
$isSql = $this->isSqlDriver;
7983
$booleanQuery = Helpers::buildBooleanQuery($searchTerm);
8084

@@ -173,8 +177,8 @@ public function storeNewAccount(Request $request, PatientInfo $patientInfo)
173177
}
174178

175179
$request->validate([
176-
'name' => 'required|string|max:255|unique:users,name',
177-
'email' => 'required|string|email|max:255|unique:users,email',
180+
'name' => ['required', 'string', 'between:5,255', 'unique:users,name'],
181+
'email' => ['required', 'string', 'email', 'between:5,255', 'unique:users,email'],
178182
]);
179183

180184
$genPassword = Str::random(12);
@@ -213,7 +217,7 @@ public function associateAccount(Request $request, PatientInfo $patientInfo)
213217
}
214218

215219
$request->validate([
216-
'email' => 'required|exists:users,email|unique:users,patient_info_id',
220+
'email' => ['required', 'exists:users,email', 'unique:users,patient_info_id'],
217221
]);
218222

219223
try {
@@ -241,14 +245,17 @@ public function associateAccount(Request $request, PatientInfo $patientInfo)
241245
/**
242246
* Simple search for patients (for FETCH/AXIOS requests).
243247
*/
244-
public function simpleSearch(Request $request)
248+
public function simpleSearch(QueryRequest $request)
245249
{
246-
$search = trim($request->query('q'));
250+
$validated = $request->validated();
251+
252+
$search = trim($validated['q'] ?? '');
253+
247254
$medicalRecordIsNull = $request->get('medical_record_is_null', FILTER_VALIDATE_BOOLEAN);
248255

249256
$isSql = $this->isSqlDriver;
250257

251-
$patients = PatientInfo::when($request->filled('q'), function ($q) use ($isSql, $search) {
258+
$patients = PatientInfo::when($search, function ($q) use ($isSql, $search) {
252259
if ($isSql) {
253260
$booleanQuery = Helpers::buildBooleanQuery($search);
254261
$q->whereFullText(['first_name', 'last_name', 'phone_number', 'address', 'insurance_company', 'emergency_contact_name'], $booleanQuery, ['mode' => 'boolean']);

0 commit comments

Comments
 (0)