where('user_id', auth()->id()) ->orderBy('date', 'desc') ->get(); return response()->json($expenses); } /** * 2. 取得使用者所有的消費分類 * GET /api/categories */ public function categories() { $categories = Category::where('user_id', auth()->id())->get(); return response()->json($categories); } /** * 3. 取得使用者所有的自動分類規則 * GET /api/category-rules */ public function categoryRules() { $rules = CategoryRule::with('category') ->where('user_id', auth()->id()) ->get(); return response()->json($rules); } /** * 4. 手動新增支出明細 * POST /api/expenses */ public function store(Request $request) { $validated = $request->validate([ 'amount' => 'required|numeric|min:0', 'category_id' => 'nullable|exists:categories,id', 'item_name' => 'nullable|string|max:255', 'seller_name' => 'nullable|string|max:255', 'is_amortized' => 'boolean', 'period_start' => 'nullable|date', 'period_end' => 'nullable|date|after_or_equal:period_start', 'date' => 'required|date', 'note' => 'nullable|string|max:255', ]); $expense = Expense::create([ ...$validated, 'user_id' => $request->user()->id, ]); // 🟢 核心優化:載入分類關聯,這樣前端拿到的 response.data 才能立刻顯示分類顏色 $expense->load('category'); return response()->json($expense, 201); } /** * 5. 修改單筆支出 * PUT /api/expenses/{expense} */ public function update(Request $request, Expense $expense) { $this->authorize('update', $expense); $validated = $request->validate([ 'amount' => 'required|numeric|min:0', 'category_id' => 'nullable|exists:categories,id', 'item_name' => 'nullable|string|max:255', 'date' => 'required|date', 'note' => 'nullable|string|max:255', 'seller_name' => 'nullable|string|max:255', 'is_amortized' => 'boolean', 'period_start' => 'nullable|date', 'period_end' => 'nullable|date|after_or_equal:period_start', ]); $expense->update($validated); // 🟢 核心優化:同樣載入分類關聯 $expense->load('category'); return response()->json($expense); } /** * 6. 刪除單筆支出 * DELETE /api/expenses/{expense} */ public function destroy(Expense $expense) { $this->authorize('delete', $expense); $expense->delete(); return response()->json(['message' => '刪除成功']); } /** * 7. 批量刪除支出 * POST /api/expenses/destroy-batch */ public function destroyBatch(Request $request) { $request->validate(['ids' => 'required|array']); Expense::whereIn('id', $request->ids) ->where('user_id', $request->user()->id) ->delete(); return response()->json(['message' => '批量刪除成功']); } }