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 = ''' + + +