Skip to content

Commit

Permalink
feat: enable org
Browse files Browse the repository at this point in the history
  • Loading branch information
xingwanying committed Dec 12, 2024
1 parent 8562e93 commit dca4520
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 31 deletions.
6 changes: 3 additions & 3 deletions client/app/hooks/useBot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ 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),
select: (data) => data,
enabled: !!id,
retry: false,
});
}
};

export const useBotConfig = (id: string, enabled: boolean) => {
return useQuery({
Expand Down Expand Up @@ -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,
});
Expand Down
42 changes: 28 additions & 14 deletions server/bot/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def get_bot_list(
),
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()
Expand All @@ -39,21 +40,35 @@ def get_bot_list(
if personal == "true":
if not user_id:
return {"data": [], "personal": personal}
query = query.eq("uid", user_id).order("updated_at", desc=True)
if name:

auth = Auth.Token(token=user.access_token)
g = Github(auth=auth)
github_user = g.get_user()
orgs = github_user.get_orgs()
repository_config_dao = RepositoryConfigDAO()
bots = repository_config_dao.query_by_owners(
[org.id for org in orgs] + [github_user.id]
)
bot_ids = [bot["robot_id"] for bot in bots]
bot_ids_str = ",".join(map(str, bot_ids)) # 将 bots ID 列表转换为字符串
or_clause = f"uid.eq.{user_id},id.in.({bot_ids_str})"

# 添加过滤条件
query = (
supabase.table("bots")
.select(
"id, created_at, updated_at, avatar, description, name, public, starters, uid, repo_name"
)
query.or_(or_clause).order("updated_at", desc=True)
if not name
else query.or_(or_clause)
.filter("name", "like", f"%{name}%")
.order("updated_at", desc=True)
)
else:
query = (
query.eq("public", True).order("updated_at", desc=True)
if not name
else query.eq("public", True)
.filter("name", "like", f"%{name}%")
.order("updated_at", desc=True)
)

query = (
query.eq("public", True).order("updated_at", desc=True)
if not personal or personal != "true"
else query
)

data = query.execute()
if not data or not data.data:
Expand Down Expand Up @@ -186,6 +201,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,
Expand All @@ -201,8 +217,6 @@ async def get_git_avatar(
)




@router.put("/update/{id}", status_code=200)
def update_bot(
id: str,
Expand Down
16 changes: 15 additions & 1 deletion server/core/dao/repositoryConfigDAO.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,22 @@ def query_by_owners(self, orgs: List[str]):
try:
response = (
self.client.table("github_repo_config")
.select("*")
.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 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))})")
.filter("robot_id", "isnot", None)
.execute()
)
return response.data
Expand Down
13 changes: 0 additions & 13 deletions server/github_app/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

0 comments on commit dca4520

Please sign in to comment.