diff --git a/client/app/hooks/useBot.ts b/client/app/hooks/useBot.ts index 9232e939..bb986c80 100644 --- a/client/app/hooks/useBot.ts +++ b/client/app/hooks/useBot.ts @@ -34,7 +34,7 @@ export const useBotDetail = (id: string) => { }); }; -export const useGetBotBoundRepos =(id:string)=>{ +export const useGetBotBoundRepos = (id: string) => { return useQuery({ queryKey: [`bot.boundRepos.${id}`, id], queryFn: async () => getBotBoundRepos(id), @@ -42,7 +42,7 @@ export const useGetBotBoundRepos =(id:string)=>{ enabled: !!id, retry: false, }); -} +}; export const useBotConfig = (id: string, enabled: boolean) => { return useQuery({ @@ -153,7 +153,7 @@ export const useGetBotRagTask = ( queryKey: [`rag.task`, repoName], queryFn: async () => getRagTask(repoName), select: (data) => data, - enabled:!!repoName, + enabled: !!repoName, retry: true, refetchInterval: refetchInterval ? 3 * 1000 : undefined, }); diff --git a/server/auth/router.py b/server/auth/router.py index 7a7a3e8b..3d4e7305 100644 --- a/server/auth/router.py +++ b/server/auth/router.py @@ -1,4 +1,3 @@ -import json from github import Github from core.dao.profilesDAO import ProfilesDAO from fastapi import APIRouter, Request, HTTPException, status, Depends diff --git a/server/bot/router.py b/server/bot/router.py index dad0793b..00775b9e 100644 --- a/server/bot/router.py +++ b/server/bot/router.py @@ -29,36 +29,45 @@ def get_bot_list( None, description="Filter bots by personal category" ), name: Optional[str] = Query(None, description="Filter bots by name"), - user_id: Annotated[str | None, Depends(get_user_id)] = None, + user: Annotated[User | None, Depends(get_user)] = None, ): try: supabase = get_client() query = supabase.table("bots").select( "id, created_at, updated_at, avatar, description, name, public, starters, uid, repo_name" ) + if personal == "true": - if not user_id: + if not user or not user.access_token: return {"data": [], "personal": personal} - query = query.eq("uid", user_id).order("updated_at", desc=True) - if name: - query = ( - supabase.table("bots") - .select( - "id, created_at, updated_at, avatar, description, name, public, starters, uid, repo_name" - ) - .filter("name", "like", f"%{name}%") + + auth = Auth.Token(token=user.access_token) + github_user = Github(auth=auth).get_user() + orgs_ids = [org.id for org in github_user.get_orgs()] + bot_ids = [] + + repository_config_dao = RepositoryConfigDAO() + bots = repository_config_dao.query_bot_id_by_owners( + orgs_ids + [github_user.id] ) - query = ( - query.eq("public", True).order("updated_at", desc=True) - if not personal or personal != "true" - else query - ) + if bots: + bot_ids = [bot["robot_id"] for bot in bots if bot["robot_id"]] + + or_clause = f"uid.eq.{user.id}" + ( + f",id.in.({','.join(map(str, bot_ids))})" if bot_ids else "" + ) + query = query.or_(or_clause) + else: + query = query.eq("public", True) + + if name: + query = query.filter("name", "like", f"%{name}%") + query = query.order("updated_at", desc=True) data = query.execute() - if not data or not data.data: - return {"data": [], "personal": personal} - return {"data": data.data, "personal": personal} + + return {"data": data.data if data and data.data else [], "personal": personal} except Exception as e: return JSONResponse( @@ -186,6 +195,7 @@ async def bot_generator( content={"success": False, "errorMessage": str(e)}, status_code=500 ) + @router.get("/git/avatar", status_code=200) async def get_git_avatar( repo_name: str, @@ -201,8 +211,6 @@ async def get_git_avatar( ) - - @router.put("/update/{id}", status_code=200) def update_bot( id: str, diff --git a/server/bot/util.ts b/server/bot/util.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/server/core/dao/repositoryConfigDAO.py b/server/core/dao/repositoryConfigDAO.py index b9c410fe..e1f8f6d1 100644 --- a/server/core/dao/repositoryConfigDAO.py +++ b/server/core/dao/repositoryConfigDAO.py @@ -83,6 +83,19 @@ def query_by_owners(self, orgs: List[str]): print(f"Error: {e}") return None + def query_bot_id_by_owners(self, orgs: List[str]): + try: + response = ( + self.client.table("github_repo_config") + .select("robot_id") + .filter("owner_id", "in", f"({','.join(map(str, orgs))})") + .execute() + ) + return response.data + except Exception as e: + print(f"Error: {e}") + return None + def update_bot_to_repos(self, repos: List[RepoBindBotConfigVO]) -> bool: try: for repo in repos: diff --git a/server/github_app/utils.py b/server/github_app/utils.py index 98e825eb..2b727fed 100644 --- a/server/github_app/utils.py +++ b/server/github_app/utils.py @@ -58,16 +58,3 @@ def get_installation_repositories(access_token: str): }, ) return resp.json() - - -def get_user_orgs(username, access_token: str): - url = f"https://api.github.com/users/{username}/orgs" - resp = requests.get( - url, - headers={ - "X-GitHub-Api-Version": "2022-11-28", - "Accept": "application/vnd.github+json", - "Authorization": f"Bearer {access_token}", - }, - ) - return resp.json()