Skip to content
This repository was archived by the owner on Oct 24, 2025. It is now read-only.

Commit d2204b3

Browse files
committed
feat(meilisearch): object search endpoints
1 parent 640c99c commit d2204b3

9 files changed

Lines changed: 191 additions & 0 deletions

File tree

app/Http/Controllers/AdminContractController.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,38 @@ public function contract_list(Request $request): JsonResponse
208208
]);
209209
}
210210

211+
/**
212+
* Search contracts.
213+
*
214+
* @param Request $request
215+
*
216+
* @return JsonResponse
217+
*/
218+
public function contract_search(Request $request): JsonResponse
219+
{
220+
$query = Contract::search($request->term);
221+
222+
if (! empty($request->user_id)) {
223+
$query = $query->where('user_id', $request->user_id);
224+
}
225+
226+
try {
227+
return response()->json(
228+
$query
229+
->get()
230+
->transform(function (User $user) {
231+
return [
232+
'label' => $user->number,
233+
'value' => $user->id,
234+
];
235+
})
236+
->toArray()
237+
);
238+
} catch (Exception $e) {
239+
return response()->json([]);
240+
}
241+
}
242+
211243
/**
212244
* Create a new contract.
213245
*

app/Http/Controllers/AdminCustomerController.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use App\Models\Profile\ProfilePhone;
1818
use App\Models\User;
1919
use Carbon\Carbon;
20+
use Exception;
2021
use Illuminate\Contracts\Support\Renderable;
2122
use Illuminate\Database\Eloquent\Builder;
2223
use Illuminate\Http\JsonResponse;
@@ -113,6 +114,33 @@ public function customer_list(Request $request): JsonResponse
113114
]);
114115
}
115116

117+
/**
118+
* Search customers.
119+
*
120+
* @param Request $request
121+
*
122+
* @return JsonResponse
123+
*/
124+
public function customer_search(Request $request): JsonResponse
125+
{
126+
try {
127+
return response()->json(
128+
User::search($request->term)
129+
->where('role', 'customer')
130+
->get()
131+
->transform(function (User $user) {
132+
return [
133+
'label' => $user->number,
134+
'value' => $user->id,
135+
];
136+
})
137+
->toArray()
138+
);
139+
} catch (Exception $e) {
140+
return response()->json([]);
141+
}
142+
}
143+
116144
/**
117145
* Show detailed overview of a customer.
118146
*

app/Http/Controllers/AdminInvoiceCustomerController.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,38 @@ public function invoice_list(Request $request): JsonResponse
231231
]);
232232
}
233233

234+
/**
235+
* Search invoices.
236+
*
237+
* @param Request $request
238+
*
239+
* @return JsonResponse
240+
*/
241+
public function invoice_search(Request $request): JsonResponse
242+
{
243+
$query = Invoice::search($request->term);
244+
245+
if (! empty($request->user_id)) {
246+
$query = $query->where('user_id', $request->user_id);
247+
}
248+
249+
try {
250+
return response()->json(
251+
$query
252+
->get()
253+
->transform(function (User $user) {
254+
return [
255+
'label' => $user->number,
256+
'value' => $user->id,
257+
];
258+
})
259+
->toArray()
260+
);
261+
} catch (Exception $e) {
262+
return response()->json([]);
263+
}
264+
}
265+
234266
/**
235267
* Create a new invoice.
236268
*

app/Http/Controllers/AdminInvoiceSupplierController.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use App\Models\ImapInbox;
1919
use App\Models\User;
2020
use Carbon\Carbon;
21+
use Exception;
2122
use Illuminate\Contracts\Support\Renderable;
2223
use Illuminate\Database\Eloquent\Builder;
2324
use Illuminate\Http\JsonResponse;
@@ -229,6 +230,38 @@ public function invoice_list(Request $request): JsonResponse
229230
]);
230231
}
231232

233+
/**
234+
* Search invoices.
235+
*
236+
* @param Request $request
237+
*
238+
* @return JsonResponse
239+
*/
240+
public function invoice_search(Request $request): JsonResponse
241+
{
242+
$query = Invoice::search($request->term);
243+
244+
if (! empty($request->user_id)) {
245+
$query = $query->where('user_id', $request->user_id);
246+
}
247+
248+
try {
249+
return response()->json(
250+
$query
251+
->get()
252+
->transform(function (User $user) {
253+
return [
254+
'label' => $user->number,
255+
'value' => $user->id,
256+
];
257+
})
258+
->toArray()
259+
);
260+
} catch (Exception $e) {
261+
return response()->json([]);
262+
}
263+
}
264+
232265
/**
233266
* Create a new invoice.
234267
*

app/Http/Controllers/AdminSupplierController.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use App\Models\Profile\ProfilePhone;
1818
use App\Models\User;
1919
use Carbon\Carbon;
20+
use Exception;
2021
use Illuminate\Contracts\Support\Renderable;
2122
use Illuminate\Database\Eloquent\Builder;
2223
use Illuminate\Http\JsonResponse;
@@ -114,6 +115,33 @@ public function supplier_list(Request $request): JsonResponse
114115
]);
115116
}
116117

118+
/**
119+
* Search suppliers.
120+
*
121+
* @param Request $request
122+
*
123+
* @return JsonResponse
124+
*/
125+
public function supplier_search(Request $request): JsonResponse
126+
{
127+
try {
128+
return response()->json(
129+
User::search($request->term)
130+
->where('role', 'supplier')
131+
->get()
132+
->transform(function (User $user) {
133+
return [
134+
'label' => $user->number,
135+
'value' => $user->id,
136+
];
137+
})
138+
->toArray()
139+
);
140+
} catch (Exception $e) {
141+
return response()->json([]);
142+
}
143+
}
144+
117145
/**
118146
* Show detailed overview of a supplier.
119147
*

app/Models/Accounting/Contract/Contract.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ public function toSearchableArray(): array
148148
];
149149
}
150150

151+
/**
152+
* Get the searchable data array for the model.
153+
*
154+
* @return array<string>
155+
*/
156+
public function filterableAttributes()
157+
{
158+
return ['user_id', '__soft_deleted'];
159+
}
160+
151161
/**
152162
* Get processed contract number.
153163
*

app/Models/Accounting/Invoice/Invoice.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,16 @@ public function toSearchableArray(): array
200200
];
201201
}
202202

203+
/**
204+
* Get the searchable data array for the model.
205+
*
206+
* @return array<string>
207+
*/
208+
public function filterableAttributes()
209+
{
210+
return ['user_id', '__soft_deleted'];
211+
}
212+
203213
/**
204214
* Get email address to send invoices to.
205215
*

app/Models/User.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,16 @@ public function toSearchableArray(): array
248248
];
249249
}
250250

251+
/**
252+
* Get the searchable data array for the model.
253+
*
254+
* @return array<string>
255+
*/
256+
public function filterableAttributes()
257+
{
258+
return ['role', '__soft_deleted'];
259+
}
260+
251261
/**
252262
* Get contact email address.
253263
*

routes/web.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@
290290
Route::get('/invoices/customers', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_index'])->name('admin.invoices.customers');
291291
Route::get('/invoices/customers/list/{user_id}', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_list'])->name('admin.invoices.customers.list');
292292
Route::get('/invoices/customers/list', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_list'])->name('admin.invoices.customers.list');
293+
Route::get('/invoices/customers/search/{user_id}', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_search'])->name('admin.invoices.customers.search');
294+
Route::get('/invoices/customers/search', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_search'])->name('admin.invoices.customers.search');
293295
Route::post('/invoices/customers/add', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_add'])->name('admin.invoices.customers.add');
294296
Route::post('/invoices/customers/{id}/update', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_update'])->name('admin.invoices.customers.update');
295297
Route::get('/invoices/customers/{id}/delete', [App\Http\Controllers\AdminInvoiceCustomerController::class, 'invoice_delete'])->name('admin.invoices.customers.delete');
@@ -310,6 +312,8 @@
310312
Route::get('/invoices/suppliers', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_index'])->name('admin.invoices.suppliers');
311313
Route::get('/invoices/suppliers/list/{user_id}', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_list'])->name('admin.invoices.suppliers.list');
312314
Route::get('/invoices/suppliers/list', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_list'])->name('admin.invoices.suppliers.list');
315+
Route::get('/invoices/suppliers/search/{user_id}', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_search'])->name('admin.invoices.suppliers.search');
316+
Route::get('/invoices/suppliers/search', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_search'])->name('admin.invoices.suppliers.search');
313317
Route::post('/invoices/suppliers/add', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_add'])->name('admin.invoices.suppliers.add');
314318
Route::post('/invoices/suppliers/{id}/update', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_update'])->name('admin.invoices.suppliers.update');
315319
Route::get('/invoices/suppliers/{id}/delete', [App\Http\Controllers\AdminInvoiceSupplierController::class, 'invoice_delete'])->name('admin.invoices.suppliers.delete');
@@ -336,6 +340,8 @@
336340
Route::get('/contracts', [App\Http\Controllers\AdminContractController::class, 'contract_index'])->name('admin.contracts');
337341
Route::get('/contracts/list/{user_id}', [App\Http\Controllers\AdminContractController::class, 'contract_list'])->name('admin.contracts.list.extended');
338342
Route::get('/contracts/list', [App\Http\Controllers\AdminContractController::class, 'contract_list'])->name('admin.contracts.list');
343+
Route::get('/contracts/search/{user_id}', [App\Http\Controllers\AdminContractController::class, 'contract_search'])->name('admin.contracts.search.extended');
344+
Route::get('/contracts/search', [App\Http\Controllers\AdminContractController::class, 'contract_search'])->name('admin.contracts.search');
339345
Route::post('/contracts/add', [App\Http\Controllers\AdminContractController::class, 'contract_add'])->name('admin.contracts.add');
340346
Route::post('/contracts/{id}/update', [App\Http\Controllers\AdminContractController::class, 'contract_update'])->name('admin.contracts.update');
341347
Route::get('/contracts/{id}/delete', [App\Http\Controllers\AdminContractController::class, 'contract_delete'])->name('admin.contracts.delete');
@@ -357,6 +363,7 @@
357363

358364
Route::get('/customers', [App\Http\Controllers\AdminCustomerController::class, 'customer_index'])->name('admin.customers');
359365
Route::get('/customers/list', [App\Http\Controllers\AdminCustomerController::class, 'customer_list'])->name('admin.customers.list');
366+
Route::get('/customers/search', [App\Http\Controllers\AdminCustomerController::class, 'customer_search'])->name('admin.customers.search');
360367
Route::post('/customers/create', [App\Http\Controllers\AdminCustomerController::class, 'customer_create'])->name('admin.customers.create');
361368
Route::get('/customers/{user_id}', [App\Http\Controllers\AdminCustomerController::class, 'customer_profile_index'])->name('admin.customers.profile');
362369
Route::get('/customers/{user_id}/twofactor/disable', [App\Http\Controllers\AdminCustomerController::class, 'customer_profile_2fa_disable'])->name('admin.customers.profile.2fa.disable');
@@ -390,6 +397,7 @@
390397

391398
Route::get('/suppliers', [App\Http\Controllers\AdminSupplierController::class, 'supplier_index'])->name('admin.suppliers');
392399
Route::get('/suppliers/list', [App\Http\Controllers\AdminSupplierController::class, 'supplier_list'])->name('admin.suppliers.list');
400+
Route::get('/suppliers/search', [App\Http\Controllers\AdminSupplierController::class, 'supplier_search'])->name('admin.suppliers.search');
393401
Route::post('/suppliers/create', [App\Http\Controllers\AdminSupplierController::class, 'supplier_create'])->name('admin.suppliers.create');
394402
Route::get('/suppliers/{user_id}', [App\Http\Controllers\AdminSupplierController::class, 'supplier_profile_index'])->name('admin.suppliers.profile');
395403
Route::post('/suppliers/{user_id}/update', [App\Http\Controllers\AdminSupplierController::class, 'supplier_profile_update'])->name('admin.suppliers.profile.update');

0 commit comments

Comments
 (0)