Add customer status update and bulk management endpoints

This commit is contained in:
baodev0
2026-07-13 10:43:17 +07:00
parent 290dcc2fb1
commit cd5239b108
3 changed files with 102 additions and 2 deletions
+1 -2
View File
@@ -42,8 +42,7 @@ jobs:
git clone -b "$BRANCH" "${{ secrets.REPO_URL }}" .
fi
rm -rf vendor
composer install --no-dev --optimize-autoloader --no-interaction
composer install --optimize-autoloader --no-interaction
php artisan migrate --force
@@ -1272,6 +1272,102 @@ class CustomerController extends Controller
]);
}
public function updateStatus(string $uuid, Request $request): JsonResponse
{
$request->validate(['status' => ['required', 'integer', 'in:0,1,2,3']]);
$customer = $this->customerRepository->findBy('uuid', $uuid);
if (!$customer) {
return response()->json(['error' => true, 'message' => "Can't find customer by UUID #" . $uuid], 404);
}
$customer->status = $request->input('status');
$customer->save();
return response()->json(['error' => false, 'message' => 'Cập nhật trạng thái thành công']);
}
public function bulkDelete(Request $request): JsonResponse
{
$request->validate(['uuids' => ['required', 'array', 'min:1'], 'uuids.*' => ['string']]);
$uuids = $request->input('uuids');
$customers = Customer::whereIn('uuid', $uuids)->get();
try {
DB::beginTransaction();
foreach ($customers as $c) {
Invoice::where('customer_id', $c->id)->delete();
Order::where('customer_id', $c->id)->delete();
Transaction::where('customer_id', $c->id)->delete();
$c->delete();
}
DB::commit();
return response()->json(['error' => false, 'message' => "Đã xoá {$customers->count()} khách hàng"]);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['error' => true, 'message' => $e->getMessage()], 500);
}
}
public function bulkRestore(Request $request): JsonResponse
{
$request->validate(['uuids' => ['required', 'array', 'min:1'], 'uuids.*' => ['string']]);
$customers = Customer::onlyTrashed()->whereIn('uuid', $request->input('uuids'))->get();
try {
DB::beginTransaction();
foreach ($customers as $c) {
$c->restore();
Invoice::withTrashed()->where('customer_id', $c->id)->restore();
Order::withTrashed()->where('customer_id', $c->id)->restore();
Transaction::withTrashed()->where('customer_id', $c->id)->restore();
}
DB::commit();
return response()->json(['error' => false, 'message' => "Đã khôi phục {$customers->count()} khách hàng"]);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['error' => true, 'message' => $e->getMessage()], 500);
}
}
public function bulkForceDelete(Request $request): JsonResponse
{
$request->validate(['uuids' => ['required', 'array', 'min:1'], 'uuids.*' => ['string']]);
$customers = Customer::onlyTrashed()->whereIn('uuid', $request->input('uuids'))->get();
try {
DB::beginTransaction();
foreach ($customers as $c) {
Invoice::withTrashed()->where('customer_id', $c->id)->forceDelete();
Order::withTrashed()->where('customer_id', $c->id)->forceDelete();
Transaction::withTrashed()->where('customer_id', $c->id)->forceDelete();
$c->forceDelete();
}
DB::commit();
return response()->json(['error' => false, 'message' => "Đã xoá vĩnh viễn {$customers->count()} khách hàng"]);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['error' => true, 'message' => $e->getMessage()], 500);
}
}
public function bulkStatus(Request $request): JsonResponse
{
$request->validate([
'uuids' => ['required', 'array', 'min:1'],
'uuids.*' => ['string'],
'status' => ['required', 'integer', 'in:0,1,2,3'],
]);
$count = Customer::whereIn('uuid', $request->input('uuids'))
->update(['status' => $request->input('status')]);
return response()->json(['error' => false, 'message' => "Đã cập nhật trạng thái {$count} khách hàng"]);
}
private function cycleToMonths(?string $cycle): int
{
return match ($cycle) {
+5
View File
@@ -139,6 +139,11 @@ Route::prefix('v1')
Route::get('{uuid}/dns-domains/{domainId}/records', 'getDnsDomainRecords')->middleware(
'perm:customer.view',
);
Route::patch('{uuid}/status', 'updateStatus')->middleware('perm:customer.edit');
Route::post('bulk-delete', 'bulkDelete')->middleware('perm:customer.destroy');
Route::post('bulk-restore', 'bulkRestore')->middleware('perm:customer.edit');
Route::post('bulk-force-delete', 'bulkForceDelete')->middleware('perm:customer.destroy');
Route::post('bulk-status', 'bulkStatus')->middleware('perm:customer.edit');
Route::post('{uuid}/restore', 'restore')->middleware('perm:customer.edit');
Route::delete('{uuid}/force', 'forceDelete')->middleware('perm:customer.destroy');
});