From 0335937312b069c438d2d30ff4faa034536efcfe Mon Sep 17 00:00:00 2001 From: hubian <908234780@qq.com> Date: Wed, 22 Apr 2026 13:00:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(v4.1.0):=20=E6=96=87=E6=9C=AC=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E6=B7=BB=E5=8A=A0=E5=BE=85=E5=8A=9E=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 可在文本数据详情中追加待办事务 - 支持事务内容、剩余天数(默认1天)、完成状态 - 历史事务按时间倒序排列,显示创建/更新时间 - 分页显示,每页10条 --- xian_favor/api.py | 329 +++++++++++++++++++++++++++++++++++++++++++++- xian_favor/db.py | 103 +++++++++++++++ 2 files changed, 431 insertions(+), 1 deletion(-) diff --git a/xian_favor/api.py b/xian_favor/api.py index 24a5e21..aef452b 100644 --- a/xian_favor/api.py +++ b/xian_favor/api.py @@ -338,6 +338,105 @@ def reopen_item(item_id): return jsonify({'success': True, 'data': item}) +# ============ Todo Events 待办事务API ============ + +@app.route('/api/items//todo-events', methods=['GET']) +def list_todo_events(item_id): + """列出待办事务""" + limit = int(request.args.get('limit', 10)) + offset = int(request.args.get('offset', 0)) + + events = db.list_todo_events(item_id, limit=limit, offset=offset) + total = db.count_todo_events(item_id) + + return jsonify({'success': True, 'data': events, 'total': total}) + + +@app.route('/api/items//todo-events', methods=['POST']) +def create_todo_event(item_id): + """创建待办事务""" + data = request.get_json() + + if not data or not data.get('content'): + return jsonify({'success': False, 'error': '缺少事务内容'}), 400 + + # 检查item是否存在且是text类型 + item = db.get_item(item_id) + if not item: + return jsonify({'success': False, 'error': '条目不存在'}), 404 + + if item['type'] != 'text': + return jsonify({'success': False, 'error': '只有文本类型可添加待办事务'}), 400 + + remaining_days = data.get('remaining_days', 1) + if remaining_days < 0: + remaining_days = 1 + + event_id = db.create_todo_event(item_id, data['content'], remaining_days) + event = db.get_todo_event(event_id) + + return jsonify({'success': True, 'data': event}), 201 + + +@app.route('/api/todo-events/', methods=['GET']) +def get_todo_event(event_id): + """获取单个待办事务""" + event = db.get_todo_event(event_id) + if not event: + return jsonify({'success': False, 'error': '事务不存在'}), 404 + + return jsonify({'success': True, 'data': event}) + + +@app.route('/api/todo-events/', methods=['PUT']) +def update_todo_event(event_id): + """更新待办事务""" + data = request.get_json() + + if not data: + return jsonify({'success': False, 'error': '无数据'}), 400 + + event = db.get_todo_event(event_id) + if not event: + return jsonify({'success': False, 'error': '事务不存在'}), 404 + + content = data.get('content') + remaining_days = data.get('remaining_days') + is_completed = data.get('is_completed') + + if is_completed is not None: + is_completed = bool(is_completed) + + db.update_todo_event(event_id, content=content, remaining_days=remaining_days, is_completed=is_completed) + event = db.get_todo_event(event_id) + + return jsonify({'success': True, 'data': event}) + + +@app.route('/api/todo-events/', methods=['DELETE']) +def delete_todo_event(event_id): + """删除待办事务""" + event = db.get_todo_event(event_id) + if not event: + return jsonify({'success': False, 'error': '事务不存在'}), 404 + + db.delete_todo_event(event_id) + return jsonify({'success': True}) + + +@app.route('/api/todo-events//complete', methods=['POST']) +def complete_todo_event(event_id): + """完成待办事务""" + event = db.get_todo_event(event_id) + if not event: + return jsonify({'success': False, 'error': '事务不存在'}), 404 + + db.update_todo_event(event_id, is_completed=True) + event = db.get_todo_event(event_id) + + return jsonify({'success': True, 'data': event}) + + @app.route('/api/items//convert', methods=['POST']) def convert_item(item_id): """将收藏转换为待办""" @@ -1846,6 +1945,44 @@ INDEX_TEMPLATE = ''' + + +