authorize('createBillplz', Investment::class); $validated = $request->validated(); $result = $this->billplzInvestmentService->initiate( $request->user()->id, $validated['investment_type_id'], $validated['amount'], $validated['remarks'] ?? null, $request->user(), ); return response()->json([ 'success' => true, 'data' => [ 'investment' => new InvestmentResource($result['investment']), 'bill_url' => $result['bill_url'], ], 'message' => 'Bil Billplz berjaya dijana', ], 201); } public function callback(Request $request): JsonResponse { $investment = $this->billplzInvestmentService->handleCallback($request->all()); return response()->json([ 'success' => true, 'data' => [ 'investment_id' => $investment->id, 'status' => $investment->status?->value ?? $investment->status, ], 'message' => 'Callback Billplz diterima', ]); } public function status(string $id): JsonResponse { $this->authorize('view', Investment::class); $investment = $this->billplzInvestmentService->syncFromGateway($id); return response()->json([ 'success' => true, 'data' => new InvestmentResource( $investment->loadMissing(['account', 'investmentType', 'payment.billplzTransaction', 'ledgerEntries']) ), 'message' => 'Status pelaburan berjaya dimuatkan', ]); } }