From 5c8ddb8e08d54f4caaae3dba47e3ab250f098c63 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Fri, 23 Aug 2024 22:00:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=B5=D1=81=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D1=8B=20=D0=BA=20gitlab=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitlab/context/prop/PersonProperty.java | 1 - bot-core/pom.xml | 5 +- .../core/convert/DiscussionJsonConverter.java | 2 +- .../convert/MergeRequestJsonConverter.java | 6 +- .../gitlab/core/convert/NoteJsonConvert.java | 2 +- .../core/convert/PersonJsonConverter.java | 2 +- .../core/convert/PipelineJsonConverter.java | 4 +- .../core/convert/ProjectJsonConverter.java | 2 +- .../gitlab/core/parser/DiscussionParser.java | 72 ++---- .../core/parser/MergeRequestParser.java | 121 ++-------- .../gitlab/core/parser/PipelineParser.java | 101 ++------- .../bot/gitlab/core/parser/ProjectParser.java | 49 +---- .../core/service/DiscussionServiceImpl.java | 30 +-- .../bot/gitlab/core/utils/HttpParse.java | 99 --------- .../bot/gitlab/core/utils/HttpParse2.java | 125 ----------- .../bot/gitlab/config/AppConfig.java | 10 +- gitlab-app/src/main/resources/application.yml | 4 +- gitlab-sdk/pom.xml | 13 ++ .../bot/gitlab/sdk/GitlabSdkManager.java | 208 ++++++++++++++++++ .../bot/gitlab/sdk/client}/HttpHeader.java | 6 +- .../bot/gitlab/sdk/client/HttpParse.java | 121 ++++++++++ .../bot/gitlab/sdk/client/HttpParseNew.java | 100 +++++++++ .../bot/gitlab/sdk/client}/OkHttpUtil.java | 7 +- .../bot/gitlab/sdk/client}/StringUtils.java | 2 +- .../gitlab/sdk/config}/GitlabProperty.java | 4 +- .../gitlab/sdk/domain/GitlabProjectParam.java | 14 ++ .../{ => json}/ApprovalContainerJson.java | 2 +- .../sdk/domain/{ => json}/ApprovalJson.java | 2 +- .../sdk/domain/{ => json}/CommitJson.java | 2 +- .../sdk/domain/{ => json}/DiscussionJson.java | 2 +- .../domain/{ => json}/MergeRequestJson.java | 2 +- .../{ => json}/MergeRequestStateJson.java | 2 +- .../sdk/domain/{ => json}/MilestoneJson.java | 2 +- .../sdk/domain/{ => json}/NoteJson.java | 2 +- .../sdk/domain/{ => json}/PersonJson.java | 2 +- .../sdk/domain/{ => json}/PipelineJson.java | 2 +- .../domain/{ => json}/PipelineShortJson.java | 2 +- .../domain/{ => json}/PipelineStatusJson.java | 2 +- .../sdk/domain/{ => json}/ProjectJson.java | 2 +- .../sdk/domain/{ => json}/UserJson.java | 2 +- .../GetAllDiscussionForMergeRequestTask.java | 10 +- .../GetAllMergeRequestForProjectTask.java | 10 +- .../sdk}/forktask/GetPipelineShortTask.java | 12 +- .../gitlab/sdk}/forktask/GetPipelineTask.java | 10 +- .../forktask/GetSingleMergeRequestTask.java | 10 +- .../bot/gitlab/sdk/util/GitlabUrlParser.java | 8 + .../telegram/service/ReplaceUrlLocalhost.java | 2 +- .../bot/gitlab/telegram/unit/MenuConfig.java | 5 +- 48 files changed, 611 insertions(+), 594 deletions(-) delete mode 100644 bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse.java delete mode 100644 bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse2.java create mode 100644 gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/GitlabSdkManager.java rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client}/HttpHeader.java (82%) create mode 100644 gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParse.java create mode 100644 gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParseNew.java rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client}/OkHttpUtil.java (94%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client}/StringUtils.java (87%) rename {bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/config}/GitlabProperty.java (94%) create mode 100644 gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/GitlabProjectParam.java rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/ApprovalContainerJson.java (81%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/ApprovalJson.java (64%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/CommitJson.java (93%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/DiscussionJson.java (81%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/MergeRequestJson.java (96%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/MergeRequestStateJson.java (85%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/MilestoneJson.java (67%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/NoteJson.java (96%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/PersonJson.java (84%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/PipelineJson.java (95%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/PipelineShortJson.java (95%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/PipelineStatusJson.java (92%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/ProjectJson.java (95%) rename gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/{ => json}/UserJson.java (75%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk}/forktask/GetAllDiscussionForMergeRequestTask.java (83%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk}/forktask/GetAllMergeRequestForProjectTask.java (85%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk}/forktask/GetPipelineShortTask.java (82%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk}/forktask/GetPipelineTask.java (78%) rename {bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser => gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk}/forktask/GetSingleMergeRequestTask.java (74%) create mode 100644 gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/util/GitlabUrlParser.java diff --git a/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/PersonProperty.java b/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/PersonProperty.java index bd50589..aa5abaa 100644 --- a/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/PersonProperty.java +++ b/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/PersonProperty.java @@ -11,7 +11,6 @@ import lombok.Setter; @Setter public class PersonProperty { - private String token; private String telegramId; } diff --git a/bot-core/pom.xml b/bot-core/pom.xml index 44341a0..380e482 100644 --- a/bot-core/pom.xml +++ b/bot-core/pom.xml @@ -67,10 +67,7 @@ true - - com.squareup.okhttp3 - okhttp - + com.fasterxml.jackson.core diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/DiscussionJsonConverter.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/DiscussionJsonConverter.java index 86874b6..a245a23 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/DiscussionJsonConverter.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/DiscussionJsonConverter.java @@ -1,7 +1,7 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.entity.Discussion; -import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.DiscussionJson; import lombok.RequiredArgsConstructor; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/MergeRequestJsonConverter.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/MergeRequestJsonConverter.java index fdb59dc..946ae4b 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/MergeRequestJsonConverter.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/MergeRequestJsonConverter.java @@ -3,9 +3,9 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.MergeRequestState; import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest; import dev.struchkov.bot.gitlab.context.domain.entity.Person; -import dev.struchkov.bot.gitlab.sdk.domain.MergeRequestJson; -import dev.struchkov.bot.gitlab.sdk.domain.MergeRequestStateJson; -import dev.struchkov.bot.gitlab.sdk.domain.PersonJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestStateJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PersonJson; import lombok.RequiredArgsConstructor; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/NoteJsonConvert.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/NoteJsonConvert.java index 385961e..b9e171d 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/NoteJsonConvert.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/NoteJsonConvert.java @@ -1,7 +1,7 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.entity.Note; -import dev.struchkov.bot.gitlab.sdk.domain.NoteJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.NoteJson; import lombok.RequiredArgsConstructor; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PersonJsonConverter.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PersonJsonConverter.java index c484af1..1c318dd 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PersonJsonConverter.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PersonJsonConverter.java @@ -1,7 +1,7 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.entity.Person; -import dev.struchkov.bot.gitlab.sdk.domain.PersonJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PersonJson; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PipelineJsonConverter.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PipelineJsonConverter.java index ce1b22a..6bfc98f 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PipelineJsonConverter.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/PipelineJsonConverter.java @@ -2,8 +2,8 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.PipelineStatus; import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineJson; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineStatusJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineStatusJson; import lombok.RequiredArgsConstructor; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/ProjectJsonConverter.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/ProjectJsonConverter.java index 5d98eaa..e187226 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/ProjectJsonConverter.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/convert/ProjectJsonConverter.java @@ -1,7 +1,7 @@ package dev.struchkov.bot.gitlab.core.convert; import dev.struchkov.bot.gitlab.context.domain.entity.Project; -import dev.struchkov.bot.gitlab.sdk.domain.ProjectJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.ProjectJson; import lombok.RequiredArgsConstructor; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/DiscussionParser.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/DiscussionParser.java index c399e1e..2c8d4cc 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/DiscussionParser.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/DiscussionParser.java @@ -5,14 +5,13 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Discussion; import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequestForDiscussion; import dev.struchkov.bot.gitlab.context.domain.entity.Note; import dev.struchkov.bot.gitlab.context.domain.entity.Person; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; -import dev.struchkov.bot.gitlab.context.prop.PersonProperty; import dev.struchkov.bot.gitlab.context.service.DiscussionService; import dev.struchkov.bot.gitlab.context.service.MergeRequestsService; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson; +import dev.struchkov.bot.gitlab.sdk.GitlabSdkManager; +import dev.struchkov.bot.gitlab.sdk.config.GitlabProperty; +import dev.struchkov.bot.gitlab.sdk.domain.json.DiscussionJson; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Component; @@ -21,15 +20,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; -import java.util.concurrent.ForkJoinPool; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; -import static dev.struchkov.bot.gitlab.core.utils.StringUtils.H_PRIVATE_TOKEN; import static dev.struchkov.haiti.utils.Checker.checkFalse; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; import static dev.struchkov.haiti.utils.Checker.checkNotNull; @@ -41,35 +36,20 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull; */ @Slf4j @Component +@RequiredArgsConstructor public class DiscussionParser { public static final int PAGE_COUNT = 100; + //TODO [23.08.2024|uPagge]: Убрать + private final GitlabProperty gitlabProperty; + private final GitlabSdkManager gitlabSdkManager; + private final DiscussionService discussionService; private final MergeRequestsService mergeRequestsService; private final ConversionService conversionService; - private final ForkJoinPool forkJoinPool; - private final GitlabProperty gitlabProperty; - - private final PersonProperty personProperty; - - public DiscussionParser( - DiscussionService discussionService, - MergeRequestsService mergeRequestsService, - ConversionService conversionService, - @Qualifier("parserPool") ForkJoinPool forkJoinPool, - GitlabProperty gitlabProperty, - PersonProperty personProperty - ) { - this.discussionService = discussionService; - this.mergeRequestsService = mergeRequestsService; - this.conversionService = conversionService; - this.forkJoinPool = forkJoinPool; - this.gitlabProperty = gitlabProperty; - this.personProperty = personProperty; - } /** * Поиск новых обсуждений @@ -85,11 +65,11 @@ public class DiscussionParser { private void processingNewDiscussion(MergeRequestForDiscussion mergeRequest) { int page = 1; - final List discussionJson = getDiscussionJson(mergeRequest, page); + final List discussionJson = gitlabSdkManager.getDiscussionForMergeRequest(mergeRequest.getProjectId(), mergeRequest.getTwoId(), page); if (checkNotEmpty(discussionJson)) { while (discussionJson.size() == PAGE_COUNT) { - discussionJson.addAll(getDiscussionJson(mergeRequest, ++page)); + discussionJson.addAll(gitlabSdkManager.getDiscussionForMergeRequest(mergeRequest.getProjectId(), mergeRequest.getTwoId(), ++page)); } createNewDiscussion(discussionJson, mergeRequest); } @@ -170,11 +150,12 @@ public class DiscussionParser { final List newDiscussions = new ArrayList<>(); for (Discussion discussion : discussions) { - if (checkNotNull(discussion.getMergeRequest())) { - getOldDiscussionJson(discussion) + final MergeRequestForDiscussion mergeRequest = discussion.getMergeRequest(); + if (checkNotNull(mergeRequest)) { + gitlabSdkManager.getDiscussionById(mergeRequest.getProjectId(), mergeRequest.getTwoId(), discussion.getId()) .map(json -> { final Discussion newDiscussion = conversionService.convert(json, Discussion.class); - newDiscussion.getNotes().forEach(createNoteLink(discussion.getMergeRequest())); + newDiscussion.getNotes().forEach(createNoteLink(mergeRequest)); return newDiscussion; }).ifPresent(newDiscussions::add); } else { @@ -190,29 +171,6 @@ public class DiscussionParser { log.debug("Конец обработки старых дискуссий"); } - private Optional getOldDiscussionJson(Discussion discussion) { - return HttpParse.request(createLinkOldDiscussion(discussion)) - .header(ACCEPT) - .header(H_PRIVATE_TOKEN, personProperty.getToken()) - .execute(DiscussionJson.class); - } - - private String createLinkOldDiscussion(Discussion discussion) { - return MessageFormat.format( - gitlabProperty.getDiscussionUrl(), - discussion.getMergeRequest().getProjectId(), - discussion.getMergeRequest().getTwoId(), - discussion.getId() - ); - } - - private List getDiscussionJson(MergeRequestForDiscussion mergeRequest, int page) { - return HttpParse.request(MessageFormat.format(gitlabProperty.getDiscussionsUrl(), mergeRequest.getProjectId(), mergeRequest.getTwoId(), page, PAGE_COUNT)) - .header(ACCEPT) - .header(H_PRIVATE_TOKEN, personProperty.getToken()) - .executeList(DiscussionJson.class); - } - private Consumer createNoteLink(MergeRequestForDiscussion mergeRequest) { return note -> { final String url = MessageFormat.format( diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/MergeRequestParser.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/MergeRequestParser.java index 00140d1..9a39b24 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/MergeRequestParser.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/MergeRequestParser.java @@ -1,89 +1,61 @@ package dev.struchkov.bot.gitlab.core.parser; import dev.struchkov.bot.gitlab.context.domain.ExistContainer; -import dev.struchkov.bot.gitlab.context.domain.IdAndStatusPr; import dev.struchkov.bot.gitlab.context.domain.MergeRequestState; import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest; import dev.struchkov.bot.gitlab.context.domain.entity.Person; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; -import dev.struchkov.bot.gitlab.context.prop.PersonProperty; import dev.struchkov.bot.gitlab.context.service.MergeRequestsService; import dev.struchkov.bot.gitlab.context.service.ProjectService; -import dev.struchkov.bot.gitlab.core.parser.forktask.GetAllMergeRequestForProjectTask; -import dev.struchkov.bot.gitlab.core.parser.forktask.GetSingleMergeRequestTask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.ApprovalContainerJson; -import dev.struchkov.bot.gitlab.sdk.domain.ApprovalJson; -import dev.struchkov.bot.gitlab.sdk.domain.CommitJson; -import dev.struchkov.bot.gitlab.sdk.domain.MergeRequestJson; +import dev.struchkov.bot.gitlab.sdk.GitlabSdkManager; +import dev.struchkov.bot.gitlab.sdk.domain.json.ApprovalJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.CommitJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestJson; +import dev.struchkov.haiti.utils.container.Pair; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Service; -import java.text.MessageFormat; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; -import java.util.concurrent.ForkJoinPool; -import java.util.concurrent.ForkJoinTask; import java.util.stream.Collectors; import java.util.stream.Stream; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; -import static dev.struchkov.haiti.context.exception.ConvertException.convertException; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; import static dev.struchkov.haiti.utils.Checker.checkNotNull; -import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResult; -import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResults; +import static java.util.stream.Collectors.toList; @Slf4j @Service +@RequiredArgsConstructor public class MergeRequestParser { private static final Set OLD_STATUSES = Set.of( MergeRequestState.MERGED, MergeRequestState.OPENED, MergeRequestState.CLOSED ); - private final GitlabProperty gitlabProperty; + private final GitlabSdkManager gitlabSdkManager; + private final MergeRequestsService mergeRequestsService; private final ProjectService projectService; private final ConversionService conversionService; - private final PersonProperty personProperty; - - private final ForkJoinPool forkJoinPool; - - public MergeRequestParser( - GitlabProperty gitlabProperty, - MergeRequestsService mergeRequestsService, - ProjectService projectService, - ConversionService conversionService, - PersonProperty personProperty, - @Qualifier("parserPool") ForkJoinPool forkJoinPool - ) { - this.gitlabProperty = gitlabProperty; - this.mergeRequestsService = mergeRequestsService; - this.projectService = projectService; - this.conversionService = conversionService; - this.personProperty = personProperty; - this.forkJoinPool = forkJoinPool; - } public void parsingOldMergeRequest() { log.debug("Старт обработки старых MR"); - final Set existIds = mergeRequestsService.getAllId(OLD_STATUSES); + final Set> existIds = mergeRequestsService.getAllId(OLD_STATUSES).stream() + .map(idAndStatusPr -> new Pair<>(idAndStatusPr.getProjectId(), idAndStatusPr.getTwoId())) + .collect(Collectors.toSet()); - final List newMergeRequests = getOldMergeRequests(existIds).stream() + final List newMergeRequests = gitlabSdkManager.getAllMergeRequestById(existIds).stream() .map(mergeRequestJson -> { final MergeRequest newMergeRequest = conversionService.convert(mergeRequestJson, MergeRequest.class); parsingCommits(newMergeRequest); parsingApprovals(newMergeRequest); return newMergeRequest; }) - .collect(Collectors.toList()); + .collect(toList()); if (checkNotEmpty(newMergeRequests)) { personMapping(newMergeRequests); @@ -92,28 +64,11 @@ public class MergeRequestParser { log.debug("Конец обработки старых MR"); } - private List getOldMergeRequests(Set existIds) { - final List>> tasks = existIds.stream() - .map( - existId -> new GetSingleMergeRequestTask( - gitlabProperty.getMergeRequestUrl(), - existId.getProjectId(), - existId.getTwoId(), - personProperty.getToken() - ) - ).map(forkJoinPool::submit) - .collect(Collectors.toList()); - - return pullTaskResult(tasks).stream() - .flatMap(Optional::stream) - .collect(Collectors.toList()); - } - public void parsingNewMergeRequest() { log.debug("Старт обработки новых MR"); final Set projectIds = projectService.getAllIdByProcessingEnable(); - final List mergeRequestJsons = getMergeRequests(projectIds); + final List mergeRequestJsons = gitlabSdkManager.getAllMergeRequestByProjectIds(projectIds); if (checkNotEmpty(mergeRequestJsons)) { final Set jsonIds = mergeRequestJsons.stream() @@ -143,20 +98,6 @@ public class MergeRequestParser { log.debug("Конец обработки новых MR"); } - /** - * Позволяет получить MR для переданных идентификаторов проектов. - * - * @param projectIds идентификаторы проектов - * @return полученные у GitLab MergeRequests - */ - private List getMergeRequests(Set projectIds) { - final List>> tasks = projectIds.stream() - .map(projectId -> new GetAllMergeRequestForProjectTask(projectId, gitlabProperty.getOpenMergeRequestsUrl(), personProperty.getToken())) - .map(forkJoinPool::submit) - .collect(Collectors.toList()); - - return pullTaskResults(tasks); - } private static void personMapping(List newMergeRequests) { final Map personMap = Stream.concat( @@ -179,19 +120,14 @@ public class MergeRequestParser { newMergeRequest.setReviewers( newMergeRequest.getReviewers().stream() .map(reviewer -> personMap.get(reviewer.getId())) - .collect(Collectors.toList()) + .collect(toList()) ); } } //TODO [19.01.2024|uPagge]: Переделать в многопоточный режим private void parsingCommits(MergeRequest mergeRequest) { - final List commitJson = HttpParse.request( - MessageFormat.format(gitlabProperty.getLastCommitOfMergeRequestUrl(), mergeRequest.getProjectId(), mergeRequest.getTwoId()) - ) - .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .executeList(CommitJson.class); + final List commitJson = gitlabSdkManager.getAllCommitByProjectId(mergeRequest.getProjectId(), mergeRequest.getTwoId()); if (checkNotEmpty(commitJson)) { mergeRequest.setDateLastCommit(commitJson.get(0).getCreatedDate()); } @@ -199,22 +135,13 @@ public class MergeRequestParser { //TODO [19.01.2024|uPagge]: Переделать в многопоточный режим private void parsingApprovals(MergeRequest mergeRequest) { - final ApprovalContainerJson approvalContainer = HttpParse.request( - MessageFormat.format(gitlabProperty.getMergeRequestApprovalUrl(), mergeRequest.getProjectId(), mergeRequest.getTwoId()) - ) - .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .execute(ApprovalContainerJson.class) - .orElseThrow(convertException("Error request approvals")); + final List personApprovals = gitlabSdkManager.getAllApprovalForMergeRequest(mergeRequest.getProjectId(), mergeRequest.getTwoId()).stream() + .map(ApprovalJson::getUser) + .map(personJson -> conversionService.convert(personJson, Person.class)) + .collect(toList()); - - - if (checkNotEmpty(approvalContainer.getApprovals())) { - final List approvals = approvalContainer.getApprovals().stream() - .map(ApprovalJson::getUser) - .map(personJson -> conversionService.convert(personJson, Person.class)) - .collect(Collectors.toList()); - mergeRequest.setApprovals(approvals); + if (checkNotEmpty(personApprovals)) { + mergeRequest.setApprovals(personApprovals); } } diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/PipelineParser.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/PipelineParser.java index 7d4979b..5a0f1e5 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/PipelineParser.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/PipelineParser.java @@ -3,26 +3,20 @@ package dev.struchkov.bot.gitlab.core.parser; import dev.struchkov.bot.gitlab.context.domain.ExistContainer; import dev.struchkov.bot.gitlab.context.domain.PipelineStatus; import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; -import dev.struchkov.bot.gitlab.context.prop.PersonProperty; import dev.struchkov.bot.gitlab.context.service.PipelineService; import dev.struchkov.bot.gitlab.context.service.ProjectService; -import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineShortTask; -import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineTask; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineJson; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineShortJson; +import dev.struchkov.bot.gitlab.sdk.GitlabSdkManager; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineShortJson; +import dev.struchkov.haiti.utils.container.Pair; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; -import java.util.concurrent.ForkJoinPool; -import java.util.concurrent.ForkJoinTask; import java.util.stream.Collectors; import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.CREATED; @@ -33,9 +27,8 @@ import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.RUNNING; import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.WAITING_FOR_RESOURCE; import static dev.struchkov.haiti.utils.Checker.checkFalse; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; -import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResult; -import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResults; import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.toSet; /** * Парсер пайплайнов. @@ -44,37 +37,21 @@ import static java.util.stream.Collectors.toMap; */ @Slf4j @Service +@RequiredArgsConstructor public class PipelineParser { private static final Set oldStatus = Set.of( CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING, RUNNING, MANUAL ); + private final GitlabSdkManager gitlabSdkManager; + private final PipelineService pipelineService; private final ProjectService projectService; - private final GitlabProperty gitlabProperty; - private final PersonProperty personProperty; private final ConversionService conversionService; - private final ForkJoinPool forkJoinPool; private LocalDateTime lastUpdate = LocalDateTime.now(); - public PipelineParser( - PipelineService pipelineService, - ProjectService projectService, - GitlabProperty gitlabProperty, - PersonProperty personProperty, - ConversionService conversionService, - @Qualifier("parserPool") ForkJoinPool forkJoinPool - ) { - this.pipelineService = pipelineService; - this.projectService = projectService; - this.gitlabProperty = gitlabProperty; - this.personProperty = personProperty; - this.conversionService = conversionService; - this.forkJoinPool = forkJoinPool; - } - public void scanNewPipeline() { log.debug("Старт обработки новых пайплайнов"); final Set projectIds = projectService.getAllIdByProcessingEnable(); @@ -86,9 +63,14 @@ public class PipelineParser { final ExistContainer existContainer = pipelineService.existsById(pipelineProjectMap.keySet()); if (checkFalse(existContainer.isAllFound())) { - final Set idsNotFound = existContainer.getIdNoFound(); + final Set> idsNotFound = existContainer.getIdNoFound().stream() + .map(pipelineId -> new Pair<>(pipelineProjectMap.get(pipelineId), pipelineId)) + .collect(toSet()); - final List newPipelines = getNewPipelines(pipelineProjectMap, idsNotFound); + final List newPipelines = gitlabSdkManager.getAllPipelineForProject(idsNotFound).stream() + .map(json -> conversionService.convert(json, Pipeline.class)) + .collect(Collectors.toList()); + ; if (checkNotEmpty(newPipelines)) { pipelineService.createAll(newPipelines); @@ -100,63 +82,22 @@ public class PipelineParser { log.debug("Конец обработки новых пайплайнов"); } - private List getNewPipelines(Map pipelineIdAndProjectId, Set idsNotFound) { - final List>> tasks = idsNotFound.stream() - .map( - pipelineId -> GetPipelineTask.builder() - .pipelineId(pipelineId) - .projectId(pipelineIdAndProjectId.get(pipelineId)) - .urlPipeline(gitlabProperty.getPipelineUrl()) - .gitlabToken(personProperty.getToken()) - .build() - ) - .map(forkJoinPool::submit) - .collect(Collectors.toList()); - - return pullTaskResult(tasks).stream() - .flatMap(Optional::stream) - .map(json -> conversionService.convert(json, Pipeline.class)) - .collect(Collectors.toList()); - } - private List getPipelineShortJsons(Set projectIds) { final LocalDateTime newLastUpdate = LocalDateTime.now(); - final List>> tasks = projectIds.stream() - .map(projectId -> new GetPipelineShortTask( - gitlabProperty.getPipelinesUrl(), - projectId, - lastUpdate, - personProperty.getToken() - )) - .map(forkJoinPool::submit) - .collect(Collectors.toList()); - - final List pipelineJsons = pullTaskResults(tasks); - + final List pipelineJsons = gitlabSdkManager.getAllPipeline(projectIds, lastUpdate.minusHours(12L)); lastUpdate = newLastUpdate; return pipelineJsons; } - public void scanOldPipeline() { log.debug("Старт обработки старых пайплайнов"); final List pipelines = pipelineService.getAllByStatuses(oldStatus); - final List>> tasks = pipelines.stream() - .map( - pipeline -> - GetPipelineTask.builder() - .projectId(pipeline.getProjectId()) - .pipelineId(pipeline.getId()) - .urlPipeline(gitlabProperty.getPipelineUrl()) - .gitlabToken(personProperty.getToken()) - .build() - ) - .map(forkJoinPool::submit) - .collect(Collectors.toList()); - - final List newPipelines = pullTaskResult(tasks).stream() - .flatMap(Optional::stream) + final List newPipelines = gitlabSdkManager.getAllPipelineForProject( + pipelines.stream() + .map(pipeline -> new Pair<>(pipeline.getProjectId(), pipeline.getId())) + .collect(toSet()) + ).stream() .map(json -> conversionService.convert(json, Pipeline.class)) .collect(Collectors.toList()); diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/ProjectParser.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/ProjectParser.java index 93c60d3..a13ffce 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/ProjectParser.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/ProjectParser.java @@ -3,27 +3,21 @@ package dev.struchkov.bot.gitlab.core.parser; import dev.struchkov.bot.gitlab.context.domain.ExistContainer; import dev.struchkov.bot.gitlab.context.domain.entity.Person; import dev.struchkov.bot.gitlab.context.domain.entity.Project; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; -import dev.struchkov.bot.gitlab.context.prop.PersonProperty; -import dev.struchkov.bot.gitlab.context.service.MergeRequestsService; import dev.struchkov.bot.gitlab.context.service.PersonService; import dev.struchkov.bot.gitlab.context.service.ProjectService; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.PersonJson; -import dev.struchkov.bot.gitlab.sdk.domain.ProjectJson; +import dev.struchkov.bot.gitlab.sdk.GitlabSdkManager; +import dev.struchkov.bot.gitlab.sdk.domain.GitlabProjectParam; +import dev.struchkov.bot.gitlab.sdk.domain.json.ProjectJson; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Service; -import java.text.MessageFormat; import java.util.Collection; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; import static dev.struchkov.haiti.context.exception.ConvertException.convertException; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; @@ -37,33 +31,28 @@ import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; @RequiredArgsConstructor public class ProjectParser { - public static final String OWNER = "&owned=true"; - public static final String PRIVATE = "&visibility=private"; + private final GitlabSdkManager gitlabSdkManager; + private final ConversionService conversionService; - private final MergeRequestsService mergeRequestsService; private final ProjectService projectService; private final PersonService personService; - private final ConversionService conversionService; - - private final GitlabProperty gitlabProperty; - private final PersonProperty personProperty; public void parseAllProjectOwner() { log.debug("Старт обработки всех проектов, где пользователь владелец"); - parseProjects(OWNER); + parseProjects(GitlabProjectParam.OWNER); log.debug("Конец обработки всех проектов, где пользователь владелец"); } public void parseAllPrivateProject() { log.debug("Старт обработки приватных проектов"); - parseProjects(PRIVATE); + parseProjects(GitlabProjectParam.PRIVATE); log.debug("Конец обработки приватных проектов"); } - private void parseProjects(String param) { + private void parseProjects(GitlabProjectParam param) { int page = 1; - List projectJsons = getProjectJsons(page, param); + List projectJsons = gitlabSdkManager.getAllProject(page, param); while (checkNotEmpty(projectJsons)) { @@ -83,15 +72,12 @@ public class ProjectParser { projectService.createAll(newProjects); } - projectJsons = getProjectJsons(++page, param); + projectJsons = gitlabSdkManager.getAllProject(++page, param); } } public Project parseByUrl(String projectUrl) { - final ProjectJson projectJson = HttpParse.request(projectUrl) - .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .execute(ProjectJson.class) + final ProjectJson projectJson = gitlabSdkManager.getProjectByUrl(projectUrl) .orElseThrow(convertException("Error adding a repository")); if (!projectService.existsById(projectJson.getId())) { createNewPersons(List.of(projectJson)); @@ -114,10 +100,7 @@ public class ProjectParser { final List newPersons = notFoundId.stream() .map( - userId -> HttpParse.request(gitlabProperty.getUsersUrl() + "/" + userId) - .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .execute(PersonJson.class) + userId -> gitlabSdkManager.getPersonById(userId) .map(json -> conversionService.convert(json, Person.class)) .orElseThrow(convertException("Ошибка преобразования нового пользователя")) ).toList(); @@ -126,13 +109,5 @@ public class ProjectParser { } } - private List getProjectJsons(int page, String... params) { - String param = String.join("", params); - final String url = MessageFormat.format(gitlabProperty.getProjectsUrl(), page); - return HttpParse.request(url + param) - .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .executeList(ProjectJson.class); - } } diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/service/DiscussionServiceImpl.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/service/DiscussionServiceImpl.java index c273711..b3d4e6a 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/service/DiscussionServiceImpl.java +++ b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/service/DiscussionServiceImpl.java @@ -10,26 +10,18 @@ import dev.struchkov.bot.gitlab.context.domain.notify.comment.NewCommentNotify; import dev.struchkov.bot.gitlab.context.domain.notify.level.DiscussionLevel; import dev.struchkov.bot.gitlab.context.domain.notify.task.DiscussionNewNotify; import dev.struchkov.bot.gitlab.context.domain.notify.task.ThreadCloseNotify; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; -import dev.struchkov.bot.gitlab.context.prop.PersonProperty; import dev.struchkov.bot.gitlab.context.repository.DiscussionRepository; import dev.struchkov.bot.gitlab.context.service.AppSettingService; import dev.struchkov.bot.gitlab.context.service.DiscussionService; import dev.struchkov.bot.gitlab.context.service.NotifyService; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; +import dev.struchkov.bot.gitlab.sdk.GitlabSdkManager; import dev.struchkov.haiti.utils.container.Pair; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import okhttp3.FormBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.IOException; -import java.text.MessageFormat; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -59,7 +51,6 @@ import static java.lang.Boolean.TRUE; public class DiscussionServiceImpl implements DiscussionService { protected static final Pattern PATTERN = Pattern.compile("@[\\w]+"); - private final OkHttpClient client = new OkHttpClient(); private final DiscussionRepository repository; @@ -67,8 +58,8 @@ public class DiscussionServiceImpl implements DiscussionService { private final AppSettingService settingService; private final PersonInformation personInformation; - private final GitlabProperty gitlabProperty; - private final PersonProperty personProperty; + + private final GitlabSdkManager gitlabSdkManager; @Override @Transactional @@ -235,20 +226,7 @@ public class DiscussionServiceImpl implements DiscussionService { final MergeRequestForDiscussion mergeRequest = discussion.getMergeRequest(); final Long projectId = mergeRequest.getProjectId(); - final String requestUrl = MessageFormat.format(gitlabProperty.getNewNoteUrl(), projectId, mergeRequest.getTwoId(), discussion.getId(), text); - - final RequestBody formBody = new FormBody.Builder().build(); - - final Request request = new Request.Builder() - .post(formBody) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) - .url(requestUrl) - .build(); - try { - client.newCall(request).execute(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } + gitlabSdkManager.sendMessageToDiscussion(projectId, mergeRequest.getTwoId(), discussionId, text); } @Override diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse.java deleted file mode 100644 index 2e2c65a..0000000 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse.java +++ /dev/null @@ -1,99 +0,0 @@ -package dev.struchkov.bot.gitlab.core.utils; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -@Component -public class HttpParse { - - private static final Logger log = LoggerFactory.getLogger(HttpParse.class); - private static final ObjectMapper objectMapper; - private final HttpHeaders headers = new HttpHeaders(); - private final UriComponentsBuilder uriBuilder; - - static { - objectMapper = new ObjectMapper(); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - } - - private final RestTemplate restTemplate; - - public HttpParse(String url, RestTemplate restTemplate) { - this.restTemplate = restTemplate; - this.uriBuilder = UriComponentsBuilder.fromHttpUrl(url); - } - - public static HttpParse request(String url, RestTemplate restTemplate) { - return new HttpParse(url, restTemplate); - } - - public HttpParse header(String name, String value) { - if (name != null && value != null) { - headers.add(name, value); - } - return this; - } - - public HttpParse header(HttpHeader header) { - if (header != null) { - headers.add(header.getName(), header.getValue()); - } - return this; - } - - public HttpParse getParameter(String name, String value) { - if (name != null && value != null) { - uriBuilder.queryParam(name, value); - } - return this; - } - - public Optional execute(Class classOfT) { - try { - String url = uriBuilder.toUriString(); - log.trace("Выполняется RestTemplate запрос | {}", url); - HttpEntity entity = new HttpEntity<>(headers); - ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); - log.trace("Запрос выполнен | {}", url); - if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) { - String body = response.getBody(); - return Optional.ofNullable(objectMapper.readValue(body, classOfT)); - } - } catch (IOException e) { - log.error("Ошибка выполнения RestTemplate", e); - } - return Optional.empty(); - } - - public List executeList(Class classOfT) { - try { - String url = uriBuilder.toUriString(); - log.trace("Выполняется RestTemplate запрос | {}", url); - HttpEntity entity = new HttpEntity<>(headers); - ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); - log.trace("Запрос выполнен | {}", url); - if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) { - String body = response.getBody(); - return objectMapper.readValue(body, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT)); - } - } catch (IOException e) { - log.error("Ошибка выполнения RestTemplate", e); - } - return Collections.emptyList(); - } -} - diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse2.java b/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse2.java deleted file mode 100644 index 9563e66..0000000 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpParse2.java +++ /dev/null @@ -1,125 +0,0 @@ -//package dev.struchkov.bot.gitlab.core.utils; -// -//import com.fasterxml.jackson.databind.DeserializationFeature; -//import com.fasterxml.jackson.databind.ObjectMapper; -//import dev.struchkov.haiti.utils.Inspector; -//import jakarta.validation.constraints.NotNull; -//import okhttp3.HttpUrl; -//import okhttp3.OkHttpClient; -//import okhttp3.Request; -//import okhttp3.Response; -//import okhttp3.ResponseBody; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -// -//import java.io.IOException; -//import java.util.Collections; -//import java.util.List; -//import java.util.Optional; -//import java.util.concurrent.TimeUnit; -// -//import static dev.struchkov.haiti.utils.Checker.checkNotNull; -//import static dev.struchkov.haiti.utils.Inspector.isNotNull; -// -///** -// * Утилитарный класс для работы с web. -// * -// * @author upagge 30.09.2020 -// */ -//public class HttpParse { -// -// private static final Logger log = LoggerFactory.getLogger(HttpParse.class); -// -// public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json"); -// -// private static final ObjectMapper objectMapper; -// -// private final Request.Builder requestBuilder = new Request.Builder(); -// private final HttpUrl.Builder httpUrlBuilder; -// -// static { -// objectMapper = new ObjectMapper(); -// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); -// } -// -// public HttpParse(String url) { -// Inspector.isNotNull(url); -// httpUrlBuilder = HttpUrl.parse(url).newBuilder(); -// } -// -// public static HttpParse request(String url) { -// Inspector.isNotNull(url); -// return new HttpParse(url); -// } -// -// public HttpParse header(String name, String value) { -// isNotNull(name); -// if (value != null) { -// requestBuilder.header(name, value); -// } -// return this; -// } -// -// public HttpParse header(HttpHeader header) { -// isNotNull(header); -// requestBuilder.header(header.getName(), header.getValue()); -// return this; -// } -// -// public HttpParse getParameter(String name, String value) { -// isNotNull(name); -// if (value != null) { -// httpUrlBuilder.addQueryParameter(name, value); -// } -// return this; -// } -// -// public Optional execute(Class classOfT) { -// isNotNull(classOfT); -// final HttpUrl url = httpUrlBuilder.build(); -// final Request request = requestBuilder.url(url).build(); -// log.trace("Выполняется okhttp3 запрос | {}", url); -// final OkHttpClient httpClient = getNewClient(); -// try (final Response execute = httpClient.newCall(request).execute()) { -// log.trace("Запрос выполнен | {}", url); -// if (execute.isSuccessful() && checkNotNull(execute.body())) { -// final String string = execute.body().string(); -// return Optional.ofNullable(objectMapper.readValue(string, classOfT)); -// } -// } catch (IOException e) { -// log.error("Ошибка выполнения okhttp3", e); -// } -// return Optional.empty(); -// } -// -// //TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate -// public List executeList(Class classOfT) { -// isNotNull(classOfT); -// final HttpUrl url = httpUrlBuilder.build(); -// final Request request = requestBuilder.url(url).build(); -// log.trace("Выполняется okhttp3 запрос | {}", url); -// final OkHttpClient httpClient = getNewClient(); -// try (Response execute = httpClient.newCall(request).execute()) { -// log.trace("Запрос выполнен | {}", url); -// ResponseBody body = execute.body(); -// if (execute.isSuccessful() && checkNotNull(body)) { -// final String stringBody = body.string(); -// final List list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT)); -// return (list == null || list.isEmpty()) ? Collections.emptyList() : list; -// } -// } catch (IOException e) { -// log.error("Ошибка выполнения okhttp3", e); -// } -// return Collections.emptyList(); -// } -// -// @NotNull -// private static OkHttpClient getNewClient() { -// return new OkHttpClient().newBuilder() -// .connectTimeout(30, TimeUnit.SECONDS) -// .readTimeout(30, TimeUnit.SECONDS) -// .writeTimeout(30, TimeUnit.SECONDS) -// .build(); -// } -// -//} \ No newline at end of file diff --git a/gitlab-app/src/main/java/dev/struchkov/bot/gitlab/config/AppConfig.java b/gitlab-app/src/main/java/dev/struchkov/bot/gitlab/config/AppConfig.java index 3767b71..5681d3a 100644 --- a/gitlab-app/src/main/java/dev/struchkov/bot/gitlab/config/AppConfig.java +++ b/gitlab-app/src/main/java/dev/struchkov/bot/gitlab/config/AppConfig.java @@ -2,10 +2,10 @@ package dev.struchkov.bot.gitlab.config; import dev.struchkov.bot.gitlab.context.domain.PersonInformation; import dev.struchkov.bot.gitlab.context.prop.AppProperty; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; import dev.struchkov.bot.gitlab.context.prop.PersonProperty; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.config.GitlabProperty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,7 +17,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; import java.util.Arrays; import java.util.concurrent.ForkJoinPool; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; import static dev.struchkov.haiti.context.exception.NotFoundException.notFoundException; /** @@ -76,7 +76,7 @@ public class AppConfig { ) { final PersonInformation personInformation = HttpParse.request(gitlabProperty.getUserUrl()) .header(ACCEPT) - .header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken()) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) .execute(PersonInformation.class) .orElseThrow(notFoundException("Пользователь не найден")); personInformation.setTelegramId(personProperty.getTelegramId()); diff --git a/gitlab-app/src/main/resources/application.yml b/gitlab-app/src/main/resources/application.yml index d264543..4a161c6 100644 --- a/gitlab-app/src/main/resources/application.yml +++ b/gitlab-app/src/main/resources/application.yml @@ -37,7 +37,7 @@ telegram: password: ${PROXY_PASSWORD:} gitlab-bot: - version: 1.0.0 + version: 2.0.0 cron: scan: general: ${CRON_GENERAL:0 */1 * * * *} @@ -45,8 +45,8 @@ gitlab-bot: new-merge-request: ${CRON_NEW_MR:0 */15 * * * *} person: telegram-id: ${TELEGRAM_PERSON_ID} - token: ${GITLAB_PERSONAL_TOKEN} gitlab: + access-token: ${GITLAB_PERSONAL_TOKEN} base-url: ${GITLAB_URL} replaceUrl: ${GITLAB_REPLACE_URL} users-url: "${GITLAB_URL}/api/v4/users" diff --git a/gitlab-sdk/pom.xml b/gitlab-sdk/pom.xml index ce1b229..a6a65e7 100644 --- a/gitlab-sdk/pom.xml +++ b/gitlab-sdk/pom.xml @@ -10,6 +10,19 @@ gitlab-sdk + + org.springframework + spring-context + + + dev.struchkov.haiti + haiti-utils + + + com.squareup.okhttp3 + okhttp + + org.projectlombok lombok diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/GitlabSdkManager.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/GitlabSdkManager.java new file mode 100644 index 0000000..b8c60bc --- /dev/null +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/GitlabSdkManager.java @@ -0,0 +1,208 @@ +package dev.struchkov.bot.gitlab.sdk; + +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.config.GitlabProperty; +import dev.struchkov.bot.gitlab.sdk.domain.GitlabProjectParam; +import dev.struchkov.bot.gitlab.sdk.domain.json.ApprovalContainerJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.ApprovalJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.CommitJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.DiscussionJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PersonJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineShortJson; +import dev.struchkov.bot.gitlab.sdk.domain.json.ProjectJson; +import dev.struchkov.bot.gitlab.sdk.forktask.GetAllMergeRequestForProjectTask; +import dev.struchkov.bot.gitlab.sdk.forktask.GetPipelineShortTask; +import dev.struchkov.bot.gitlab.sdk.forktask.GetPipelineTask; +import dev.struchkov.bot.gitlab.sdk.forktask.GetSingleMergeRequestTask; +import dev.struchkov.haiti.utils.container.Pair; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import okhttp3.FormBody; +import okhttp3.Request; +import okhttp3.RequestBody; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; +import java.util.stream.Collectors; + +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.StringUtils.H_PRIVATE_TOKEN; +import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResult; +import static dev.struchkov.haiti.utils.concurrent.ForkJoinUtils.pullTaskResults; +import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.toList; + +@Slf4j +@Service +@RequiredArgsConstructor +public class GitlabSdkManager { + + private final ForkJoinPool forkJoinPool; + private final GitlabProperty gitlabProperty; + + public Optional getPersonById(Long userId) { + return HttpParse.request(gitlabProperty.getUsersUrl() + "/" + userId) + .header(ACCEPT) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .execute(PersonJson.class); + } + + public List getAllProject(int pageNumber, GitlabProjectParam... params) { + String param = Arrays.stream(params) + .map(GitlabProjectParam::getUrl) + .collect(Collectors.joining()); + final String url = MessageFormat.format(gitlabProperty.getProjectsUrl(), pageNumber); + return HttpParse.request(url + param) + .header(ACCEPT) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .executeList(ProjectJson.class); + } + + public Optional getProjectByUrl(String projectUrl) { + return HttpParse.request(projectUrl) + .header(ACCEPT) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .execute(ProjectJson.class); + } + + /** + * Позволяет получить MR для переданных идентификаторов проектов. + * + * @param projectIds идентификаторы проектов + * @return полученные у GitLab MergeRequests + */ + public List getAllMergeRequestByProjectIds(Set projectIds) { + final List>> tasks = projectIds.stream() + .map(projectId -> new GetAllMergeRequestForProjectTask(projectId, gitlabProperty.getOpenMergeRequestsUrl(), gitlabProperty.getAccessToken())) + .map(forkJoinPool::submit) + .collect(Collectors.toList()); + + return pullTaskResults(tasks); + } + + public List getAllCommitByProjectId(Long projectId, Long mergeRequestIdForProject) { + return HttpParse.request( + MessageFormat.format(gitlabProperty.getLastCommitOfMergeRequestUrl(), projectId, mergeRequestIdForProject) + ) + .header(ACCEPT) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .executeList(CommitJson.class); + } + + public List getAllApprovalForMergeRequest(Long projectId, Long mergeRequestIdForProject) { + return HttpParse.request( + MessageFormat.format(gitlabProperty.getMergeRequestApprovalUrl(), projectId, mergeRequestIdForProject) + ) + .header(ACCEPT) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .execute(ApprovalContainerJson.class) + .map(ApprovalContainerJson::getApprovals) + .orElse(emptyList()); + } + + /** + * projectId + mrTwoId + */ + public List getAllMergeRequestById(Collection> projectIdAndMrIdForProject) { + final List>> tasks = projectIdAndMrIdForProject.stream() + .map( + pair -> new GetSingleMergeRequestTask( + gitlabProperty.getMergeRequestUrl(), + pair.getKey(), + pair.getValue(), + gitlabProperty.getAccessToken() + ) + ).map(forkJoinPool::submit) + .collect(toList()); + + return pullTaskResult(tasks).stream() + .flatMap(Optional::stream) + .collect(toList()); + } + + public List getAllPipelineForProject(Collection> projectIdAndPipelineId) { + final List>> tasks = projectIdAndPipelineId.stream() + .map( + pair -> GetPipelineTask.builder() + .pipelineId(pair.getValue()) + .projectId(pair.getKey()) + .urlPipeline(gitlabProperty.getPipelineUrl()) + .gitlabToken(gitlabProperty.getAccessToken()) + .build() + ) + .map(forkJoinPool::submit) + .collect(Collectors.toList()); + + return pullTaskResult(tasks).stream() + .flatMap(Optional::stream) + .collect(toList()); + } + + public List getAllPipeline(Collection projectIds, LocalDateTime updatedAfter) { + final List>> tasks = projectIds.stream() + .map(projectId -> new GetPipelineShortTask( + gitlabProperty.getPipelinesUrl(), + projectId, + updatedAfter, + gitlabProperty.getAccessToken() + )) + .map(forkJoinPool::submit) + .collect(Collectors.toList()); + + return pullTaskResults(tasks); + } + + public List getDiscussionForMergeRequest(Long projectId, Long mergeRequestIdForProject, int pageNumber) { + return HttpParse.request(MessageFormat.format(gitlabProperty.getDiscussionsUrl(), projectId, mergeRequestIdForProject, pageNumber, pageNumber)) + .header(ACCEPT) + .header(H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .executeList(DiscussionJson.class); + } + + public Optional getDiscussionById(Long projectId, Long mergeRequestIdForProject, String discussionId) { + return HttpParse.request(createLinkOldDiscussion(projectId, mergeRequestIdForProject, discussionId)) + .header(ACCEPT) + .header(H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .execute(DiscussionJson.class); + } + + private String createLinkOldDiscussion(Long projectId, Long mergeRequestIdForProject, String discussionId) { + return MessageFormat.format( + gitlabProperty.getDiscussionUrl(), + projectId, + mergeRequestIdForProject, + discussionId + ); + } + + public void sendMessageToDiscussion(Long projectId, Long mergeRequestIdForProject, String discussionId, String message) { + final String requestUrl = MessageFormat.format(gitlabProperty.getNewNoteUrl(), projectId, mergeRequestIdForProject, discussionId, message); + + final RequestBody formBody = new FormBody.Builder().build(); + + final Request request = new Request.Builder() + .post(formBody) + .header(StringUtils.H_PRIVATE_TOKEN, gitlabProperty.getAccessToken()) + .url(requestUrl) + .build(); + try { + HttpParse.getNewClient().newCall(request).execute(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + + +} diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpHeader.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpHeader.java similarity index 82% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpHeader.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpHeader.java index 48ae851..c8555fb 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/HttpHeader.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpHeader.java @@ -1,6 +1,6 @@ -package dev.struchkov.bot.gitlab.core.utils; +package dev.struchkov.bot.gitlab.sdk.client; -import static dev.struchkov.haiti.utils.Inspector.isNotNull; +import dev.struchkov.haiti.utils.Inspector; /** * Утилитарная сущность для {@link HttpParse}. Упрощает сохранения в константы заголовков для запроса. @@ -18,7 +18,7 @@ public class HttpHeader { } public static HttpHeader of(String name, String value) { - isNotNull(name, value); + Inspector.isNotNull(name, value); return new HttpHeader(name, value); } diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParse.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParse.java new file mode 100644 index 0000000..eea4d50 --- /dev/null +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParse.java @@ -0,0 +1,121 @@ +package dev.struchkov.bot.gitlab.sdk.client; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import dev.struchkov.haiti.utils.Checker; +import dev.struchkov.haiti.utils.Inspector; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Утилитарный класс для работы с web. + * + * @author upagge 30.09.2020 + */ +public class HttpParse { + + private static final Logger log = LoggerFactory.getLogger(HttpParse.class); + + public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json"); + + private static final ObjectMapper objectMapper; + + private final Request.Builder requestBuilder = new Request.Builder(); + private final HttpUrl.Builder httpUrlBuilder; + + static { + objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + public HttpParse(String url) { + Inspector.isNotNull(url); + httpUrlBuilder = HttpUrl.parse(url).newBuilder(); + } + + public static HttpParse request(String url) { + Inspector.isNotNull(url); + return new HttpParse(url); + } + + public HttpParse header(String name, String value) { + Inspector.isNotNull(name); + if (value != null) { + requestBuilder.header(name, value); + } + return this; + } + + public HttpParse header(HttpHeader header) { + Inspector.isNotNull(header); + requestBuilder.header(header.getName(), header.getValue()); + return this; + } + + public HttpParse getParameter(String name, String value) { + Inspector.isNotNull(name); + if (value != null) { + httpUrlBuilder.addQueryParameter(name, value); + } + return this; + } + + public Optional execute(Class classOfT) { + Inspector.isNotNull(classOfT); + final HttpUrl url = httpUrlBuilder.build(); + final Request request = requestBuilder.url(url).build(); + log.trace("Выполняется okhttp3 запрос | {}", url); + final OkHttpClient httpClient = getNewClient(); + try (final Response execute = httpClient.newCall(request).execute()) { + log.trace("Запрос выполнен | {}", url); + if (execute.isSuccessful() && Checker.checkNotNull(execute.body())) { + final String string = execute.body().string(); + return Optional.ofNullable(objectMapper.readValue(string, classOfT)); + } + } catch (IOException e) { + log.error("Ошибка выполнения okhttp3", e); + } + return Optional.empty(); + } + + //TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate + public List executeList(Class classOfT) { + Inspector.isNotNull(classOfT); + final HttpUrl url = httpUrlBuilder.build(); + final Request request = requestBuilder.url(url).build(); + log.trace("Выполняется okhttp3 запрос | {}", url); + final OkHttpClient httpClient = getNewClient(); + try (Response execute = httpClient.newCall(request).execute()) { + log.trace("Запрос выполнен | {}", url); + ResponseBody body = execute.body(); + if (execute.isSuccessful() && Checker.checkNotNull(body)) { + final String stringBody = body.string(); + final List list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT)); + return (list == null || list.isEmpty()) ? Collections.emptyList() : list; + } + } catch (IOException e) { + log.error("Ошибка выполнения okhttp3", e); + } + return Collections.emptyList(); + } + + public static OkHttpClient getNewClient() { + return new OkHttpClient().newBuilder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + } + +} \ No newline at end of file diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParseNew.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParseNew.java new file mode 100644 index 0000000..772b34b --- /dev/null +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/HttpParseNew.java @@ -0,0 +1,100 @@ +//package dev.struchkov.bot.gitlab.core.utils; +// +//import com.fasterxml.jackson.databind.DeserializationFeature; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.http.HttpEntity; +//import org.springframework.http.HttpHeaders; +//import org.springframework.http.HttpMethod; +//import org.springframework.http.ResponseEntity; +//import org.springframework.stereotype.Component; +//import org.springframework.web.client.RestTemplate; +//import org.springframework.web.util.UriComponentsBuilder; +// +//import java.io.IOException; +//import java.util.Collections; +//import java.util.List; +//import java.util.Optional; +// +//@Component +//public class HttpParse { +// +// private static final Logger log = LoggerFactory.getLogger(HttpParse.class); +// private static final ObjectMapper objectMapper; +// +// static { +// objectMapper = new ObjectMapper(); +// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); +// } +// +// private final RestTemplate restTemplate; +// private final HttpHeaders headers = new HttpHeaders(); +// private UriComponentsBuilder uriBuilder; +// +// public HttpParse(RestTemplate restTemplate) { +// this.restTemplate = restTemplate; +// } +// +// public HttpParse url(String url) { +// this.uriBuilder = UriComponentsBuilder.fromHttpUrl(url); +// return this; +// } +// +// public HttpParse header(String name, String value) { +// if (name != null && value != null) { +// headers.add(name, value); +// } +// return this; +// } +// +// public HttpParse header(HttpHeader header) { +// if (header != null) { +// headers.add(header.getName(), header.getValue()); +// } +// return this; +// } +// +// public HttpParse getParameter(String name, String value) { +// if (name != null && value != null) { +// uriBuilder.queryParam(name, value); +// } +// return this; +// } +// +// public Optional execute(Class classOfT) { +// try { +// String url = uriBuilder.toUriString(); +// log.trace("Выполняется RestTemplate запрос | {}", url); +// HttpEntity entity = new HttpEntity<>(headers); +// ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); +// log.trace("Запрос выполнен | {}", url); +// if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) { +// String body = response.getBody(); +// return Optional.ofNullable(objectMapper.readValue(body, classOfT)); +// } +// } catch (IOException e) { +// log.error("Ошибка выполнения RestTemplate", e); +// } +// return Optional.empty(); +// } +// +// public List executeList(Class classOfT) { +// try { +// String url = uriBuilder.toUriString(); +// log.trace("Выполняется RestTemplate запрос | {}", url); +// HttpEntity entity = new HttpEntity<>(headers); +// ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); +// log.trace("Запрос выполнен | {}", url); +// if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) { +// String body = response.getBody(); +// return objectMapper.readValue(body, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT)); +// } +// } catch (IOException e) { +// log.error("Ошибка выполнения RestTemplate", e); +// } +// return Collections.emptyList(); +// } +// +//} + diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/OkHttpUtil.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/OkHttpUtil.java similarity index 94% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/OkHttpUtil.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/OkHttpUtil.java index 555a741..b53e1bd 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/OkHttpUtil.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/OkHttpUtil.java @@ -1,5 +1,6 @@ -package dev.struchkov.bot.gitlab.core.utils; +package dev.struchkov.bot.gitlab.sdk.client; +import dev.struchkov.haiti.utils.Exceptions; import okhttp3.OkHttpClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,14 +10,12 @@ import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import static dev.struchkov.haiti.utils.Exceptions.utilityClass; - public class OkHttpUtil { private static final Logger log = LoggerFactory.getLogger(OkHttpUtil.class); public OkHttpUtil() { - utilityClass(); + Exceptions.utilityClass(); } public static void ignoreCertificate(OkHttpClient.Builder builder) { diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/StringUtils.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/StringUtils.java similarity index 87% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/StringUtils.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/StringUtils.java index 60ffe45..c91ca86 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/utils/StringUtils.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/client/StringUtils.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.core.utils; +package dev.struchkov.bot.gitlab.sdk.client; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/GitlabProperty.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/config/GitlabProperty.java similarity index 94% rename from bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/GitlabProperty.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/config/GitlabProperty.java index 3fafbb2..07b3057 100644 --- a/bot-context/src/main/java/dev/struchkov/bot/gitlab/context/prop/GitlabProperty.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/config/GitlabProperty.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.context.prop; +package dev.struchkov.bot.gitlab.sdk.config; import lombok.Getter; import lombok.Setter; @@ -14,6 +14,8 @@ public class GitlabProperty { private String baseUrl; + private String accessToken; + private String replaceUrl; private String usersUrl; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/GitlabProjectParam.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/GitlabProjectParam.java new file mode 100644 index 0000000..11bf2d8 --- /dev/null +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/GitlabProjectParam.java @@ -0,0 +1,14 @@ +package dev.struchkov.bot.gitlab.sdk.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum GitlabProjectParam { + + OWNER("&owned=true"), + PRIVATE("&visibility=private"); + + private final String url; +} diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalContainerJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalContainerJson.java similarity index 81% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalContainerJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalContainerJson.java index fd1611b..cfb9caa 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalContainerJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalContainerJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalJson.java similarity index 64% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalJson.java index 6ed76ad..cc7bd7c 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ApprovalJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ApprovalJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import lombok.Data; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/CommitJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/CommitJson.java similarity index 93% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/CommitJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/CommitJson.java index 23a7ebf..5cb986b 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/CommitJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/CommitJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/DiscussionJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/DiscussionJson.java similarity index 81% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/DiscussionJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/DiscussionJson.java index 871da61..288b5bf 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/DiscussionJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/DiscussionJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import lombok.Getter; import lombok.Setter; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestJson.java similarity index 96% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestJson.java index aec5c0b..3c2d48f 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestStateJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestStateJson.java similarity index 85% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestStateJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestStateJson.java index 6e7bd9a..a923442 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MergeRequestStateJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MergeRequestStateJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MilestoneJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MilestoneJson.java similarity index 67% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MilestoneJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MilestoneJson.java index dd8c889..4086114 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/MilestoneJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/MilestoneJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import lombok.Data; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/NoteJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/NoteJson.java similarity index 96% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/NoteJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/NoteJson.java index 0e80f91..a35391b 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/NoteJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/NoteJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PersonJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PersonJson.java similarity index 84% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PersonJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PersonJson.java index f05a4c4..adbf01a 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PersonJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PersonJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineJson.java similarity index 95% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineJson.java index f1d06cf..689fc28 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineShortJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineShortJson.java similarity index 95% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineShortJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineShortJson.java index 74e22c7..46c659c 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineShortJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineShortJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineStatusJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineStatusJson.java similarity index 92% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineStatusJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineStatusJson.java index f5c073b..781c8ac 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/PipelineStatusJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/PipelineStatusJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ProjectJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ProjectJson.java similarity index 95% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ProjectJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ProjectJson.java index 6f848a8..8f1b180 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/ProjectJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/ProjectJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/UserJson.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/UserJson.java similarity index 75% rename from gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/UserJson.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/UserJson.java index e6f2dd8..501ae6e 100644 --- a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/UserJson.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/domain/json/UserJson.java @@ -1,4 +1,4 @@ -package dev.struchkov.bot.gitlab.sdk.domain; +package dev.struchkov.bot.gitlab.sdk.domain.json; import lombok.Data; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllDiscussionForMergeRequestTask.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllDiscussionForMergeRequestTask.java similarity index 83% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllDiscussionForMergeRequestTask.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllDiscussionForMergeRequestTask.java index bf93b5a..4e58947 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllDiscussionForMergeRequestTask.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllDiscussionForMergeRequestTask.java @@ -1,7 +1,7 @@ -package dev.struchkov.bot.gitlab.core.parser.forktask; +package dev.struchkov.bot.gitlab.sdk.forktask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.domain.json.DiscussionJson; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -10,8 +10,8 @@ import java.text.MessageFormat; import java.util.List; import java.util.concurrent.RecursiveTask; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; -import static dev.struchkov.bot.gitlab.core.utils.StringUtils.H_PRIVATE_TOKEN; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.StringUtils.H_PRIVATE_TOKEN; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; @AllArgsConstructor diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllMergeRequestForProjectTask.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllMergeRequestForProjectTask.java similarity index 85% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllMergeRequestForProjectTask.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllMergeRequestForProjectTask.java index c8786ca..2d0546f 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetAllMergeRequestForProjectTask.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetAllMergeRequestForProjectTask.java @@ -1,8 +1,8 @@ -package dev.struchkov.bot.gitlab.core.parser.forktask; +package dev.struchkov.bot.gitlab.sdk.forktask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.MergeRequestJson; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestJson; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -12,7 +12,7 @@ import java.text.MessageFormat; import java.util.List; import java.util.concurrent.RecursiveTask; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; import static dev.struchkov.haiti.utils.Checker.checkNotEmpty; @Slf4j diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineShortTask.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineShortTask.java similarity index 82% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineShortTask.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineShortTask.java index 33c69fd..6587e31 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineShortTask.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineShortTask.java @@ -1,8 +1,8 @@ -package dev.struchkov.bot.gitlab.core.parser.forktask; +package dev.struchkov.bot.gitlab.sdk.forktask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineShortJson; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineShortJson; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -13,7 +13,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.concurrent.RecursiveTask; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; @Slf4j @@ -47,7 +47,7 @@ public class GetPipelineShortTask extends RecursiveTask> final List jsons = HttpParse.request(MessageFormat.format(urlPipelines, projectId, pageNumber, PAGE_COUNT)) .header(ACCEPT) .header(StringUtils.H_PRIVATE_TOKEN, gitlabToken) - .getParameter("updated_after", lastUpdate.minusHours(12L).toString()) + .getParameter("updated_after", lastUpdate.toString()) .executeList(PipelineShortJson.class); log.trace("Получено {} шт потенциально новых пайплайнов для проекта id:'{}' ", jsons.size(), projectId); return jsons; diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineTask.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineTask.java similarity index 78% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineTask.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineTask.java index a287992..4a0374f 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetPipelineTask.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetPipelineTask.java @@ -1,8 +1,8 @@ -package dev.struchkov.bot.gitlab.core.parser.forktask; +package dev.struchkov.bot.gitlab.sdk.forktask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.PipelineJson; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.domain.json.PipelineJson; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -14,7 +14,7 @@ import java.text.MessageFormat; import java.util.Optional; import java.util.concurrent.RecursiveTask; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; @Slf4j diff --git a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetSingleMergeRequestTask.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetSingleMergeRequestTask.java similarity index 74% rename from bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetSingleMergeRequestTask.java rename to gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetSingleMergeRequestTask.java index 8022122..54da005 100644 --- a/bot-core/src/main/java/dev/struchkov/bot/gitlab/core/parser/forktask/GetSingleMergeRequestTask.java +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/forktask/GetSingleMergeRequestTask.java @@ -1,8 +1,8 @@ -package dev.struchkov.bot.gitlab.core.parser.forktask; +package dev.struchkov.bot.gitlab.sdk.forktask; -import dev.struchkov.bot.gitlab.core.utils.HttpParse; -import dev.struchkov.bot.gitlab.core.utils.StringUtils; -import dev.struchkov.bot.gitlab.sdk.domain.MergeRequestJson; +import dev.struchkov.bot.gitlab.sdk.client.HttpParse; +import dev.struchkov.bot.gitlab.sdk.client.StringUtils; +import dev.struchkov.bot.gitlab.sdk.domain.json.MergeRequestJson; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -11,7 +11,7 @@ import java.text.MessageFormat; import java.util.Optional; import java.util.concurrent.RecursiveTask; -import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT; +import static dev.struchkov.bot.gitlab.sdk.client.HttpParse.ACCEPT; @Slf4j diff --git a/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/util/GitlabUrlParser.java b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/util/GitlabUrlParser.java new file mode 100644 index 0000000..7a79094 --- /dev/null +++ b/gitlab-sdk/src/main/java/dev/struchkov/bot/gitlab/sdk/util/GitlabUrlParser.java @@ -0,0 +1,8 @@ +package dev.struchkov.bot.gitlab.sdk.util; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class GitlabUrlParser { + +} diff --git a/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/service/ReplaceUrlLocalhost.java b/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/service/ReplaceUrlLocalhost.java index 530b712..628a704 100644 --- a/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/service/ReplaceUrlLocalhost.java +++ b/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/service/ReplaceUrlLocalhost.java @@ -1,6 +1,6 @@ package dev.struchkov.bot.gitlab.telegram.service; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; +import dev.struchkov.bot.gitlab.sdk.config.GitlabProperty; import dev.struchkov.godfather.simple.domain.BoxAnswer; import dev.struchkov.godfather.simple.domain.action.PreSendProcessing; import lombok.RequiredArgsConstructor; diff --git a/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/unit/MenuConfig.java b/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/unit/MenuConfig.java index 572d034..2cf96da 100644 --- a/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/unit/MenuConfig.java +++ b/telegram-bot/src/main/java/dev/struchkov/bot/gitlab/telegram/unit/MenuConfig.java @@ -3,13 +3,13 @@ package dev.struchkov.bot.gitlab.telegram.unit; import dev.struchkov.bot.gitlab.context.domain.PersonInformation; import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest; import dev.struchkov.bot.gitlab.context.domain.entity.Project; -import dev.struchkov.bot.gitlab.context.prop.GitlabProperty; import dev.struchkov.bot.gitlab.context.service.AppSettingService; import dev.struchkov.bot.gitlab.context.service.MergeRequestsService; import dev.struchkov.bot.gitlab.context.service.NoteService; import dev.struchkov.bot.gitlab.context.service.ProjectService; import dev.struchkov.bot.gitlab.context.utils.Icons; import dev.struchkov.bot.gitlab.core.parser.ProjectParser; +import dev.struchkov.bot.gitlab.sdk.config.GitlabProperty; import dev.struchkov.bot.gitlab.telegram.utils.UnitName; import dev.struchkov.godfather.main.domain.annotation.Unit; import dev.struchkov.godfather.main.domain.content.Mail; @@ -42,6 +42,7 @@ import static dev.struchkov.godfather.simple.domain.BoxAnswer.replaceBoxAnswer; import static dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard.inlineKeyBoard; import static dev.struchkov.godfather.telegram.domain.keyboard.SimpleKeyBoardLine.keyBoardLine; import static dev.struchkov.godfather.telegram.domain.keyboard.button.SimpleButton.simpleButton; +import static dev.struchkov.godfather.telegram.main.context.BoxAnswerPayload.ENABLE_MARKDOWN; import static dev.struchkov.godfather.telegram.main.core.util.UnitTrigger.clickButtonRaw; import static dev.struchkov.godfather.telegram.main.core.util.UnitTrigger.isLinks; import static java.util.Collections.singleton; @@ -65,7 +66,6 @@ public class MenuConfig implements PersonUnitConfiguration { private final MergeRequestsService mergeRequestsService; private final AppSettingService settingService; - @Unit(value = ACCESS_ERROR, main = true) public AnswerText accessError() { return AnswerText.builder() @@ -83,6 +83,7 @@ public class MenuConfig implements PersonUnitConfiguration { return BoxAnswer.builder() .recipientPersonId(personInformation.getTelegramId()) .message(messageText) + .payload(ENABLE_MARKDOWN) .build(); }) .build();