topups = new TopupModel(); } public function index() { // echo(123);exit; $data = $this->topups ->select('topup.*, customers.customer_wallet, customers.phone, customers.name') ->join('customers', 'customers.id = topup.customer_id', 'left') ->orderBy('topup.created_at', 'DESC') ->findAll(); return $this->respond([ 'status' => 200, 'data' => $data, ]); } public function create() { // echo('123'); exit; $payload = $this->request->getJSON(true) ?? $this->request->getPost(); $rules = [ 'customer_id' => 'required|integer', 'amount' => 'required|decimal|greater_than[0]', 'payment_method' => 'required|string|max_length[50]', 'topup_setting_id' => 'permit_empty|integer', 'credit' => 'permit_empty|decimal', 'other_amount' => 'permit_empty|decimal', 'status' => 'permit_empty|in_list[pending,completed,failed]' ]; // echo(123); if (!$this->validate($rules)) { return $this->failValidationErrors($this->validator->getErrors()); } $topupNumber = 'Test-123123'; $data = [ 'topup_setting_id' => $payload['topup_setting_id'] ?? null, 'customer_id' => $payload['customer_id'], 'topup_number' => $topupNumber, 'amount' => $payload['amount'], 'credit' => $payload['credit'], 'payment_method' => $payload['payment_method'], 'other_amount' => $payload['other_amount'] ?? null, 'status' => $payload['status'] ]; $id = $this->topups->insert($data, true); if (!$id) { return $this->fail('Topup creation failed', 400); } return $this->respond([ 'status' => 201, 'message' => 'Topup created successfully', 'data' => $this->topups->find($id) ]); } public function update($id = null) { $id = (int) $id; if (!$this->topups->find($id)) { return $this->fail('Topup not found', 404); } $payload = $this->request->getJSON(true) ?? $this->request->getPost(); $rules = [ 'status' => 'permit_empty|in_list[pending,completed,failed]', 'amount' => 'permit_empty|decimal|greater_than[0]', 'credit' => 'permit_empty|decimal', 'payment_method' => 'permit_empty|string|max_length[50]' ]; if (!$this->validate($rules)) { return $this->failValidationErrors($this->validator->getErrors()); } if (!$this->topups->update($id, $payload)) { return $this->fail('Update failed', 400); } return $this->respond([ 'status' => 200, 'message' => 'Topup updated successfully', 'data' => $this->topups->find($id) ]); } public function delete($id = null) { $id = (int) $id; if (!$this->topups->find($id)) { return $this->fail('Topup not found', 404); } if (!$this->topups->delete($id)) { return $this->fail('Delete failed', 400); } return $this->respond([ 'status' => 200, 'message' => 'Topup deleted successfully' ]); } public function show($id = null) { $id = (int) $id; $row = $this->topups ->select('topup.*, topup_setting.id AS setting_id, topup_setting.topup_amount, topup_setting.credit_amount, topup_setting.status AS setting_status') ->join('topup_setting', 'topup_setting.id = topup.topup_setting_id', 'left') ->where('topup.id', $id) ->first(); if (!$row) { return $this->failNotFound('Topup record not found'); } $data = [ 'id' => $row['id'], 'topup_setting_id' => $row['topup_setting_id'], 'customer_id' => $row['customer_id'], 'topup_number' => $row['topup_number'], 'amount' => $row['amount'], 'credit' => $row['credit'], 'payment_method' => $row['payment_method'], 'other_amount' => $row['other_amount'], 'status' => $row['status'], 'created_at' => $row['created_at'], 'updated_at' => $row['updated_at'], 'topup_setting' => [ 'id' => $row['setting_id'], 'topup_amount' => $row['topup_amount'], 'credit_amount' => $row['credit_amount'], 'status' => $row['setting_status'] ] ]; return $this->respond([ 'status' => 200, 'data' => $data ]); } }