diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/api/DetectorApi.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/api/DetectorApi.java
new file mode 100644
index 00000000..7a6b081f
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/api/DetectorApi.java
@@ -0,0 +1,117 @@
+package de.tum.in.www1.hephaestus.intelligenceservice.api;
+
+import de.tum.in.www1.hephaestus.intelligenceservice.ApiClient;
+import de.tum.in.www1.hephaestus.intelligenceservice.BaseApi;
+
+import de.tum.in.www1.hephaestus.intelligenceservice.model.DetectorRequest;
+import de.tum.in.www1.hephaestus.intelligenceservice.model.DetectorResponse;
+import de.tum.in.www1.hephaestus.intelligenceservice.model.HTTPValidationError;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class DetectorApi extends BaseApi {
+
+ public DetectorApi() {
+ super(new ApiClient());
+ }
+
+ public DetectorApi(ApiClient apiClient) {
+ super(apiClient);
+ }
+
+ /**
+ * Detect bad practices given rules.
+ *
+ *
200 - Successful Response
+ *
422 - Validation Error
+ * @param detectorRequest (required)
+ * @return DetectorResponse
+ * @throws RestClientException if an error occurs while attempting to invoke the API
+ */
+ public DetectorResponse detectDetectorPost(DetectorRequest detectorRequest) throws RestClientException {
+ return detectDetectorPostWithHttpInfo(detectorRequest).getBody();
+ }
+
+ /**
+ * Detect bad practices given rules.
+ *
+ *
200 - Successful Response
+ *
422 - Validation Error
+ * @param detectorRequest (required)
+ * @return ResponseEntity<DetectorResponse>
+ * @throws RestClientException if an error occurs while attempting to invoke the API
+ */
+ public ResponseEntity detectDetectorPostWithHttpInfo(DetectorRequest detectorRequest) throws RestClientException {
+ Object localVarPostBody = detectorRequest;
+
+ // verify the required parameter 'detectorRequest' is set
+ if (detectorRequest == null) {
+ throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'detectorRequest' when calling detectDetectorPost");
+ }
+
+
+ final MultiValueMap localVarQueryParams = new LinkedMultiValueMap();
+ final HttpHeaders localVarHeaderParams = new HttpHeaders();
+ final MultiValueMap localVarCookieParams = new LinkedMultiValueMap();
+ final MultiValueMap localVarFormParams = new LinkedMultiValueMap();
+
+ final String[] localVarAccepts = {
+ "application/json"
+ };
+ final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
+ final String[] localVarContentTypes = {
+ "application/json"
+ };
+ final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
+
+ String[] localVarAuthNames = new String[] { };
+
+ ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {};
+ return apiClient.invokeAPI("/detector/", HttpMethod.POST, Collections.emptyMap(), localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType);
+ }
+
+ @Override
+ public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException {
+ String localVarPath = url.replace(apiClient.getBasePath(), "");
+ Object localVarPostBody = request;
+
+ final Map uriVariables = new HashMap();
+ final MultiValueMap localVarQueryParams = new LinkedMultiValueMap();
+ final HttpHeaders localVarHeaderParams = new HttpHeaders();
+ final MultiValueMap localVarCookieParams = new LinkedMultiValueMap();
+ final MultiValueMap localVarFormParams = new LinkedMultiValueMap();
+
+ final String[] localVarAccepts = {
+ "application/json"
+ };
+ final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts);
+ final String[] localVarContentTypes = {
+ "application/json"
+ };
+ final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes);
+
+ String[] localVarAuthNames = new String[] { };
+
+ return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType);
+ }
+}
diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorRequest.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorRequest.java
new file mode 100644
index 00000000..f4bea958
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorRequest.java
@@ -0,0 +1,156 @@
+/*
+ * Hephaestus Intelligence Service API
+ * API documentation for the Hephaestus Intelligence Service.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Contact: felixtj.dietrich@tum.de
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package de.tum.in.www1.hephaestus.intelligenceservice.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import de.tum.in.www1.hephaestus.intelligenceservice.model.PullRequest;
+import de.tum.in.www1.hephaestus.intelligenceservice.model.Rule;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.hibernate.validator.constraints.*;
+
+/**
+ * DetectorRequest
+ */
+@JsonPropertyOrder({
+ DetectorRequest.JSON_PROPERTY_PULL_REQUESTS,
+ DetectorRequest.JSON_PROPERTY_RULES
+})
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class DetectorRequest {
+ public static final String JSON_PROPERTY_PULL_REQUESTS = "pull_requests";
+ private List pullRequests = new ArrayList<>();
+
+ public static final String JSON_PROPERTY_RULES = "rules";
+ private List rules = new ArrayList<>();
+
+ public DetectorRequest() {
+ }
+
+ public DetectorRequest pullRequests(List pullRequests) {
+
+ this.pullRequests = pullRequests;
+ return this;
+ }
+
+ public DetectorRequest addPullRequestsItem(PullRequest pullRequestsItem) {
+ if (this.pullRequests == null) {
+ this.pullRequests = new ArrayList<>();
+ }
+ this.pullRequests.add(pullRequestsItem);
+ return this;
+ }
+
+ /**
+ * Get pullRequests
+ * @return pullRequests
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_PULL_REQUESTS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public List getPullRequests() {
+ return pullRequests;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_PULL_REQUESTS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setPullRequests(List pullRequests) {
+ this.pullRequests = pullRequests;
+ }
+
+ public DetectorRequest rules(List rules) {
+
+ this.rules = rules;
+ return this;
+ }
+
+ public DetectorRequest addRulesItem(Rule rulesItem) {
+ if (this.rules == null) {
+ this.rules = new ArrayList<>();
+ }
+ this.rules.add(rulesItem);
+ return this;
+ }
+
+ /**
+ * Get rules
+ * @return rules
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_RULES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public List getRules() {
+ return rules;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_RULES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setRules(List rules) {
+ this.rules = rules;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DetectorRequest detectorRequest = (DetectorRequest) o;
+ return Objects.equals(this.pullRequests, detectorRequest.pullRequests) &&
+ Objects.equals(this.rules, detectorRequest.rules);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(pullRequests, rules);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DetectorRequest {\n");
+ sb.append(" pullRequests: ").append(toIndentedString(pullRequests)).append("\n");
+ sb.append(" rules: ").append(toIndentedString(rules)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorResponse.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorResponse.java
new file mode 100644
index 00000000..582db519
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/DetectorResponse.java
@@ -0,0 +1,116 @@
+/*
+ * Hephaestus Intelligence Service API
+ * API documentation for the Hephaestus Intelligence Service.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Contact: felixtj.dietrich@tum.de
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package de.tum.in.www1.hephaestus.intelligenceservice.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import de.tum.in.www1.hephaestus.intelligenceservice.model.PullRequestWithBadPractices;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.hibernate.validator.constraints.*;
+
+/**
+ * DetectorResponse
+ */
+@JsonPropertyOrder({
+ DetectorResponse.JSON_PROPERTY_DETECT_BAD_PRACTICES
+})
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class DetectorResponse {
+ public static final String JSON_PROPERTY_DETECT_BAD_PRACTICES = "detectBadPractices";
+ private List detectBadPractices = new ArrayList<>();
+
+ public DetectorResponse() {
+ }
+
+ public DetectorResponse detectBadPractices(List detectBadPractices) {
+
+ this.detectBadPractices = detectBadPractices;
+ return this;
+ }
+
+ public DetectorResponse addDetectBadPracticesItem(PullRequestWithBadPractices detectBadPracticesItem) {
+ if (this.detectBadPractices == null) {
+ this.detectBadPractices = new ArrayList<>();
+ }
+ this.detectBadPractices.add(detectBadPracticesItem);
+ return this;
+ }
+
+ /**
+ * Get detectBadPractices
+ * @return detectBadPractices
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_DETECT_BAD_PRACTICES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public List getDetectBadPractices() {
+ return detectBadPractices;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_DETECT_BAD_PRACTICES)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setDetectBadPractices(List detectBadPractices) {
+ this.detectBadPractices = detectBadPractices;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DetectorResponse detectorResponse = (DetectorResponse) o;
+ return Objects.equals(this.detectBadPractices, detectorResponse.detectBadPractices);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(detectBadPractices);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DetectorResponse {\n");
+ sb.append(" detectBadPractices: ").append(toIndentedString(detectBadPractices)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequest.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequest.java
new file mode 100644
index 00000000..f00e3624
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequest.java
@@ -0,0 +1,166 @@
+/*
+ * Hephaestus Intelligence Service API
+ * API documentation for the Hephaestus Intelligence Service.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Contact: felixtj.dietrich@tum.de
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package de.tum.in.www1.hephaestus.intelligenceservice.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.hibernate.validator.constraints.*;
+
+/**
+ * PullRequest
+ */
+@JsonPropertyOrder({
+ PullRequest.JSON_PROPERTY_DESCRIPTION,
+ PullRequest.JSON_PROPERTY_ID,
+ PullRequest.JSON_PROPERTY_TITLE
+})
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class PullRequest {
+ public static final String JSON_PROPERTY_DESCRIPTION = "description";
+ private String description;
+
+ public static final String JSON_PROPERTY_ID = "id";
+ private String id;
+
+ public static final String JSON_PROPERTY_TITLE = "title";
+ private String title;
+
+ public PullRequest() {
+ }
+
+ public PullRequest description(String description) {
+
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Get description
+ * @return description
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getDescription() {
+ return description;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public PullRequest id(String id) {
+
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * Get id
+ * @return id
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getId() {
+ return id;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public PullRequest title(String title) {
+
+ this.title = title;
+ return this;
+ }
+
+ /**
+ * Get title
+ * @return title
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_TITLE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getTitle() {
+ return title;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_TITLE)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ PullRequest pullRequest = (PullRequest) o;
+ return Objects.equals(this.description, pullRequest.description) &&
+ Objects.equals(this.id, pullRequest.id) &&
+ Objects.equals(this.title, pullRequest.title);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(description, id, title);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class PullRequest {\n");
+ sb.append(" description: ").append(toIndentedString(description)).append("\n");
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append(" title: ").append(toIndentedString(title)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequestWithBadPractices.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequestWithBadPractices.java
new file mode 100644
index 00000000..7993f037
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/PullRequestWithBadPractices.java
@@ -0,0 +1,146 @@
+/*
+ * Hephaestus Intelligence Service API
+ * API documentation for the Hephaestus Intelligence Service.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Contact: felixtj.dietrich@tum.de
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package de.tum.in.www1.hephaestus.intelligenceservice.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.hibernate.validator.constraints.*;
+
+/**
+ * PullRequestWithBadPractices
+ */
+@JsonPropertyOrder({
+ PullRequestWithBadPractices.JSON_PROPERTY_BAD_PRACTICE_IDS,
+ PullRequestWithBadPractices.JSON_PROPERTY_PULL_REQUEST_ID
+})
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class PullRequestWithBadPractices {
+ public static final String JSON_PROPERTY_BAD_PRACTICE_IDS = "bad_practice_ids";
+ private List badPracticeIds = new ArrayList<>();
+
+ public static final String JSON_PROPERTY_PULL_REQUEST_ID = "pull_request_id";
+ private String pullRequestId;
+
+ public PullRequestWithBadPractices() {
+ }
+
+ public PullRequestWithBadPractices badPracticeIds(List badPracticeIds) {
+
+ this.badPracticeIds = badPracticeIds;
+ return this;
+ }
+
+ public PullRequestWithBadPractices addBadPracticeIdsItem(String badPracticeIdsItem) {
+ if (this.badPracticeIds == null) {
+ this.badPracticeIds = new ArrayList<>();
+ }
+ this.badPracticeIds.add(badPracticeIdsItem);
+ return this;
+ }
+
+ /**
+ * Get badPracticeIds
+ * @return badPracticeIds
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_BAD_PRACTICE_IDS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public List getBadPracticeIds() {
+ return badPracticeIds;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_BAD_PRACTICE_IDS)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setBadPracticeIds(List badPracticeIds) {
+ this.badPracticeIds = badPracticeIds;
+ }
+
+ public PullRequestWithBadPractices pullRequestId(String pullRequestId) {
+
+ this.pullRequestId = pullRequestId;
+ return this;
+ }
+
+ /**
+ * Get pullRequestId
+ * @return pullRequestId
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_PULL_REQUEST_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getPullRequestId() {
+ return pullRequestId;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_PULL_REQUEST_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setPullRequestId(String pullRequestId) {
+ this.pullRequestId = pullRequestId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ PullRequestWithBadPractices pullRequestWithBadPractices = (PullRequestWithBadPractices) o;
+ return Objects.equals(this.badPracticeIds, pullRequestWithBadPractices.badPracticeIds) &&
+ Objects.equals(this.pullRequestId, pullRequestWithBadPractices.pullRequestId);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(badPracticeIds, pullRequestId);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class PullRequestWithBadPractices {\n");
+ sb.append(" badPracticeIds: ").append(toIndentedString(badPracticeIds)).append("\n");
+ sb.append(" pullRequestId: ").append(toIndentedString(pullRequestId)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/Rule.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/Rule.java
new file mode 100644
index 00000000..22e0111e
--- /dev/null
+++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/intelligenceservice/model/Rule.java
@@ -0,0 +1,166 @@
+/*
+ * Hephaestus Intelligence Service API
+ * API documentation for the Hephaestus Intelligence Service.
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Contact: felixtj.dietrich@tum.de
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package de.tum.in.www1.hephaestus.intelligenceservice.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import org.hibernate.validator.constraints.*;
+
+/**
+ * Rule
+ */
+@JsonPropertyOrder({
+ Rule.JSON_PROPERTY_BAD_PRACTICE_ID,
+ Rule.JSON_PROPERTY_DESCRIPTION,
+ Rule.JSON_PROPERTY_NAME
+})
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.7.0")
+public class Rule {
+ public static final String JSON_PROPERTY_BAD_PRACTICE_ID = "bad_practice_id";
+ private String badPracticeId;
+
+ public static final String JSON_PROPERTY_DESCRIPTION = "description";
+ private String description;
+
+ public static final String JSON_PROPERTY_NAME = "name";
+ private String name;
+
+ public Rule() {
+ }
+
+ public Rule badPracticeId(String badPracticeId) {
+
+ this.badPracticeId = badPracticeId;
+ return this;
+ }
+
+ /**
+ * Get badPracticeId
+ * @return badPracticeId
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_BAD_PRACTICE_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getBadPracticeId() {
+ return badPracticeId;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_BAD_PRACTICE_ID)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setBadPracticeId(String badPracticeId) {
+ this.badPracticeId = badPracticeId;
+ }
+
+ public Rule description(String description) {
+
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Get description
+ * @return description
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getDescription() {
+ return description;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Rule name(String name) {
+
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+ @jakarta.annotation.Nonnull
+ @JsonProperty(JSON_PROPERTY_NAME)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+ public String getName() {
+ return name;
+ }
+
+
+ @JsonProperty(JSON_PROPERTY_NAME)
+ @JsonInclude(value = JsonInclude.Include.ALWAYS)
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Rule rule = (Rule) o;
+ return Objects.equals(this.badPracticeId, rule.badPracticeId) &&
+ Objects.equals(this.description, rule.description) &&
+ Objects.equals(this.name, rule.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(badPracticeId, description, name);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Rule {\n");
+ sb.append(" badPracticeId: ").append(toIndentedString(badPracticeId)).append("\n");
+ sb.append(" description: ").append(toIndentedString(description)).append("\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/server/intelligence-service/openapi.yaml b/server/intelligence-service/openapi.yaml
index 964034da..30f186af 100644
--- a/server/intelligence-service/openapi.yaml
+++ b/server/intelligence-service/openapi.yaml
@@ -1,5 +1,33 @@
components:
schemas:
+ DetectorRequest:
+ properties:
+ pull_requests:
+ items:
+ $ref: '#/components/schemas/PullRequest'
+ title: Pull Requests
+ type: array
+ rules:
+ items:
+ $ref: '#/components/schemas/Rule'
+ title: Rules
+ type: array
+ required:
+ - pull_requests
+ - rules
+ title: DetectorRequest
+ type: object
+ DetectorResponse:
+ properties:
+ detectBadPractices:
+ items:
+ $ref: '#/components/schemas/PullRequestWithBadPractices'
+ title: Detectbadpractices
+ type: array
+ required:
+ - detectBadPractices
+ title: DetectorResponse
+ type: object
HTTPValidationError:
properties:
detail:
@@ -58,6 +86,55 @@ components:
- dev_progress
title: MentorStartRequest
type: object
+ PullRequest:
+ properties:
+ description:
+ title: Description
+ type: string
+ id:
+ title: Id
+ type: string
+ title:
+ title: Title
+ type: string
+ required:
+ - id
+ - title
+ - description
+ title: PullRequest
+ type: object
+ PullRequestWithBadPractices:
+ properties:
+ bad_practice_ids:
+ items:
+ type: string
+ title: Bad Practice Ids
+ type: array
+ pull_request_id:
+ title: Pull Request Id
+ type: string
+ required:
+ - pull_request_id
+ - bad_practice_ids
+ title: PullRequestWithBadPractices
+ type: object
+ Rule:
+ properties:
+ bad_practice_id:
+ title: Bad Practice Id
+ type: string
+ description:
+ title: Description
+ type: string
+ name:
+ title: Name
+ type: string
+ required:
+ - name
+ - description
+ - bad_practice_id
+ title: Rule
+ type: object
ValidationError:
properties:
loc:
@@ -88,6 +165,31 @@ info:
version: 0.0.1
openapi: 3.1.0
paths:
+ /detector/:
+ post:
+ operationId: detect_detector__post
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DetectorRequest'
+ required: true
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DetectorResponse'
+ description: Successful Response
+ '422':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ description: Validation Error
+ summary: Detect bad practices given rules.
+ tags:
+ - detector
/health:
get:
description: "## Perform a Health Check\nEndpoint to perform a healthcheck on.\