feat: linebot
All checks were successful
Oracle-Deploy / redeploy (push) Successful in 32s

1. change query today
This commit is contained in:
2026-03-24 10:42:50 +08:00
parent 4bf0262c5f
commit 24034b782b

View File

@@ -213,20 +213,41 @@ def query_today(line_user_id: str) -> str:
db = SessionLocal() db = SessionLocal()
try: try:
user_id = get_or_create_user(db, line_user_id) user_id = get_or_create_user(db, line_user_id)
rows = db.query(Expense).filter( sql = text("""
Expense.user_id == user_id, SELECT
text("DATE(date) = :today") COALESCE(m.display_name, e.item_name) AS display_name,
).params(today=date.today()).all() SUM(e.amount) as total_amount -- 💡 記得這裡是 amount
FROM expenses e
LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%'
WHERE e.user_id = :user_id
AND e.date = CURRENT_DATE -- 💡 這是查今天的關鍵
GROUP BY COALESCE(m.display_name, e.item_name)
ORDER BY total_amount DESC
""")
rows = db.execute(sql, {"user_id": user_id}).fetchall()
if not rows: data_list = [dict(row) if hasattr(row, '_mapping') else row for row in rows]
return "今天還沒有記錄 📭"
total = sum(float(r.total_amount) for r in rows) # 2. 計算總額
lines = [ total = sum(float(r['total_amount']) for r in data_list)
f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"{r.note}" if r.note else "")
for i, r in enumerate(rows) if not data_list:
] return "📋 今日還沒有記錄喔!💨"
return "📋 今日記錄:\n" + "\n".join(lines) + f"\n\n💰 合計:${total:.0f}\n\n🗑 刪除請輸入:刪除 編號\n例如:刪除 1"
# 3. 組裝每一行的文字 (注意欄位改用 ['display_name'] 和 ['total_amount'])
lines = []
for i, r in enumerate(data_list):
# 這裡用 display_name 才會顯示 merchant_mapping 轉換後的好記名稱
name = r.get('display_name') or r.get('item_name')
amt = float(r['total_amount'])
note_str = f"{r['note']}" if r.get('note') else ""
lines.append(f"{i+1}. {name} ${amt:.0f}{note_str}")
# 4. 回傳最終訊息
header = "📋 今日記錄:\n"
footer = f"\n\n💰 合計:${total:.0f}\n\n🗑 刪除請輸入:刪除 編號\n例如:刪除 1"
return header + "\n".join(lines) + footer
except Exception as e: except Exception as e:
print("❌ 查詢失敗:", e) print("❌ 查詢失敗:", e)
return "查詢失敗,請稍後再試" return "查詢失敗,請稍後再試"