From e9d43f8e66b0fcf9a6e70e4417719df0cb591d56 Mon Sep 17 00:00:00 2001 From: upagge Date: Thu, 12 Mar 2020 11:36:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=20=D1=83=D1=82=D1=80=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jpa/PullRequestsRepository.java | 3 ++ .../scheduler/SchedulerNotification.java | 6 ++- .../service/PullRequestsService.java | 2 + .../service/impl/PullRequestsServiceImpl.java | 5 ++ .../com/tsc/bitbucketbot/utils/Message.java | 53 +++++++++---------- 5 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/tsc/bitbucketbot/repository/jpa/PullRequestsRepository.java b/src/main/java/com/tsc/bitbucketbot/repository/jpa/PullRequestsRepository.java index b14b6e5..dfe7e62 100644 --- a/src/main/java/com/tsc/bitbucketbot/repository/jpa/PullRequestsRepository.java +++ b/src/main/java/com/tsc/bitbucketbot/repository/jpa/PullRequestsRepository.java @@ -30,6 +30,9 @@ public interface PullRequestsRepository extends JpaRepository @Query("SELECT p FROM PullRequest p LEFT JOIN p.reviewers r WHERE r.user=:reviewer AND r.status =:status") List findAllByReviewerAndStatuses(@Param("reviewer") String reviewer, @Param("status") ReviewerStatus status); + @Query("SELECT p FROM PullRequest p LEFT JOIN p.reviewers r WHERE p.author.login=:author AND r.status=:reviewerStatus") + List findAllByAuthorAndReviewerStatus(@Param("author") String author, @Param("reviewerStatus") ReviewerStatus reviewerStatus); + @Query("SELECT p.id from PullRequest p") Set getAllIds(); diff --git a/src/main/java/com/tsc/bitbucketbot/scheduler/SchedulerNotification.java b/src/main/java/com/tsc/bitbucketbot/scheduler/SchedulerNotification.java index 1a23b3e..17be936 100644 --- a/src/main/java/com/tsc/bitbucketbot/scheduler/SchedulerNotification.java +++ b/src/main/java/com/tsc/bitbucketbot/scheduler/SchedulerNotification.java @@ -22,18 +22,20 @@ public class SchedulerNotification { private final PullRequestsService pullRequestsService; private final MessageSendService messageSendService; + // Утреннее сообщение @Scheduled(cron = "0 15 8 * * MON-FRI") public void goodMorning() { List allRegister = userService.getAllRegister(); for (User user : allRegister) { - List pullRequests = pullRequestsService.getAllByReviewerAndStatuses( + List pullRequestsReviews = pullRequestsService.getAllByReviewerAndStatuses( user.getLogin(), ReviewerStatus.NEEDS_WORK ); + List pullRequestsNeedWork = pullRequestsService.getAllByAuthorAndReviewerStatus(user.getLogin(), ReviewerStatus.UNAPPROVED); messageSendService.add( MessageSend.builder() .telegramId(user.getTelegramId()) - .message(Message.goodMorningStatistic(pullRequests)) + .message(Message.goodMorningStatistic(pullRequestsReviews, pullRequestsNeedWork)) .build() ); } diff --git a/src/main/java/com/tsc/bitbucketbot/service/PullRequestsService.java b/src/main/java/com/tsc/bitbucketbot/service/PullRequestsService.java index a0b0fa6..aedb15c 100644 --- a/src/main/java/com/tsc/bitbucketbot/service/PullRequestsService.java +++ b/src/main/java/com/tsc/bitbucketbot/service/PullRequestsService.java @@ -33,6 +33,8 @@ public interface PullRequestsService { @NonNull List getAllByReviewerAndStatuses(String login, ReviewerStatus statuses); + List getAllByAuthorAndReviewerStatus(@NonNull String login, @NonNull ReviewerStatus status); + Set getAllId(); } diff --git a/src/main/java/com/tsc/bitbucketbot/service/impl/PullRequestsServiceImpl.java b/src/main/java/com/tsc/bitbucketbot/service/impl/PullRequestsServiceImpl.java index 150db25..1df7202 100644 --- a/src/main/java/com/tsc/bitbucketbot/service/impl/PullRequestsServiceImpl.java +++ b/src/main/java/com/tsc/bitbucketbot/service/impl/PullRequestsServiceImpl.java @@ -67,6 +67,11 @@ public class PullRequestsServiceImpl implements PullRequestsService { return pullRequestsRepository.findAllByReviewerAndStatuses(login, reviewerStatus); } + @Override + public List getAllByAuthorAndReviewerStatus(@NonNull String login, @NonNull ReviewerStatus status) { + return pullRequestsRepository.findAllByAuthorAndReviewerStatus(login, status); + } + @Override public Set getAllId() { return pullRequestsRepository.getAllIds(); diff --git a/src/main/java/com/tsc/bitbucketbot/utils/Message.java b/src/main/java/com/tsc/bitbucketbot/utils/Message.java index aa532e6..9b73a6c 100644 --- a/src/main/java/com/tsc/bitbucketbot/utils/Message.java +++ b/src/main/java/com/tsc/bitbucketbot/utils/Message.java @@ -9,7 +9,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import static com.tsc.bitbucketbot.domain.util.ReviewerChange.Type.*; @@ -32,7 +31,7 @@ public class Message { @NonNull public static String newPullRequest(PullRequest pullRequest) { return Smile.FUN + " *Новый Pull Request*" + Smile.BREAK + - linkPr(pullRequest.getName(), pullRequest.getUrl()) + + link(pullRequest.getName(), pullRequest.getUrl()) + Smile.HR + Smile.AUTHOR + ": " + pullRequest.getAuthor().getLogin() + Smile.TWO_BREAK; @@ -41,7 +40,7 @@ public class Message { @NonNull public static String statusPullRequest(String name, String url, PullRequestStatus oldStatus, PullRequestStatus newStatus) { return Smile.PEN + " *Изменился статус вашего ПР*" + Smile.HR + - linkPr(name, url) + Smile.BREAK + + link(name, url) + Smile.BREAK + oldStatus.name() + " -> " + newStatus.name() + Smile.TWO_BREAK; } @@ -82,7 +81,7 @@ public class Message { return Optional.of( Smile.PEN + " *Изменения ревьюверов вашего ПР*" + Smile.HR + - linkPr(pullRequest.getName(), pullRequest.getUrl()) + Smile.BREAK + + link(pullRequest.getName(), pullRequest.getUrl()) + Smile.BREAK + createMessage ); } @@ -92,56 +91,56 @@ public class Message { @NonNull public static String updatePullRequest(String pullRequestName, String prUrl, String author) { return Smile.UPDATE + " *Обновление Pull Request*" + Smile.BREAK + - linkPr(pullRequestName, prUrl) + + link(pullRequestName, prUrl) + Smile.HR + Smile.AUTHOR + ": " + author + Smile.TWO_BREAK; } @NonNull - public static String goodMorningStatistic(List pullRequests) { + public static String goodMorningStatistic(List pullRequestsReviews, List pullRequestsNeedWork) { StringBuilder message = new StringBuilder().append(Smile.SUN).append(" Доброе утро ").append(Smile.SUN).append(Smile.HR); - if (!pullRequests.isEmpty()) { - message.append("Сегодня тебя ждет проверка целых ").append(pullRequests.size()).append(" ПР!").append(Smile.TWO_BREAK) + if (!pullRequestsReviews.isEmpty()) { + message.append("Сегодня тебя ждет проверка ").append(pullRequestsReviews.size()).append(" ПР!").append(Smile.TWO_BREAK) .append("Топ старых ПР:").append(Smile.BREAK); - List oldPr = pullRequests.stream() + List oldPr = pullRequestsReviews.stream() .sorted(COMPARATOR) .limit(PR_COUNT) .collect(Collectors.toList()); - oldPr.forEach( - pullRequest -> message.append(topPr(pullRequest)) - ); - Set oldPrIds = oldPr.stream().map(PullRequest::getId).collect(Collectors.toSet()); - if (pullRequests.size() > PR_COUNT) { - message.append(Smile.BREAK).append("Свежие ПР:").append(Smile.BREAK); - pullRequests - .stream() - .filter(pullRequest -> !oldPrIds.contains(pullRequest.getId())) - .sorted(COMPARATOR.reversed()) - .limit(PR_COUNT) - .forEach( - pullRequest -> message.append(topPr(pullRequest)) - ); - } + oldPr.forEach(pullRequest -> message.append(topPr(pullRequest))); + message.append(Smile.BREAK); } else { message.append("Ты либо самый лучший работник, либо тебе не доверяют проверку ПР ").append(Smile.MEGA_FUN).append(Smile.TWO_BREAK) .append("Поздравляю, у тебя ни одного ПР на проверку!").append(Smile.BREAK); } + if (!pullRequestsNeedWork.isEmpty()) { + message.append(Smile.BREAK).append(Smile.DANGEROUS).append(" Так же у тебя на доработке находится ").append(pullRequestsNeedWork.size()).append(" ПР").append(Smile.BREAK); + message.append(needWorkPr(pullRequestsNeedWork)).append(Smile.BREAK); + } if (dayX()) { message.append(Smile.BREAK).append(Smile.FUN).append(" Кстати, поздравляю, сегодня день З/П").append(Smile.BREAK) .append(Smile.DANGEROUS).append("И раз такое дело, то напоминаю, что в виду независящих от разработчика условий, бот работает на платном VDS. Поэтому всячески приветствуются ") - .append(linkPr("донаты на оплату сервера", DONATION_LINK)).append(Smile.BREAK); + .append(link("донаты на оплату сервера", DONATION_LINK)).append(Smile.BREAK); } message .append(Smile.BREAK) .append("Удачного дня ").append(Smile.FLOWER).append(Smile.TWO_BREAK); + return message.toString(); + } + private static String needWorkPr(@NonNull List pullRequestsNeedWork) { + final StringBuilder message = new StringBuilder(); + pullRequestsNeedWork.stream() + .limit(3) + .forEach( + pullRequest -> message.append("-- ").append(link(pullRequest.getName(), pullRequest.getUrl())).append(Smile.BREAK) + ); return message.toString(); } private static String topPr(PullRequest pullRequest) { return Smile.statusPr(pullRequest.getUpdateDate()) + " " + - linkPr(pullRequest.getName(), pullRequest.getUrl()) + + link(pullRequest.getName(), pullRequest.getUrl()) + Smile.BREAK; } @@ -151,7 +150,7 @@ public class Message { } @NonNull - private static String linkPr(String name, String url) { + private static String link(String name, String url) { return "[" + name + "](" + url + ")"; }