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

1. change column name
This commit is contained in:
2026-03-24 10:30:06 +08:00
parent 9f44fbe970
commit 85520e6724

View File

@@ -112,7 +112,7 @@ def parse_multiline_expense(text: str) -> dict | None:
field_map = { field_map = {
"品項": "item_name", "品項": "item_name",
"類別": "category", "類別": "category",
"金額": "amount", "金額": "total_amount",
"店家": "seller_name", "店家": "seller_name",
"備註": "note", "備註": "note",
} }
@@ -124,11 +124,11 @@ def parse_multiline_expense(text: str) -> dict | None:
fields[field] = value fields[field] = value
break break
if not all(k in fields for k in ["item_name", "category", "amount"]): if not all(k in fields for k in ["item_name", "category", "total_amount"]):
return None return None
try: try:
fields["amount"] = float(re.sub(r"[^\d.]", "", fields["amount"])) fields["total_amount"] = float(re.sub(r"[^\d.]", "", fields["total_amount"]))
except ValueError: except ValueError:
return None return None
@@ -144,7 +144,7 @@ def save_expense(line_user_id: str, fields: dict) -> str:
db.add(Expense( db.add(Expense(
user_id=user_id, user_id=user_id,
category_id=subcategory_id or category_id, category_id=subcategory_id or category_id,
amount=fields["amount"], amount=fields["total_amount"],
note=fields.get("note"), note=fields.get("note"),
seller_name=fields.get("seller_name"), seller_name=fields.get("seller_name"),
item_name=fields["item_name"], item_name=fields["item_name"],
@@ -156,7 +156,7 @@ def save_expense(line_user_id: str, fields: dict) -> str:
f"✅ 已記錄!\n" f"✅ 已記錄!\n"
f"品項:{fields['item_name']}\n" f"品項:{fields['item_name']}\n"
f"類別:{fields['category']}\n" f"類別:{fields['category']}\n"
f"金額:${fields['amount']:.0f}\n" f"金額:${fields['total_amount']:.0f}\n"
) )
if fields.get("seller_name"): if fields.get("seller_name"):
reply += f"店家:{fields['seller_name']}\n" reply += f"店家:{fields['seller_name']}\n"
@@ -192,7 +192,7 @@ def delete_expense(line_user_id: str, target: str) -> str:
row = rows[idx] row = rows[idx]
db.delete(row) db.delete(row)
db.commit() db.commit()
return f"✅ 已刪除:{row.item_name} ${float(row.amount):.0f}" return f"✅ 已刪除:{row.item_name} ${float(row.total_amount):.0f}"
matched = [r for r in rows if r.item_name == target] matched = [r for r in rows if r.item_name == target]
if not matched: if not matched:
@@ -200,7 +200,7 @@ def delete_expense(line_user_id: str, target: str) -> str:
row = matched[-1] row = matched[-1]
db.delete(row) db.delete(row)
db.commit() db.commit()
return f"✅ 已刪除:{row.item_name} ${float(row.amount):.0f}" return f"✅ 已刪除:{row.item_name} ${float(row.total_amount):.0f}"
except Exception as e: except Exception as e:
db.rollback() db.rollback()
print("❌ 刪除失敗:", e) print("❌ 刪除失敗:", e)
@@ -221,7 +221,7 @@ def query_today(line_user_id: str) -> str:
if not rows: if not rows:
return "今天還沒有記錄 📭" return "今天還沒有記錄 📭"
total = sum(float(r.amount) for r in rows) total = sum(float(r.total_amount) for r in rows)
lines = [ lines = [
f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"{r.note}" if r.note else "") f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"{r.note}" if r.note else "")
for i, r in enumerate(rows) for i, r in enumerate(rows)
@@ -243,7 +243,7 @@ def query_month(line_user_id: str) -> str:
sql = text(""" sql = text("""
SELECT SELECT
COALESCE(m.display_name, e.item_name) AS display_name, COALESCE(m.display_name, e.item_name) AS display_name,
SUM(e.amount) as total_amount SUM(e.total_amount) as total_amount
FROM expenses e FROM expenses e
LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%' LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%'
WHERE e.user_id = :user_id WHERE e.user_id = :user_id
@@ -258,7 +258,7 @@ def query_month(line_user_id: str) -> str:
if not rows: if not rows:
return "本月還沒有記錄 📭" return "本月還沒有記錄 📭"
total = sum(float(r.amount) for r in rows) total = sum(float(r.total_amount) for r in rows)
summary = {} summary = {}
for row in rows: for row in rows:
name = row.display_name name = row.display_name