diff --git a/app/Http/Controllers/Admin/PriceTriggerController.php b/app/Http/Controllers/Admin/PriceTriggerController.php new file mode 100644 index 0000000..8a76b69 --- /dev/null +++ b/app/Http/Controllers/Admin/PriceTriggerController.php @@ -0,0 +1,88 @@ +with('customer'); + + TableEngine::create($query, $request->all()) + ->initSearch(['customer_id', 'target_price', 'action', 'price_condition']) + ->select(['*']) + ->export($query); + + return $query; + } + + public function store(Request $request) + { + $data = $this->validatedPayload($request); + + $trigger = PriceTrigger::create([ + ...$data, + 'is_active' => $data['is_active'] ?? true, + ]); + + return response()->json($trigger->load('customer'), 201); + } + + public function update(Request $request, int $id) + { + $trigger = PriceTrigger::findOrFail($id); + $data = $this->validatedPayload($request, true); + + $trigger->update($data); + + return response()->json(true); + } + + public function toggleActive(int $id) + { + $trigger = PriceTrigger::findOrFail($id); + $trigger->is_active = !$trigger->is_active; + + if ($trigger->is_active) { + $trigger->triggered_at = null; + } + + $trigger->save(); + + return response()->json([ + 'is_active' => (bool) $trigger->is_active, + ]); + } + + public function destroy(int $id) + { + PriceTrigger::findOrFail($id)->delete(); + + return response()->json(true); + } + + private function validatedPayload(Request $request, bool $partial = false): array + { + $rules = [ + 'customer_id' => ($partial ? 'sometimes|' : '') . 'required|integer|exists:customers,id', + 'target_price' => ($partial ? 'sometimes|' : '') . 'required|numeric|min:1', + 'price_condition' => ($partial ? 'sometimes|' : '') . 'required|in:>,<', + 'action' => ($partial ? 'sometimes|' : '') . 'required|in:sms,email', + 'is_active' => 'sometimes|boolean', + ]; + + $data = $request->validate($rules); + + if (isset($data['price_condition']) && !in_array($data['price_condition'], ['>', '<'], true)) { + throw new UnprocessableEntityHttpException('شرط قیمت نامعتبر است'); + } + + return $data; + } +} diff --git a/routes/admin.php b/routes/admin.php index 35c100a..bd37b05 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -11,7 +11,7 @@ use \App\Http\Controllers\Admin\WalletController; use \App\Http\Controllers\Admin\BankAccountController; use \App\Http\Controllers\Admin\DashboardController; use \App\Http\Controllers\Single\SingleOrderController; -use App\Http\Controllers\Customer\PriceTriggerController; +use App\Http\Controllers\Admin\PriceTriggerController as AdminPriceTriggerController; use App\Http\Controllers\Finance\FinanceController; use App\Http\Controllers\Admin\ProductController; use App\Http\Controllers\Admin\TahesabController; @@ -40,7 +40,11 @@ Route::middleware('auth:user')->group(function (){ //------------balence Route::post('getBalance', [DashboardController::class, 'getBalance']); //------------PriceTrigger - Route::post('price_triggers/table', [PriceTriggerController::class, 'table']); + Route::post('price_triggers/table', [AdminPriceTriggerController::class, 'table']); + Route::post('price_triggers', [AdminPriceTriggerController::class, 'store']); + Route::put('price_triggers/{id}', [AdminPriceTriggerController::class, 'update']); + Route::put('price_triggers/{id}/toggle', [AdminPriceTriggerController::class, 'toggleActive']); + Route::delete('price_triggers/{id}', [AdminPriceTriggerController::class, 'destroy']); //-----------product Route::post('/product/table', [ProductController::class, 'tableProduct']); Route::post('/product/archive/table', [ProductController::class, 'archiveTable']);