Skip to content

Commit

Permalink
feat: enable collaboration for the same git org (#585)
Browse files Browse the repository at this point in the history
* 允许同一个GitHub组织成员编辑所有改组织下已经安装过的机器人
* 修复市场空间机器人检索结果不准确问题
  • Loading branch information
ch-liuzhide authored Dec 13, 2024
2 parents 8562e93 + a1f80f6 commit de3dc77
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 37 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
1 change: 0 additions & 1 deletion server/auth/router.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import json
from github import Github
from core.dao.profilesDAO import ProfilesDAO
from fastapi import APIRouter, Request, HTTPException, status, Depends
Expand Down
48 changes: 28 additions & 20 deletions server/bot/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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,
Expand All @@ -201,8 +211,6 @@ async def get_git_avatar(
)




@router.put("/update/{id}", status_code=200)
def update_bot(
id: str,
Expand Down
Empty file removed server/bot/util.ts
Empty file.
13 changes: 13 additions & 0 deletions server/core/dao/repositoryConfigDAO.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
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 de3dc77

Please sign in to comment.