From a0cd6c55f883c7689f1665d921602b2c5dcea1aa Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Mon, 22 Dec 2025 15:09:26 +0100 Subject: [PATCH 1/4] Initial merge request support --- GenerateGitlabClient.java | 24 ++++++ .../graphql/gitlab/api/WorkitemClientApi.java | 8 ++ .../graphql/gitlab/model/MergeRequest.java | 74 +++++++++++++++++++ .../graphql/gitlab/model/MergeRequestID.java | 50 +++++++++++++ .../java/graphql/gitlab/model/Todoable.java | 1 + 5 files changed, 157 insertions(+) create mode 100644 src/main/java/graphql/gitlab/model/MergeRequest.java create mode 100644 src/main/java/graphql/gitlab/model/MergeRequestID.java diff --git a/GenerateGitlabClient.java b/GenerateGitlabClient.java index 8a6de59..5e87fad 100755 --- a/GenerateGitlabClient.java +++ b/GenerateGitlabClient.java @@ -211,6 +211,7 @@ public static Config createConfig(Schema schema) { .addIncludeName("EpicListConnection") // .addIncludeName("EpicList") // .addIncludeName("CurrentUser") // + .addIncludeName("MergeRequest") // // --- ADDITIONAL TYPES --- .addIncludeName("WorkItemRef") // .addIncludeName("WorkItemConnectionRef") // @@ -477,6 +478,12 @@ public static Config createConfig(Schema schema) { .setFieldName("todoMarkDone") .setJavaMethodName("todoMarkDone") // ) + .addHint(new FieldHint() + .setTypeKind(Kind.OBJECT) + .setTypeName(SchemaUtil.getQueryType(schema) + .getName()) + .setFieldName("mergeRequest") + ) .addFilter(typesFilter)// .addFilter(new TypesFilter() .setTypeKind(Kind.SCALAR) @@ -494,6 +501,7 @@ public static Config createConfig(Schema schema) { .addIncludeName("DiscussionID") // .addIncludeName("NoteableID") // .addIncludeName("MilestoneID") // + .addIncludeName("MergeRequestID") // .addIncludeName("NoteID") // .addIncludeName("TodoID") // .addIncludeName("WorkItemID") // @@ -504,6 +512,7 @@ public static Config createConfig(Schema schema) { .setTypeKind(Kind.INTERFACE) // .addIncludeName("User") // .addIncludeName("Todoable") // + // .addIncludeName("NoteableInterface") // // .addIncludeName("TimeboxReportInterface") // // .addIncludeName("CurrentUserTodos") // // .addIncludeName("WorkItemWidgetDefinition") // @@ -541,6 +550,7 @@ public static Config createConfig(Schema schema) { .addIncludeName("boardList") // .addIncludeName("epicBoardList") // .addIncludeName("currentUser") // + .addIncludeName("mergeRequest") // ) // .addFilter(new ArgsFilter() .setTypeKind(Kind.OBJECT) @@ -592,6 +602,13 @@ public static Config createConfig(Schema schema) { .setFieldName("epicBoardList") // .addIncludeName("id") // ) // + .addFilter(new ArgsFilter() + .setTypeKind(Kind.OBJECT) + .setTypeName(schema.getQueryType() + .getName()) + .setFieldName("mergeRequest") // + .addIncludeName("id") // + ) // .addFilter(new FieldsFilter() .setTypeKind(Kind.OBJECT) .setTypeName("WorkItemConnection") @@ -1680,6 +1697,13 @@ public static Config createConfig(Schema schema) { .addIncludeName("clientMutationId") // .addIncludeName("todo") // ) // + .addFilter(new FieldsFilter() + .setTypeKind(Kind.OBJECT) + .setTypeName("MergeRequest") // + .addIncludeName("id") // + .addIncludeName("title") // + .addIncludeName("webUrl") // + ) // .addFilter(new InputFieldsFilter() .setTypeKind(Kind.INPUT_OBJECT) .setTypeName("WorkItemWidgetAssigneesInput") diff --git a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java index e3d1f61..322ae37 100644 --- a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java +++ b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java @@ -45,6 +45,8 @@ import graphql.gitlab.model.GroupContainingSingleEpicBoard; import graphql.gitlab.model.GroupContainingSingleIssueBoard; import graphql.gitlab.model.ListID; +import graphql.gitlab.model.MergeRequest; +import graphql.gitlab.model.MergeRequestID; import graphql.gitlab.model.Namespace; import graphql.gitlab.model.NotesFilterType; import graphql.gitlab.model.Project; @@ -112,6 +114,12 @@ public interface WorkitemClientApi { @Query("group") GroupContainingEpicBoards getEpicBoardsInGroup(@Name("fullPath") @NonNull @Id String fullPath); + /** + * Find a merge request. + */ + @Query("mergeRequest") + MergeRequest mergeRequest(@Name("id") @NonNull MergeRequestID id); + /** * Find a namespace. */ diff --git a/src/main/java/graphql/gitlab/model/MergeRequest.java b/src/main/java/graphql/gitlab/model/MergeRequest.java new file mode 100644 index 0000000..771bed9 --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequest.java @@ -0,0 +1,74 @@ +package graphql.gitlab.model; + +import java.util.Objects; + +import org.eclipse.microprofile.graphql.Name; + +@Name("MergeRequest") +public class MergeRequest implements Todoable { + + /** + * ID of the merge request. + */ + private String id; + + /** + * Title of the merge request. + */ + private String title; + + /** + * Web URL of the merge request. + */ + private String webUrl; + + public String getId() { + return id; + } + + public MergeRequest setId(String id) { + this.id = id; + return this; + } + + public String getTitle() { + return title; + } + + public MergeRequest setTitle(String title) { + this.title = title; + return this; + } + + public String getWebUrl() { + return webUrl; + } + + public MergeRequest setWebUrl(String webUrl) { + this.webUrl = webUrl; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(id, title, webUrl); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MergeRequest other = (MergeRequest) obj; + return Objects.equals(id, other.id) && Objects.equals(title, other.title) && Objects.equals(webUrl, other.webUrl); + } + + @Override + public String toString() { + return "MergeRequest [id=" + id + ", title=" + title + ", webUrl=" + webUrl + "]"; + } + +} diff --git a/src/main/java/graphql/gitlab/model/MergeRequestID.java b/src/main/java/graphql/gitlab/model/MergeRequestID.java new file mode 100644 index 0000000..3a962b2 --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequestID.java @@ -0,0 +1,50 @@ +package graphql.gitlab.model; + +import java.util.Objects; + +import org.eclipse.microprofile.graphql.Name; + +/** + * A `MergeRequestID` is a global ID. It is encoded as a string. + * + * An example `MergeRequestID` is: `"gid://gitlab/MergeRequest/1"`. + */ +@Name("MergeRequestID") +public class MergeRequestID { + + private String value; + + public MergeRequestID(String value) { + this.value = value; + } + + public static MergeRequestID valueOf(String value) { + return new MergeRequestID(value); + } + + @Override + public String toString() { + return value; + } + + public String getValue() { + return value; + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MergeRequestID other = (MergeRequestID) obj; + return Objects.equals(value, other.value); + } +} diff --git a/src/main/java/graphql/gitlab/model/Todoable.java b/src/main/java/graphql/gitlab/model/Todoable.java index d5c3d15..8192e82 100644 --- a/src/main/java/graphql/gitlab/model/Todoable.java +++ b/src/main/java/graphql/gitlab/model/Todoable.java @@ -10,6 +10,7 @@ @JsonbTypeInfo(key = "__typename", value = { @JsonbSubtype(alias = "CurrentUser", type = CurrentUser.class), @JsonbSubtype(alias = "Group", type = Group.class), + @JsonbSubtype(alias = "MergeRequest", type = MergeRequest.class), @JsonbSubtype(alias = "Namespace", type = Namespace.class), @JsonbSubtype(alias = "Project", type = Project.class), @JsonbSubtype(alias = "UserCore", type = UserCore.class), From a0b0845f31ef0e34bb3f37b6dab07ca08b4aefb8 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Mon, 22 Dec 2025 15:21:40 +0100 Subject: [PATCH 2/4] Change method name --- GenerateGitlabClient.java | 1 + src/main/java/graphql/gitlab/api/WorkitemClientApi.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/GenerateGitlabClient.java b/GenerateGitlabClient.java index 5e87fad..5a3f3a8 100755 --- a/GenerateGitlabClient.java +++ b/GenerateGitlabClient.java @@ -483,6 +483,7 @@ public static Config createConfig(Schema schema) { .setTypeName(SchemaUtil.getQueryType(schema) .getName()) .setFieldName("mergeRequest") + .setJavaMethodName("getMergeRequest") ) .addFilter(typesFilter)// .addFilter(new TypesFilter() diff --git a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java index 322ae37..102316f 100644 --- a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java +++ b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java @@ -118,7 +118,7 @@ public interface WorkitemClientApi { * Find a merge request. */ @Query("mergeRequest") - MergeRequest mergeRequest(@Name("id") @NonNull MergeRequestID id); + MergeRequest getMergeRequest(@Name("id") @NonNull MergeRequestID id); /** * Find a namespace. From ab2fc7a8106879b0f268e546a40e2bef633d0e5c Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Mon, 22 Dec 2025 15:50:44 +0100 Subject: [PATCH 3/4] Add more attributes --- GenerateGitlabClient.java | 9 ++ .../graphql/gitlab/model/MergeRequest.java | 132 +++++++++++++++++- .../gitlab/model/MergeRequestAuthor.java | 77 ++++++++++ .../gitlab/model/MergeRequestReviewer.java | 77 ++++++++++ .../model/MergeRequestReviewerConnection.java | 50 +++++++ .../gitlab/model/MergeRequestState.java | 32 +++++ .../java/graphql/gitlab/model/Todoable.java | 2 + .../java/graphql/gitlab/model/UserType.java | 84 +++++++++++ 8 files changed, 460 insertions(+), 3 deletions(-) create mode 100644 src/main/java/graphql/gitlab/model/MergeRequestAuthor.java create mode 100644 src/main/java/graphql/gitlab/model/MergeRequestReviewer.java create mode 100644 src/main/java/graphql/gitlab/model/MergeRequestReviewerConnection.java create mode 100644 src/main/java/graphql/gitlab/model/MergeRequestState.java create mode 100644 src/main/java/graphql/gitlab/model/UserType.java diff --git a/GenerateGitlabClient.java b/GenerateGitlabClient.java index 5a3f3a8..b188031 100755 --- a/GenerateGitlabClient.java +++ b/GenerateGitlabClient.java @@ -1704,6 +1704,15 @@ public static Config createConfig(Schema schema) { .addIncludeName("id") // .addIncludeName("title") // .addIncludeName("webUrl") // + .addIncludeName("labels") // + .addIncludeName("author") // + .addIncludeName("description") // + .addIncludeName("state") // + .addIncludeName("sourceBranch") // + .addIncludeName("targetBranch") // + .addIncludeName("draft") // + .addIncludeName("reviewers") // + .addIncludeName("approvedBy") // ) // .addFilter(new InputFieldsFilter() .setTypeKind(Kind.INPUT_OBJECT) diff --git a/src/main/java/graphql/gitlab/model/MergeRequest.java b/src/main/java/graphql/gitlab/model/MergeRequest.java index 771bed9..d386dd9 100644 --- a/src/main/java/graphql/gitlab/model/MergeRequest.java +++ b/src/main/java/graphql/gitlab/model/MergeRequest.java @@ -7,11 +7,56 @@ @Name("MergeRequest") public class MergeRequest implements Todoable { + /** + * Users who approved the merge request. + */ + private UserCoreConnection approvedBy; + + /** + * User who created the merge request. + */ + private MergeRequestAuthor author; + + /** + * Description of the merge request (Markdown rendered as HTML for caching). + */ + private String description; + + /** + * Indicates if the merge request is a draft. + */ + private Boolean draft; + /** * ID of the merge request. */ private String id; + /** + * Labels of the merge request. + */ + private LabelConnection labels; + + /** + * Users from whom a review has been requested. + */ + private MergeRequestReviewerConnection reviewers; + + /** + * Source branch of the merge request. + */ + private String sourceBranch; + + /** + * State of the merge request. + */ + private MergeRequestState state; + + /** + * Target branch of the merge request. + */ + private String targetBranch; + /** * Title of the merge request. */ @@ -22,6 +67,42 @@ public class MergeRequest implements Todoable { */ private String webUrl; + public UserCoreConnection getApprovedBy() { + return approvedBy; + } + + public MergeRequest setApprovedBy(UserCoreConnection approvedBy) { + this.approvedBy = approvedBy; + return this; + } + + public MergeRequestAuthor getAuthor() { + return author; + } + + public MergeRequest setAuthor(MergeRequestAuthor author) { + this.author = author; + return this; + } + + public String getDescription() { + return description; + } + + public MergeRequest setDescription(String description) { + this.description = description; + return this; + } + + public Boolean getDraft() { + return draft; + } + + public MergeRequest setDraft(Boolean draft) { + this.draft = draft; + return this; + } + public String getId() { return id; } @@ -31,6 +112,51 @@ public MergeRequest setId(String id) { return this; } + public LabelConnection getLabels() { + return labels; + } + + public MergeRequest setLabels(LabelConnection labels) { + this.labels = labels; + return this; + } + + public MergeRequestReviewerConnection getReviewers() { + return reviewers; + } + + public MergeRequest setReviewers(MergeRequestReviewerConnection reviewers) { + this.reviewers = reviewers; + return this; + } + + public String getSourceBranch() { + return sourceBranch; + } + + public MergeRequest setSourceBranch(String sourceBranch) { + this.sourceBranch = sourceBranch; + return this; + } + + public MergeRequestState getState() { + return state; + } + + public MergeRequest setState(MergeRequestState state) { + this.state = state; + return this; + } + + public String getTargetBranch() { + return targetBranch; + } + + public MergeRequest setTargetBranch(String targetBranch) { + this.targetBranch = targetBranch; + return this; + } + public String getTitle() { return title; } @@ -51,7 +177,7 @@ public MergeRequest setWebUrl(String webUrl) { @Override public int hashCode() { - return Objects.hash(id, title, webUrl); + return Objects.hash(approvedBy, author, description, draft, id, labels, reviewers, sourceBranch, state, targetBranch, title, webUrl); } @Override @@ -63,12 +189,12 @@ public boolean equals(Object obj) { if (getClass() != obj.getClass()) return false; MergeRequest other = (MergeRequest) obj; - return Objects.equals(id, other.id) && Objects.equals(title, other.title) && Objects.equals(webUrl, other.webUrl); + return Objects.equals(approvedBy, other.approvedBy) && Objects.equals(author, other.author) && Objects.equals(description, other.description) && Objects.equals(draft, other.draft) && Objects.equals(id, other.id) && Objects.equals(labels, other.labels) && Objects.equals(reviewers, other.reviewers) && Objects.equals(sourceBranch, other.sourceBranch) && Objects.equals(state, other.state) && Objects.equals(targetBranch, other.targetBranch) && Objects.equals(title, other.title) && Objects.equals(webUrl, other.webUrl); } @Override public String toString() { - return "MergeRequest [id=" + id + ", title=" + title + ", webUrl=" + webUrl + "]"; + return "MergeRequest [approvedBy=" + approvedBy + ", author=" + author + ", description=" + description + ", draft=" + draft + ", id=" + id + ", labels=" + labels + ", reviewers=" + reviewers + ", sourceBranch=" + sourceBranch + ", state=" + state + ", targetBranch=" + targetBranch + ", title=" + title + ", webUrl=" + webUrl + "]"; } } diff --git a/src/main/java/graphql/gitlab/model/MergeRequestAuthor.java b/src/main/java/graphql/gitlab/model/MergeRequestAuthor.java new file mode 100644 index 0000000..453500f --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequestAuthor.java @@ -0,0 +1,77 @@ +package graphql.gitlab.model; + +import java.util.Objects; + +import org.eclipse.microprofile.graphql.Name; + +/** + * The author of the merge request. + */ +@Name("MergeRequestAuthor") +public class MergeRequestAuthor implements Todoable { + + /** + * Global ID of the user. + */ + private UserID id; + + /** + * Type of the user. + */ + private UserType type; + + /** + * Username of the user. Unique within the instance of GitLab. + */ + private String username; + + public UserID getId() { + return id; + } + + public MergeRequestAuthor setId(UserID id) { + this.id = id; + return this; + } + + public UserType getType() { + return type; + } + + public MergeRequestAuthor setType(UserType type) { + this.type = type; + return this; + } + + public String getUsername() { + return username; + } + + public MergeRequestAuthor setUsername(String username) { + this.username = username; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(id, type, username); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MergeRequestAuthor other = (MergeRequestAuthor) obj; + return Objects.equals(id, other.id) && Objects.equals(type, other.type) && Objects.equals(username, other.username); + } + + @Override + public String toString() { + return "MergeRequestAuthor [id=" + id + ", type=" + type + ", username=" + username + "]"; + } + +} diff --git a/src/main/java/graphql/gitlab/model/MergeRequestReviewer.java b/src/main/java/graphql/gitlab/model/MergeRequestReviewer.java new file mode 100644 index 0000000..0921098 --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequestReviewer.java @@ -0,0 +1,77 @@ +package graphql.gitlab.model; + +import java.util.Objects; + +import org.eclipse.microprofile.graphql.Name; + +/** + * A user assigned to a merge request as a reviewer. + */ +@Name("MergeRequestReviewer") +public class MergeRequestReviewer implements Todoable { + + /** + * Global ID of the user. + */ + private UserID id; + + /** + * Type of the user. + */ + private UserType type; + + /** + * Username of the user. Unique within the instance of GitLab. + */ + private String username; + + public UserID getId() { + return id; + } + + public MergeRequestReviewer setId(UserID id) { + this.id = id; + return this; + } + + public UserType getType() { + return type; + } + + public MergeRequestReviewer setType(UserType type) { + this.type = type; + return this; + } + + public String getUsername() { + return username; + } + + public MergeRequestReviewer setUsername(String username) { + this.username = username; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(id, type, username); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MergeRequestReviewer other = (MergeRequestReviewer) obj; + return Objects.equals(id, other.id) && Objects.equals(type, other.type) && Objects.equals(username, other.username); + } + + @Override + public String toString() { + return "MergeRequestReviewer [id=" + id + ", type=" + type + ", username=" + username + "]"; + } + +} diff --git a/src/main/java/graphql/gitlab/model/MergeRequestReviewerConnection.java b/src/main/java/graphql/gitlab/model/MergeRequestReviewerConnection.java new file mode 100644 index 0000000..d010675 --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequestReviewerConnection.java @@ -0,0 +1,50 @@ +package graphql.gitlab.model; + +import java.util.List; +import java.util.Objects; + +import org.eclipse.microprofile.graphql.Name; + +/** + * The connection type for MergeRequestReviewer. + */ +@Name("MergeRequestReviewerConnection") +public class MergeRequestReviewerConnection { + + /** + * A list of nodes. + */ + private List nodes; + + public List getNodes() { + return nodes; + } + + public MergeRequestReviewerConnection setNodes(List nodes) { + this.nodes = nodes; + return this; + } + + @Override + public int hashCode() { + return Objects.hash(nodes); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MergeRequestReviewerConnection other = (MergeRequestReviewerConnection) obj; + return Objects.equals(nodes, other.nodes); + } + + @Override + public String toString() { + return "MergeRequestReviewerConnection [nodes=" + nodes + "]"; + } + +} diff --git a/src/main/java/graphql/gitlab/model/MergeRequestState.java b/src/main/java/graphql/gitlab/model/MergeRequestState.java new file mode 100644 index 0000000..96a5231 --- /dev/null +++ b/src/main/java/graphql/gitlab/model/MergeRequestState.java @@ -0,0 +1,32 @@ +package graphql.gitlab.model; + +import org.eclipse.microprofile.graphql.Name; + +/** + * State of a GitLab merge request + */ +@Name("MergeRequestState") +public enum MergeRequestState { + + /** + * Merge request has been merged. + */ + merged, + /** + * Opened merge request. + */ + opened, + /** + * In closed state. + */ + closed, + /** + * Discussion has been locked. + */ + locked, + /** + * All available. + */ + all; + +} diff --git a/src/main/java/graphql/gitlab/model/Todoable.java b/src/main/java/graphql/gitlab/model/Todoable.java index 8192e82..839415d 100644 --- a/src/main/java/graphql/gitlab/model/Todoable.java +++ b/src/main/java/graphql/gitlab/model/Todoable.java @@ -11,6 +11,8 @@ @JsonbSubtype(alias = "CurrentUser", type = CurrentUser.class), @JsonbSubtype(alias = "Group", type = Group.class), @JsonbSubtype(alias = "MergeRequest", type = MergeRequest.class), + @JsonbSubtype(alias = "MergeRequestAuthor", type = MergeRequestAuthor.class), + @JsonbSubtype(alias = "MergeRequestReviewer", type = MergeRequestReviewer.class), @JsonbSubtype(alias = "Namespace", type = Namespace.class), @JsonbSubtype(alias = "Project", type = Project.class), @JsonbSubtype(alias = "UserCore", type = UserCore.class), diff --git a/src/main/java/graphql/gitlab/model/UserType.java b/src/main/java/graphql/gitlab/model/UserType.java new file mode 100644 index 0000000..0cc510d --- /dev/null +++ b/src/main/java/graphql/gitlab/model/UserType.java @@ -0,0 +1,84 @@ +package graphql.gitlab.model; + +import org.eclipse.microprofile.graphql.Name; + +/** + * Possible types of user + */ +@Name("UserType") +public enum UserType { + + /** + * Human + */ + HUMAN, + /** + * Support bot + */ + SUPPORT_BOT, + /** + * Alert bot + */ + ALERT_BOT, + /** + * Visual review bot + */ + VISUAL_REVIEW_BOT, + /** + * Service user + */ + SERVICE_USER, + /** + * Ghost + */ + GHOST, + /** + * Project bot + */ + PROJECT_BOT, + /** + * Migration bot + */ + MIGRATION_BOT, + /** + * Security bot + */ + SECURITY_BOT, + /** + * Automation bot + */ + AUTOMATION_BOT, + /** + * Security policy bot + */ + SECURITY_POLICY_BOT, + /** + * Admin bot + */ + ADMIN_BOT, + /** + * Suggested reviewers bot + */ + SUGGESTED_REVIEWERS_BOT, + /** + * Service account + */ + SERVICE_ACCOUNT, + /** + * Llm bot + */ + LLM_BOT, + /** + * Placeholder + */ + PLACEHOLDER, + /** + * Duo code review bot + */ + DUO_CODE_REVIEW_BOT, + /** + * Import user + */ + IMPORT_USER; + +} From f62179a9061fdbb46ab3dbfd58eb279d254d4d9a Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Mon, 22 Dec 2025 16:11:11 +0100 Subject: [PATCH 4/4] Add "notes" to merge-request --- GenerateGitlabClient.java | 31 +++++++++++++++++++ .../graphql/gitlab/api/WorkitemClientApi.java | 2 +- .../graphql/gitlab/model/MergeRequest.java | 20 ++++++++++-- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/GenerateGitlabClient.java b/GenerateGitlabClient.java index b188031..b5628ad 100755 --- a/GenerateGitlabClient.java +++ b/GenerateGitlabClient.java @@ -212,6 +212,9 @@ public static Config createConfig(Schema schema) { .addIncludeName("EpicList") // .addIncludeName("CurrentUser") // .addIncludeName("MergeRequest") // + .addIncludeName("MergeRequestAuthor") // + .addIncludeName("MergeRequestReviewerConnection") // + .addIncludeName("MergeRequestReviewer") // // --- ADDITIONAL TYPES --- .addIncludeName("WorkItemRef") // .addIncludeName("WorkItemConnectionRef") // @@ -484,6 +487,12 @@ public static Config createConfig(Schema schema) { .getName()) .setFieldName("mergeRequest") .setJavaMethodName("getMergeRequest") + .addNestedParameter(new NestedParameter() + .setGraphQlNestedParameterPath("notes") + .setGraphQlName("filter") + .setParameterType("{ModelPackageName}.NotesFilterType") // + .setParameterName("filter") // + ) // ) .addFilter(typesFilter)// .addFilter(new TypesFilter() @@ -534,6 +543,8 @@ public static Config createConfig(Schema schema) { .addIncludeName("TodoActionEnum") // .addIncludeName("TodoStateEnum") // .addIncludeName("TodoTargetEnum") // + .addIncludeName("MergeRequestState") // + .addIncludeName("UserType") // // ---- MUTATION objects ---- .addIncludeName("WorkItemStateEvent") // .addIncludeName("RelativePositionType") // @@ -1713,6 +1724,26 @@ public static Config createConfig(Schema schema) { .addIncludeName("draft") // .addIncludeName("reviewers") // .addIncludeName("approvedBy") // + .addIncludeName("notes") // + ) // + .addFilter(new FieldsFilter() + .setTypeKind(Kind.OBJECT) + .setTypeName("MergeRequestAuthor") // + .addIncludeName("id") // + .addIncludeName("username") // + .addIncludeName("type") // + ) // + .addFilter(new FieldsFilter() + .setTypeKind(Kind.OBJECT) + .setTypeName("MergeRequestReviewerConnection") // + .addIncludeName("nodes") // + ) // + .addFilter(new FieldsFilter() + .setTypeKind(Kind.OBJECT) + .setTypeName("MergeRequestReviewer") // + .addIncludeName("id") // + .addIncludeName("username") // + .addIncludeName("type") // ) // .addFilter(new InputFieldsFilter() .setTypeKind(Kind.INPUT_OBJECT) diff --git a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java index 102316f..7f8c5fd 100644 --- a/src/main/java/graphql/gitlab/api/WorkitemClientApi.java +++ b/src/main/java/graphql/gitlab/api/WorkitemClientApi.java @@ -118,7 +118,7 @@ public interface WorkitemClientApi { * Find a merge request. */ @Query("mergeRequest") - MergeRequest getMergeRequest(@Name("id") @NonNull MergeRequestID id); + MergeRequest getMergeRequest(@Name("id") @NonNull MergeRequestID id, @NestedParameter("notes") @Name("filter") NotesFilterType filter); /** * Find a namespace. diff --git a/src/main/java/graphql/gitlab/model/MergeRequest.java b/src/main/java/graphql/gitlab/model/MergeRequest.java index d386dd9..7cf27b2 100644 --- a/src/main/java/graphql/gitlab/model/MergeRequest.java +++ b/src/main/java/graphql/gitlab/model/MergeRequest.java @@ -37,6 +37,11 @@ public class MergeRequest implements Todoable { */ private LabelConnection labels; + /** + * All notes on this noteable. + */ + private NoteConnection notes; + /** * Users from whom a review has been requested. */ @@ -121,6 +126,15 @@ public MergeRequest setLabels(LabelConnection labels) { return this; } + public NoteConnection getNotes() { + return notes; + } + + public MergeRequest setNotes(NoteConnection notes) { + this.notes = notes; + return this; + } + public MergeRequestReviewerConnection getReviewers() { return reviewers; } @@ -177,7 +191,7 @@ public MergeRequest setWebUrl(String webUrl) { @Override public int hashCode() { - return Objects.hash(approvedBy, author, description, draft, id, labels, reviewers, sourceBranch, state, targetBranch, title, webUrl); + return Objects.hash(approvedBy, author, description, draft, id, labels, notes, reviewers, sourceBranch, state, targetBranch, title, webUrl); } @Override @@ -189,12 +203,12 @@ public boolean equals(Object obj) { if (getClass() != obj.getClass()) return false; MergeRequest other = (MergeRequest) obj; - return Objects.equals(approvedBy, other.approvedBy) && Objects.equals(author, other.author) && Objects.equals(description, other.description) && Objects.equals(draft, other.draft) && Objects.equals(id, other.id) && Objects.equals(labels, other.labels) && Objects.equals(reviewers, other.reviewers) && Objects.equals(sourceBranch, other.sourceBranch) && Objects.equals(state, other.state) && Objects.equals(targetBranch, other.targetBranch) && Objects.equals(title, other.title) && Objects.equals(webUrl, other.webUrl); + return Objects.equals(approvedBy, other.approvedBy) && Objects.equals(author, other.author) && Objects.equals(description, other.description) && Objects.equals(draft, other.draft) && Objects.equals(id, other.id) && Objects.equals(labels, other.labels) && Objects.equals(notes, other.notes) && Objects.equals(reviewers, other.reviewers) && Objects.equals(sourceBranch, other.sourceBranch) && Objects.equals(state, other.state) && Objects.equals(targetBranch, other.targetBranch) && Objects.equals(title, other.title) && Objects.equals(webUrl, other.webUrl); } @Override public String toString() { - return "MergeRequest [approvedBy=" + approvedBy + ", author=" + author + ", description=" + description + ", draft=" + draft + ", id=" + id + ", labels=" + labels + ", reviewers=" + reviewers + ", sourceBranch=" + sourceBranch + ", state=" + state + ", targetBranch=" + targetBranch + ", title=" + title + ", webUrl=" + webUrl + "]"; + return "MergeRequest [approvedBy=" + approvedBy + ", author=" + author + ", description=" + description + ", draft=" + draft + ", id=" + id + ", labels=" + labels + ", notes=" + notes + ", reviewers=" + reviewers + ", sourceBranch=" + sourceBranch + ", state=" + state + ", targetBranch=" + targetBranch + ", title=" + title + ", webUrl=" + webUrl + "]"; } }