diff --git a/app.py b/app.py index 2d10f41..58c846b 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,14 @@ from app.init import create_app from app.config_loader import config_loader +import sentry_sdk + +sentry_sdk.init( + dsn="https://d1cad1d2b442cf8431df3ee4bab925e0@o4507525750521856.ingest.us.sentry.io/4510623668830208", + # Add data like request headers and IP for users, + # see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info + send_default_pii=True, + traces_sample_rate=1.0, +) # 创建应用实例 app = create_app() diff --git a/requirements.txt b/requirements.txt index 35d1baf..4d73820 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ pycryptodome==3.20.0 PyJWT==2.10.1 pymongo==4.15.5 Werkzeug==3.1.4 +sentry-sdk[flask] \ No newline at end of file diff --git a/routes/announcement.py b/routes/announcement.py index 6ba91a3..b78ca01 100644 --- a/routes/announcement.py +++ b/routes/announcement.py @@ -1,12 +1,14 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request from services.announcement_service import get_announcements announcement_bp = Blueprint("announcement", __name__) @announcement_bp.route("/List", methods=["POST"]) def list_announcements(): + # 获取用户已关闭的公告ID列表,也可能没有请求体 + request_data = request.get_json(silent=True) or [] return jsonify({ "code": 0, "message": "OK", - "data": get_announcements() + "data": get_announcements(request_data) }) diff --git a/services/announcement_service.py b/services/announcement_service.py index aa10264..8812bdd 100644 --- a/services/announcement_service.py +++ b/services/announcement_service.py @@ -1,11 +1,19 @@ -from app.extensions import client +from app.extensions import client, logger from app.config import Config -def get_announcements(): +def get_announcements(request_data: list): if Config.ISTEST_MODE: return [] - + # 记录请求体到日志,请求体中是用户已关闭的公告ID列表 + logger.debug("Request body: %s", request_data) + announcements = list(client.ht_server.announcement.find({})) + result = [] for a in announcements: + # 拷贝并移除 _id 字段,避免 ObjectId 无法序列化 + a = dict(a) a.pop('_id', None) - return announcements + # 如果请求体中包含该公告ID,说明用户已关闭该公告,不返回该公告 + if a.get('Id') not in request_data: + result.append(a) + return result