新增api查看是否已经点赞

Change-Id: Ibc81bf669bdfe6061c84c80e11199fdfd19c0cb1
diff --git a/Merge/back_wzy/__pycache__/config.cpython-312.pyc b/Merge/back_wzy/__pycache__/config.cpython-312.pyc
index d25ef2e..87f0185 100644
--- a/Merge/back_wzy/__pycache__/config.cpython-312.pyc
+++ b/Merge/back_wzy/__pycache__/config.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/__pycache__/extensions.cpython-312.pyc b/Merge/back_wzy/__pycache__/extensions.cpython-312.pyc
index cda341f..16d75e9 100644
--- a/Merge/back_wzy/__pycache__/extensions.cpython-312.pyc
+++ b/Merge/back_wzy/__pycache__/extensions.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/__init__.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/__init__.cpython-312.pyc
index b97c14e..6880520 100644
--- a/Merge/back_wzy/models/__pycache__/__init__.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/behavior.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/behavior.cpython-312.pyc
index 3fed625..5dc6603 100644
--- a/Merge/back_wzy/models/__pycache__/behavior.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/behavior.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/comment.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/comment.cpython-312.pyc
index cc7439e..32d9526 100644
--- a/Merge/back_wzy/models/__pycache__/comment.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/comment.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/logs.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/logs.cpython-312.pyc
index 2f17c9c..e9e20cc 100644
--- a/Merge/back_wzy/models/__pycache__/logs.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/logs.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/post.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/post.cpython-312.pyc
index c121706..18bd838 100644
--- a/Merge/back_wzy/models/__pycache__/post.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/post.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/syscost.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/syscost.cpython-312.pyc
index 19df843..e16b1f6 100644
--- a/Merge/back_wzy/models/__pycache__/syscost.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/syscost.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/tag.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/tag.cpython-312.pyc
index cc339ff..6e3988e 100644
--- a/Merge/back_wzy/models/__pycache__/tag.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/tag.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/topic.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/topic.cpython-312.pyc
index 0cd3f35..61a79ea 100644
--- a/Merge/back_wzy/models/__pycache__/topic.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/topic.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/models/__pycache__/user.cpython-312.pyc b/Merge/back_wzy/models/__pycache__/user.cpython-312.pyc
index 18cbff6..cbda4aa 100644
--- a/Merge/back_wzy/models/__pycache__/user.cpython-312.pyc
+++ b/Merge/back_wzy/models/__pycache__/user.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/routes/posts.py b/Merge/back_wzy/routes/posts.py
index a016f69..105900c 100644
--- a/Merge/back_wzy/routes/posts.py
+++ b/Merge/back_wzy/routes/posts.py
@@ -231,4 +231,23 @@
     post = Post.query.get_or_404(post_id)
     post.heat = max(post.heat - 1, 0)
     db.session.commit()
-    return '', 204
\ No newline at end of file
+    return '', 204
+
+@posts_bp.route('/<int:post_id>/like', methods=['GET'])
+def has_liked(post_id):
+    """
+    检查指定 user_id 是否对 post_id 点过赞。
+    GET /posts/<post_id>/like?user_id=123
+    返回 { "liked": true } 或 { "liked": false }
+    """
+    user_id = request.args.get('user_id', type=int)
+    if not user_id:
+        abort(400, 'user_id required')
+
+    exists = Behavior.query.filter_by(
+        user_id=user_id,
+        post_id=post_id,
+        type='like'
+    ).first() is not None
+
+    return jsonify({'liked': exists}), 200
diff --git a/Merge/back_wzy/utils/__pycache__/Fpost.cpython-312.pyc b/Merge/back_wzy/utils/__pycache__/Fpost.cpython-312.pyc
index c0d1153..6d17f0f 100644
--- a/Merge/back_wzy/utils/__pycache__/Fpost.cpython-312.pyc
+++ b/Merge/back_wzy/utils/__pycache__/Fpost.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_wzy/utils/__pycache__/__init__.cpython-312.pyc b/Merge/back_wzy/utils/__pycache__/__init__.cpython-312.pyc
index da13bfc..cd96ac0 100644
--- a/Merge/back_wzy/utils/__pycache__/__init__.cpython-312.pyc
+++ b/Merge/back_wzy/utils/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/WZY/xhs_server/__pycache__/config.cpython-312.pyc b/WZY/xhs_server/__pycache__/config.cpython-312.pyc
index 262103a..bd10f35 100644
--- a/WZY/xhs_server/__pycache__/config.cpython-312.pyc
+++ b/WZY/xhs_server/__pycache__/config.cpython-312.pyc
Binary files differ
diff --git a/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc b/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
index ac244d0..f301c84 100644
--- a/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
+++ b/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
Binary files differ
diff --git a/WZY/xhs_server/routes/posts.py b/WZY/xhs_server/routes/posts.py
index 11c0b9e..cb7e266 100644
--- a/WZY/xhs_server/routes/posts.py
+++ b/WZY/xhs_server/routes/posts.py
@@ -149,4 +149,23 @@
     post = Post.query.get_or_404(post_id)
     post.heat = max(post.heat - 1, 0)
     db.session.commit()
-    return '', 204
\ No newline at end of file
+    return '', 204
+
+@posts_bp.route('/<int:post_id>/like', methods=['GET'])
+def has_liked(post_id):
+    """
+    检查指定 user_id 是否对 post_id 点过赞。
+    GET /posts/<post_id>/like?user_id=123
+    返回 { "liked": true } 或 { "liked": false }
+    """
+    user_id = request.args.get('user_id', type=int)
+    if not user_id:
+        abort(400, 'user_id required')
+
+    exists = Behavior.query.filter_by(
+        user_id=user_id,
+        post_id=post_id,
+        type='like'
+    ).first() is not None
+
+    return jsonify({'liked': exists}), 200