From 01505ceaa710fd6e967c9744ef4c5dfd330e9c21 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 8 Sep 2024 08:44:54 +0800 Subject: [PATCH] add site userdata refresh api --- app/api/endpoints/site.py | 21 +++++++++++++++++++++ app/chain/site.py | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/app/api/endpoints/site.py b/app/api/endpoints/site.py index a601e7b3..bd776982 100644 --- a/app/api/endpoints/site.py +++ b/app/api/endpoints/site.py @@ -164,6 +164,27 @@ def update_cookie( return schemas.Response(success=state, message=message) +@router.get("/userdata/{site_id}", summary="更新站点用户数据", response_model=schemas.Response) +def refresh_userdata( + site_id: int, + db: Session = Depends(get_db), + _: schemas.TokenPayload = Depends(get_current_active_superuser)) -> Any: + """ + 刷新站点用户数据 + """ + site = Site.get(db, site_id) + if not site: + raise HTTPException( + status_code=404, + detail=f"站点 {site_id} 不存在", + ) + indexer = SitesHelper().get_indexer(site.domain) + if not indexer: + return schemas.Response(success=False, message="站点不支持索引或未通过用户认证!") + user_data = SiteChain().refresh_userdata(site=indexer) or {} + return schemas.Response(success=True, data=user_data) + + @router.get("/test/{site_id}", summary="连接测试", response_model=schemas.Response) def test_site(site_id: int, db: Session = Depends(get_db), diff --git a/app/chain/site.py b/app/chain/site.py index b157455c..a9b38254 100644 --- a/app/chain/site.py +++ b/app/chain/site.py @@ -398,6 +398,26 @@ class SiteChain(ChainBase): logger.info(f"清理站点配置:{key}") self.systemconfig.delete(key) + @eventmanager.register(EventType.SiteUpdated) + def cache_site_userdata(self, event: Event): + """ + 缓存站点用户数据 + """ + if not event: + return + event_data = event.event_data or {} + # 主域名 + domain = event_data.get("domain") + if not domain: + return + if str(domain).startswith("http"): + domain = StringUtils.get_url_domain(domain) + indexer = self.siteshelper.get_indexer(domain) + if not indexer: + return + # 刷新站点用户数据 + self.refresh_userdata(site=indexer) or {} + def test(self, url: str) -> Tuple[bool, str]: """ 测试站点是否可用