from app.core.config import REPOSITORIES_DIR from app.services.github_service import GithubService from app.services.metadata_service import MetadataService from app.services.parser_service import ParserService from app.services.index_service import IndexService from app.services.graph_service import GraphService from app.services.resolver_service import ResolverService from app.services.embedding_service import EmbeddingService from app.utils.file_utils import get_python_files from app.core.constants import ( METADATA_FILE, CODE_INDEX_FILE, RESOLVED_CODE_FILE, ) class RepositoryController: def __init__(self): self.github = GithubService() self.metadata = MetadataService() self.parser = ParserService() self.index = IndexService() self.resolver = ResolverService() self.graph_service = GraphService() self.embedding_service = EmbeddingService() def clone( self, url: str, ): clone_result = self.github.clone( url, REPOSITORIES_DIR, ) repository_id = clone_result["repository_id"] repo_path = clone_result["repo_path"] metadata = self.metadata.extract( repo_path, ) self.index.save( repo_path, METADATA_FILE, metadata, ) parsed_files = [] for file in get_python_files(repo_path): parsed_files.append( self.parser.parse_file( file, ) ) self.index.save( repo_path, CODE_INDEX_FILE, parsed_files, ) code_index = [ item.model_dump() for item in parsed_files ] resolved = self.resolver.resolve( code_index, ) self.index.save( repo_path, RESOLVED_CODE_FILE, resolved, ) print("Building graph...") self.graph_service.build( repository_id=repository_id, resolved=resolved, ) print("Building embeddings...") self.embedding_service.build( repository_id=repository_id, resolved=resolved, ) print("Repository indexed successfully.") metadata.repository_id = repository_id return metadata