91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
from flask import Blueprint, jsonify, request
|
|
|
|
from .auth import login_required
|
|
from .db import get_db, now_iso
|
|
|
|
vocab_bp = Blueprint("vocabulary", __name__)
|
|
|
|
|
|
def row_to_dict(row):
|
|
return dict(row)
|
|
|
|
|
|
@vocab_bp.get("/api/vocabulary")
|
|
@login_required
|
|
def list_vocabulary(user):
|
|
conn = get_db()
|
|
try:
|
|
rows = conn.execute(
|
|
"""
|
|
SELECT id, word, english, chinese, category, created_at
|
|
FROM vocabulary
|
|
WHERE user_id = ?
|
|
ORDER BY created_at DESC
|
|
""",
|
|
(user["id"],),
|
|
).fetchall()
|
|
return jsonify([row_to_dict(r) for r in rows])
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
@vocab_bp.post("/api/vocabulary")
|
|
@login_required
|
|
def add_vocabulary(user):
|
|
data = request.get_json(silent=True) or {}
|
|
word = (data.get("word") or "").strip()
|
|
if not word:
|
|
return jsonify({"error": "单词不能为空"}), 400
|
|
conn = get_db()
|
|
try:
|
|
existing = conn.execute(
|
|
"SELECT id FROM vocabulary WHERE user_id = ? AND word = ?",
|
|
(user["id"], word),
|
|
).fetchone()
|
|
if existing:
|
|
row = conn.execute(
|
|
"SELECT id, word, english, chinese, category, created_at FROM vocabulary WHERE id = ?",
|
|
(existing["id"],),
|
|
).fetchone()
|
|
return jsonify(row_to_dict(row))
|
|
cur = conn.execute(
|
|
"""
|
|
INSERT INTO vocabulary (user_id, word, english, chinese, category, created_at)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
""",
|
|
(
|
|
user["id"],
|
|
word,
|
|
(data.get("english") or "").strip(),
|
|
(data.get("chinese") or "").strip(),
|
|
(data.get("category") or "").strip(),
|
|
now_iso(),
|
|
),
|
|
)
|
|
conn.commit()
|
|
row = conn.execute(
|
|
"SELECT id, word, english, chinese, category, created_at FROM vocabulary WHERE id = ?",
|
|
(cur.lastrowid,),
|
|
).fetchone()
|
|
return jsonify(row_to_dict(row)), 201
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
@vocab_bp.delete("/api/vocabulary/<int:item_id>")
|
|
@login_required
|
|
def delete_vocabulary(user, item_id):
|
|
conn = get_db()
|
|
try:
|
|
row = conn.execute(
|
|
"SELECT id FROM vocabulary WHERE id = ? AND user_id = ?",
|
|
(item_id, user["id"]),
|
|
).fetchone()
|
|
if row is None:
|
|
return jsonify({"error": "收藏不存在或无权访问"}), 404
|
|
conn.execute("DELETE FROM vocabulary WHERE id = ?", (item_id,))
|
|
conn.commit()
|
|
return jsonify({"ok": True})
|
|
finally:
|
|
conn.close()
|