diff --git a/backend/analytics_server/mhq/api/resources/code_resouces.py b/backend/analytics_server/mhq/api/resources/code_resouces.py index 677680cdc..00684d6f0 100644 --- a/backend/analytics_server/mhq/api/resources/code_resouces.py +++ b/backend/analytics_server/mhq/api/resources/code_resouces.py @@ -1,7 +1,7 @@ from typing import Dict, List from mhq.service.code.models.lead_time import LeadTimeMetrics from mhq.api.resources.core_resources import adapt_user_info -from mhq.store.models.code import PullRequest +from mhq.store.models.code import PullRequest, OrgRepo from mhq.store.models.core import Users @@ -105,3 +105,21 @@ def adapt_lead_time_metrics(lead_time_metric: LeadTimeMetrics) -> Dict[str, any] "merge_to_deploy": lead_time_metric.merge_to_deploy, "pr_count": lead_time_metric.pr_count, } + + +def adapt_org_repo(org_repo: OrgRepo) -> Dict[str, any]: + return { + "id": str(org_repo.id), + "org_id": str(org_repo.org_id), + "name": org_repo.name, + "org_name": org_repo.org_name, + "provider": org_repo.provider, + "is_active": org_repo.is_active, + "default_branch": org_repo.default_branch, + "language": org_repo.language, + "contributors": org_repo.contributors, + "idempotency_key": org_repo.idempotency_key, + "slug": org_repo.slug, + "created_at": org_repo.created_at.isoformat(), + "updated_at": org_repo.updated_at.isoformat(), + } diff --git a/backend/analytics_server/mhq/api/teams.py b/backend/analytics_server/mhq/api/teams.py index 252909410..d504af937 100644 --- a/backend/analytics_server/mhq/api/teams.py +++ b/backend/analytics_server/mhq/api/teams.py @@ -1,6 +1,8 @@ from flask import Blueprint from typing import List from voluptuous import Required, Schema, Optional +from mhq.api.resources.code_resouces import adapt_org_repo +from mhq.service.code.repository_service import get_repository_service from mhq.api.resources.core_resources import adapt_team from mhq.store.models.core.teams import Team from mhq.service.core.teams import get_team_service @@ -77,3 +79,14 @@ def delete_team(team_id: str): team = team_service.delete_team(team_id) return adapt_team(team) + + +@app.route("/teams//repos", methods={"GET"}) +def fetch_team_repos(team_id: str): + + query_validator = get_query_validator() + team: Team = query_validator.team_validator(team_id) + + team_repos = get_repository_service().get_team_repos(team) + + return [adapt_org_repo(repo) for repo in team_repos] diff --git a/backend/analytics_server/mhq/service/code/repository_service.py b/backend/analytics_server/mhq/service/code/repository_service.py new file mode 100644 index 000000000..f702cab8d --- /dev/null +++ b/backend/analytics_server/mhq/service/code/repository_service.py @@ -0,0 +1,16 @@ +from typing import List +from mhq.store.models.code import OrgRepo +from mhq.store.models.core import Team +from mhq.store.repos.code import CodeRepoService + + +class RepositoryService: + def __init__(self, code_repo_service: CodeRepoService): + self._code_repo_service = code_repo_service + + def get_team_repos(self, team: Team) -> List[OrgRepo]: + return self._code_repo_service.get_team_repos(team_id=str(team.id)) + + +def get_repository_service(): + return RepositoryService(CodeRepoService())