-
Notifications
You must be signed in to change notification settings - Fork 74
/
PullRequest.scala
143 lines (125 loc) · 5.12 KB
/
PullRequest.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* Copyright 2016-2020 47 Degrees Open Source <https://www.47deg.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github4s.domain
final case class PullRequest(
id: Long,
number: Int,
state: String,
title: String,
locked: Boolean,
html_url: String,
created_at: String,
body: Option[String] = None,
updated_at: Option[String] = None,
closed_at: Option[String] = None,
merged_at: Option[String] = None,
merge_commit_sha: Option[String] = None,
base: Option[PullRequestBase] = None,
head: Option[PullRequestBase] = None,
user: Option[User] = None,
assignee: Option[User] = None,
draft: Boolean
)
final case class PullRequestBase(
ref: String,
sha: String,
label: Option[String] = None,
user: Option[User] = None,
repo: Option[Repository] = None
)
final case class PullRequestFile(
sha: String,
filename: String,
status: String,
additions: Int,
deletions: Int,
changes: Int,
blob_url: String,
raw_url: String,
contents_url: String,
patch: Option[String] = None,
previous_filename: Option[String] = None
)
sealed trait CreatePullRequest {
def head: String
def base: String
def maintainer_can_modify: Option[Boolean]
}
final case class CreatePullRequestData(
title: String,
head: String,
base: String,
body: String,
maintainer_can_modify: Option[Boolean] = Some(true),
draft: Boolean
) extends CreatePullRequest
final case class CreatePullRequestIssue(
issue: Int,
head: String,
base: String,
maintainer_can_modify: Option[Boolean] = Some(true)
) extends CreatePullRequest
sealed abstract class PRFilter(val name: String, val value: String)
extends Product
with Serializable {
def tupled: (String, String) = name -> value
}
sealed abstract class PRFilterState(override val value: String) extends PRFilter("state", value)
final case object PRFilterOpen extends PRFilterState("open")
final case object PRFilterClosed extends PRFilterState("closed")
final case object PRFilterAll extends PRFilterState("all")
final case class PRFilterHead(override val value: String) extends PRFilter("head", value)
final case class PRFilterBase(override val value: String) extends PRFilter("base", value)
sealed abstract class PRFilterSort(override val value: String) extends PRFilter("sort", value)
final case object PRFilterSortCreated extends PRFilterSort("created")
final case object PRFilterSortUpdated extends PRFilterSort("updated")
final case object PRFilterSortPopularity extends PRFilterSort("popularity")
final case object PRFilterSortLongRunning extends PRFilterSort("long-running")
sealed abstract class PRFilterDirection(override val value: String)
extends PRFilter("direction", value)
final case object PRFilterOrderAsc extends PRFilterDirection("asc")
final case object PRFilterOrderDesc extends PRFilterDirection("desc")
sealed trait NewPullRequest
final case class NewPullRequestData(title: String, body: String, draft: Boolean)
extends NewPullRequest
final case class NewPullRequestIssue(issue: Int) extends NewPullRequest
final case class PullRequestReview(
id: Long,
body: String,
commit_id: String,
state: PullRequestReviewState,
html_url: String,
pull_request_url: String,
user: Option[User] = None
)
sealed abstract class PullRequestReviewState(val value: String)
final case object PRRStateApproved extends PullRequestReviewState("APPROVED")
final case object PRRStateChangesRequested extends PullRequestReviewState("CHANGES_REQUESTED")
final case object PRRStateCommented extends PullRequestReviewState("COMMENTED")
final case object PRRStatePending extends PullRequestReviewState("PENDING")
final case object PRRStateDismissed extends PullRequestReviewState("DISMISSED")
final case class CreatePRReviewRequest(
commit_id: Option[String] = None,
body: String,
event: PullRequestReviewEvent = PRREventPending,
comments: List[CreateReviewComment] = Nil
)
sealed abstract class PullRequestReviewEvent(val value: String)
final case object PRREventApprove extends PullRequestReviewEvent("APPROVE")
final case object PRREventRequestChanges extends PullRequestReviewEvent("REQUEST_CHANGES")
final case object PRREventComment extends PullRequestReviewEvent("COMMENT")
final case object PRREventPending extends PullRequestReviewEvent("PENDING")
case class CreateReviewComment(path: String, position: Int, body: String)