diff --git a/server/intelligence-service/app/detector/bad_practice_detector.py b/server/intelligence-service/app/detector/bad_practice_detector.py new file mode 100644 index 000000000..89c890c1c --- /dev/null +++ b/server/intelligence-service/app/detector/bad_practice_detector.py @@ -0,0 +1,25 @@ +from typing import List + +class PullRequest: + id: str + title: str + description: str + +class Rule: + name: str + description: str + bad_practice_id: str + +class PullRequestWithBadPractices: + pull_request_id: str + bad_practice_ids: List[str] + +def detectbadpractices(pull_requests: List[PullRequest], rules: List[Rule]) -> List[PullRequestWithBadPractices]: + bad_practices = [] + for pull_request in pull_requests: + bad_practice_ids = [] + for rule in rules: + if rule.bad_practice_id in pull_request.description: + bad_practice_ids.append(rule.bad_practice_id) + bad_practices.append(PullRequestWithBadPractices(pull_request_id=pull_request.id, bad_practice_ids=bad_practice_ids)) + return bad_practices \ No newline at end of file diff --git a/server/intelligence-service/app/main.py b/server/intelligence-service/app/main.py index 17fbcc5a9..cc682d91d 100644 --- a/server/intelligence-service/app/main.py +++ b/server/intelligence-service/app/main.py @@ -1,6 +1,7 @@ from fastapi import FastAPI from .routers.mentor import router as mentor_router from .routers.health import router as health_router +from .routers.detector import router as detector_router app = FastAPI( title="Hephaestus Intelligence Service API", @@ -11,3 +12,5 @@ app.include_router(mentor_router) app.include_router(health_router) + +app.include_router(detector_router) diff --git a/server/intelligence-service/app/routers/detector.py b/server/intelligence-service/app/routers/detector.py new file mode 100644 index 000000000..a7d011347 --- /dev/null +++ b/server/intelligence-service/app/routers/detector.py @@ -0,0 +1,22 @@ +from typing import List +from fastapi import APIRouter +from pydantic import BaseModel + +from app.detector.bad_practice_detector import PullRequestWithBadPractices, PullRequest, Rule, detectbadpractices + +router = APIRouter(prefix="/detector", tags=["detector"]) + +class DetectorRequest(BaseModel): + pull_requests: List[PullRequest] + rules: List[Rule] + +class DetectorResponse(BaseModel): + detectBadPractices: List[PullRequestWithBadPractices] + +@router.post( + "/", + response_model=DetectorResponse, + summary="Detect bad practices given rules.", +) +def detect(request: DetectorRequest): + return detectbadpractices(request.pull_requests, request.rules)