append all pr events

This commit is contained in:
k0shk0sh 2019-09-01 16:30:13 +02:00
parent 8570200218
commit 0b4ebe6cbc
3 changed files with 155 additions and 11 deletions

View File

@ -48,12 +48,9 @@ class GetPullRequestTimelineUseCase @Inject constructor(
timeline.pageInfo.isHasNextPage, timeline.pageInfo.isHasPreviousPage
)
/**
* [ISSUE_COMMENT, CLOSED_EVENT, REOPENED_EVENT, REFERENCED_EVENT, ASSIGNED_EVENT,
UNASSIGNED_EVENT, LABELED_EVENT, UNLABELED_EVENT, MILESTONED_EVENT, DEMILESTONED_EVENT, RENAMED_TITLE_EVENT,
LOCKED_EVENT, UNLOCKED_EVENT, TRANSFERRED_EVENT, PULL_REQUEST_COMMIT, PULL_REQUEST_COMMIT_COMMENT_THREAD,
PULL_REQUEST_REVIEW, PULL_REQUEST_REVIEW_THREAD, HEAD_REF_DELETED_EVENT, HEAD_REF_FORCE_PUSHED_EVENT,
MERGED_EVENT, MERGED_EVENT, REVIEW_DISMISSED_EVENT, REVIEW_REQUESTED_EVENT,
REVIEW_REQUEST_REMOVED_EVENT, READY_FOR_REVIEW_EVENT]
*
PULL_REQUEST_COMMIT, PULL_REQUEST_COMMIT_COMMENT_THREAD,
PULL_REQUEST_REVIEW, PULL_REQUEST_REVIEW_THREAD,]
*/
timeline.nodes?.forEach { node ->
when (node) {
@ -91,13 +88,86 @@ class GetPullRequestTimelineUseCase @Inject constructor(
is AsHeadRefDeletedEvent -> list.add(getHeadRefDeleted(node))
is AsReviewRequestedEvent -> list.add(getRequestForReview(node))
is AsReviewDismissedEvent -> list.add(getDismissedReview(node))
is AsReviewRequestRemovedEvent -> list.add(getReviewRemoved(node))
is AsPullRequestReview -> list.add(getPullRequestReview(node))
is AsPullRequestCommit -> list.add(getPullRequestCommit(node))
}
}
return@map Pair(pageInfo, list)
}
}
private fun getDismissedReview(node: AsReviewDismissedEvent): TimelineModel = TimelineModel(
private fun getPullRequestReview(node: AsPullRequestReview) = TimelineModel(
review = ReviewModel(
node.id,
node.databaseId,
ShortUserModel(node.author?.login, node.author?.login, node.author?.url?.toString(), avatarUrl = node.author?.avatarUrl?.toString()),
node.body,
node.authorAssociation.rawValue(),
node.state.rawValue(),
node.createdAt,
node.comments.nodes?.map {
ReviewComment(
ShortUserModel(
it.author?.login,
it.author?.login,
it.author?.url?.toString(),
avatarUrl = it.author?.avatarUrl.toString()
),
ShortUserModel(
it.replyTo?.author?.login,
it.replyTo?.author?.login,
it.replyTo?.author?.url?.toString(),
avatarUrl = it.replyTo?.author?.avatarUrl.toString()
),
it.body,
it.path,
it.originalPosition,
it.isOutdated
)
}?.firstOrNull()
)
)
private fun getPullRequestCommit(node: AsPullRequestCommit) = TimelineModel(
pullRequestCommit = PullRequestCommitModel(
node.id,
node.url.toString(),
CommitModel(
node.prCommit.oid.toString(),
ShortUserModel(
node.prCommit.author?.name,
node.prCommit.author?.name,
node.prCommit.author?.user?.url.toString(),
avatarUrl = node.prCommit.author?.avatarUrl?.toString() ?: node.prCommit.author?.user?.avatarUrl?.toString()
),
node.prCommit.message,
node.prCommit.abbreviatedOid,
node.prCommit.commitUrl.toString(),
node.prCommit.authoredDate,
node.prCommit.isCommittedViaWeb,
node.prCommit.status?.state?.rawValue()
)
)
)
private fun getReviewRemoved(node: AsReviewRequestRemovedEvent) = TimelineModel(
reviewRequestRemoved = ReviewRequestRemovedModel(
node.actor?.fragments?.shortActor?.toUser(),
when (val m = node.requestedReviewer) {
is AsUser1 -> ShortUserModel(m.login, m.login, m.url.toString(), avatarUrl = m.userAvatar.toString())
is AsTeam1 -> ShortUserModel(m.name, m.name, m.url.toString(), avatarUrl = m.teamAvatar.toString())
is AsMannequin1 -> ShortUserModel(m.login, m.login, m.url.toString(), avatarUrl = m.monnequinAvatar.toString())
else -> null
},
node.createdAt,
node.requestedReviewer is AsUser1,
node.requestedReviewer is AsTeam1,
node.requestedReviewer is AsMannequin1
)
)
private fun getDismissedReview(node: AsReviewDismissedEvent) = TimelineModel(
reviewDismissed = ReviewDismissedModel(
node.actor?.fragments?.shortActor?.toUser(),
node.createdAt,

View File

@ -231,6 +231,22 @@ query getPullRequestTimeline($login: String!, $repo: String!, $number: Int!, $pa
prCommit: commit {
oid
abbreviatedOid
committedViaWeb
authoredDate
message
commitUrl
status {
state
}
author {
avatarUrl
name
user {
login
avatarUrl
url
}
}
}
}
... on PullRequestCommitCommentThread {
@ -378,6 +394,24 @@ query getPullRequestTimeline($login: String!, $repo: String!, $number: Int!, $pa
}
... on ReviewRequestRemovedEvent {
actor { ... ShortActor }
createdAt
requestedReviewer {
... on User {
userAvatar: avatarUrl
login
url
}
... on Team {
teamAvatar: avatarUrl
name
url
}
... on Mannequin {
monnequinAvatar: avatarUrl
login
url
}
}
}
... on PullRequestReview {
id

View File

@ -30,7 +30,10 @@ data class TimelineModel(
@SerializedName("headRefRestored") var headRefRestored: HeadRefRestoredModel? = null,
@SerializedName("headRefDeleted") var headRefDeleted: HeadRefDeletedModel? = null,
@SerializedName("reviewRequested") var reviewRequested: ReviewRequestedModel? = null,
@SerializedName("reviewDismissed") var reviewDismissed: ReviewDismissedModel? = null
@SerializedName("reviewDismissed") var reviewDismissed: ReviewDismissedModel? = null,
@SerializedName("reviewRequestRemoved") var reviewRequestRemoved: ReviewRequestRemovedModel? = null,
@SerializedName("pullRequestCommit") var pullRequestCommit: PullRequestCommitModel? = null,
@SerializedName("review") var review: ReviewModel? = null
)
data class CommitModel(
@ -40,7 +43,8 @@ data class CommitModel(
@SerializedName("abbreviatedOid") var abbreviatedOid: String? = null,
@SerializedName("commitUrl") var commitUrl: String? = null,
@SerializedName("authoredDate") var authoredDate: Date? = null,
@SerializedName("committedViaWeb") var committedViaWeb: Boolean? = null
@SerializedName("committedViaWeb") var committedViaWeb: Boolean? = null,
@SerializedName("state") var state: String? = null
)
data class CommentModel(
@ -178,9 +182,45 @@ data class ReviewDismissedModel(
@SerializedName("createdAt") var createdAt: Date? = null,
@SerializedName("dismissalMessage") var dismissalMessage: String? = null,
@SerializedName("previousReviewState") var previousReviewState: String? = null,
@SerializedName("url") var url: String
@SerializedName("url") var url: String? = null
)
data class ReviewRequestRemovedModel(
@SerializedName("actor") var actor: ShortUserModel? = null,
@SerializedName("reviewer") var reviewer: ShortUserModel? = null,
@SerializedName("createdAt") var createdAt: Date? = null,
@SerializedName("isUser") var isUser: Boolean = true,
@SerializedName("isTeam") var isTeam: Boolean = false,
@SerializedName("isMannequin") var isMannequin: Boolean = false
)
data class PullRequestCommitModel(
@SerializedName("id") var id: String? = null,
@SerializedName("url") var url: String? = null,
@SerializedName("commit") var commit: CommitModel? = null
)
data class ReviewModel(
@SerializedName("id") var id: String? = null,
@SerializedName("databaseId") var databaseId: Int? = null,
@SerializedName("author") var author: ShortUserModel? = null,
@SerializedName("body") var body: String? = null,
@SerializedName("authorAssociation") var authorAssociation: String? = null,
@SerializedName("state") var state: String? = null,
@SerializedName("createdAt") var createdAt: Date? = null,
@SerializedName("comment") var comment: ReviewComment? = null
)
data class ReviewComment(
@SerializedName("author") var author: ShortUserModel? = null,
@SerializedName("replyTo") var replyTo: ShortUserModel? = null,
@SerializedName("body") var body: String? = null,
@SerializedName("path") var path: String? = null,
@SerializedName("originalPosition") var originalPosition: Int? = null,
@SerializedName("outdated") var outdated: Boolean? = null
)
enum class CommentAuthorAssociation(val value: String) {
MEMBER("MEMBER"),
OWNER("OWNER"),
@ -204,6 +244,6 @@ enum class CommentCannotUpdateReason(val value: kotlin.String) {
DENIED("LOGIN_REQUIRED");
companion object {
fun fromName(name: String): CommentCannotUpdateReason? = CommentCannotUpdateReason.values().firstOrNull { it.value == name }
fun fromName(name: String): CommentCannotUpdateReason? = values().firstOrNull { it.value == name }
}
}