Add customer status update and bulk management endpoints
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user