diff --git a/bot-app/src/main/resources/application.yaml b/bot-app/src/main/resources/application.yaml index 67a1e09..2cc649c 100644 --- a/bot-app/src/main/resources/application.yaml +++ b/bot-app/src/main/resources/application.yaml @@ -37,6 +37,7 @@ gitlab-bot: url-pull-request-close: ${GITLAB_URL} url-pull-request-comment: ${GITLAB_URL}/api/v4/projects/{0}/merge_requests/{1}/notes url-pull-request: ${GITLAB_URL}/api/v4/projects/{0}/merge_requests/{1}?page={2}&per_page=100 + url-merge-request-add: ${GITLAB_URL}/api/v4/projects/{0}%2F{1} user-url: ${GITLAB_URL}/api/v4/user users-url: ${GITLAB_URL}/api/v4/users teamcity: diff --git a/bot-app/src/main/resources/messages_en.properties b/bot-app/src/main/resources/messages_en.properties index f5abb55..7120c37 100644 --- a/bot-app/src/main/resources/messages_en.properties +++ b/bot-app/src/main/resources/messages_en.properties @@ -10,6 +10,8 @@ ui.menu.task=My tasks ui.menu.mr=Merge Request ui.menu.setting=Settings ui.menu.add_mr=Add project +ui.menu.add_mr.text=Copy the url of the project and send it to me +menu.add_project_success=Project added successfully ui.menu.setting.text=This is the settings menu ui.menu.setting.language=Language settings ui.menu.setting.language.text=Choose your language diff --git a/bot-app/src/main/resources/messages_ru.properties b/bot-app/src/main/resources/messages_ru.properties index 17fb883..e5ae604 100644 --- a/bot-app/src/main/resources/messages_ru.properties +++ b/bot-app/src/main/resources/messages_ru.properties @@ -10,6 +10,8 @@ ui.menu.task=Мои задачи ui.menu.mr=Merge Request ui.menu.setting=Настройки ui.menu.add_mr=Добавить проект +ui.menu.add_mr.text=Скопируйте url проекта и отправьте его мне +menu.add_project_success=Проект успешно добавлен ui.menu.setting.text=Это меню настроек ui.menu.setting.language=Настройки языка ui.menu.setting.language.text=Выберете язык diff --git a/bot-core/src/main/java/org/sadtech/bot/gitlab/core/config/properties/GitlabProperty.java b/bot-core/src/main/java/org/sadtech/bot/gitlab/core/config/properties/GitlabProperty.java index dfb6651..aaa4645 100644 --- a/bot-core/src/main/java/org/sadtech/bot/gitlab/core/config/properties/GitlabProperty.java +++ b/bot-core/src/main/java/org/sadtech/bot/gitlab/core/config/properties/GitlabProperty.java @@ -42,4 +42,6 @@ public class GitlabProperty { private String usersUrl; + private String urlMergeRequestAdd; + } diff --git a/bot-core/src/main/java/org/sadtech/bot/gitlab/core/service/parser/ProjectParser.java b/bot-core/src/main/java/org/sadtech/bot/gitlab/core/service/parser/ProjectParser.java index 372e5bb..2ad01a9 100644 --- a/bot-core/src/main/java/org/sadtech/bot/gitlab/core/service/parser/ProjectParser.java +++ b/bot-core/src/main/java/org/sadtech/bot/gitlab/core/service/parser/ProjectParser.java @@ -115,4 +115,16 @@ public class ProjectParser { .executeList(ProjectJson.class); } + public void parseByUrl(String projectUrl) { + final Project project = HttpParse.request(projectUrl) + .header(ACCEPT) + .header(AUTHORIZATION, BEARER + personProperty.getToken()) + .execute(ProjectJson.class) + .map(json -> conversionService.convert(json, Project.class)) + .orElseThrow(() -> new ConvertException("Ошибка получения проекта")); + if (!projectService.existsById(project.getId())) { + projectService.create(project); + } + } + } diff --git a/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/MenuConfig.java b/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/MenuConfig.java index 3954596..b0e0f12 100644 --- a/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/MenuConfig.java +++ b/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/MenuConfig.java @@ -1,7 +1,8 @@ package org.sadtech.bot.gitlab.telegram.unit; -import org.sadtech.bot.gitlab.context.domain.AppLocale; import org.sadtech.bot.gitlab.context.service.AppSettingService; +import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty; +import org.sadtech.bot.gitlab.core.service.parser.ProjectParser; import org.sadtech.social.bot.domain.unit.AnswerText; import org.sadtech.social.core.domain.BoxAnswer; import org.sadtech.social.core.domain.keyboard.KeyBoard; @@ -11,6 +12,11 @@ import org.sadtech.social.core.utils.KeyBoards; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + /** * // TODO: 16.01.2021 Добавить описание. * @@ -22,12 +28,12 @@ public class MenuConfig { @Bean public AnswerText menu( AppSettingService settingService, - AnswerText settings + AnswerText settings, + AnswerText textAddNewProject ) { return AnswerText.builder() .boxAnswer(message -> { - final KeyBoardButtonText newMr = KeyBoardButtonText.builder().label(settingService.getMessage("ui.menu.add_mr")).build(); final KeyBoardButtonText tasks = KeyBoardButtonText.builder().label(settingService.getMessage("ui.menu.task")).build(); final KeyBoardButtonText pr = KeyBoardButtonText.builder().label(settingService.getMessage("ui.menu.mr")).build(); @@ -59,6 +65,36 @@ public class MenuConfig { } ) .nextUnit(settings) + .nextUnit(textAddNewProject) + .build(); + } + + @Bean + public AnswerText textAddNewProject( + AppSettingService settingService, + AnswerText addNewProject + ) { + return AnswerText.builder() + .boxAnswer(BoxAnswer.processing(settingService.getMessage("ui.menu.add_mr.text"))) + .phrase(settingService.getMessage("ui.menu.add_mr")) + .nextUnit(addNewProject) + .build(); + } + + @Bean + public AnswerText addNewProject( + AppSettingService settingService, + ProjectParser projectParser, + GitlabProperty gitlabProperty + ) { + return AnswerText.builder() + .boxAnswer(message -> { + final List urlList = Arrays.stream(message.getText().split("/")).collect(Collectors.toList()); + int lastElement = urlList.size() - 1; + final String projectUrl = MessageFormat.format(gitlabProperty.getUrlMergeRequestAdd(), urlList.get(lastElement - 1), urlList.get(lastElement)); + projectParser.parseByUrl(projectUrl); + return BoxAnswer.of(settingService.getMessage("menu.add_project_success")); + }) .build(); } @@ -78,37 +114,4 @@ public class MenuConfig { .build(); } - @Bean - public AnswerText settingsLanguage( - AppSettingService settingService, - AnswerText setLanguage - ) { - return AnswerText.builder() - .boxAnswer(message -> - BoxAnswer.builder() - .message(settingService.getMessage("ui.menu.setting.language.text")) - .keyBoard(KeyBoards.verticalDuoMenuString("Русский", "English")) - .build()) - .nextUnit(setLanguage) - .phrase(settingService.getMessage("ui.menu.setting.language")) - .build(); - } - - @Bean - public AnswerText setLanguage( - AppSettingService settingService - ) { - return AnswerText.builder() - .boxAnswer( - message -> { - final AppLocale appLocale = AppLocale.of(message.getText()); - settingService.setLocale(appLocale); - return BoxAnswer.of( - settingService.getMessage("ui.lang_changed") - ); - } - ) - .build(); - } - } diff --git a/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/menu/MenuSettingsConfig.java b/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/menu/MenuSettingsConfig.java new file mode 100644 index 0000000..5723564 --- /dev/null +++ b/telegram-bot/src/main/java/org/sadtech/bot/gitlab/telegram/unit/menu/MenuSettingsConfig.java @@ -0,0 +1,52 @@ +package org.sadtech.bot.gitlab.telegram.unit.menu; + +import org.sadtech.bot.gitlab.context.domain.AppLocale; +import org.sadtech.bot.gitlab.context.service.AppSettingService; +import org.sadtech.social.bot.domain.unit.AnswerText; +import org.sadtech.social.core.domain.BoxAnswer; +import org.sadtech.social.core.utils.KeyBoards; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * // TODO: 16.01.2021 Добавить описание. + * + * @author upagge 16.01.2021 + */ +@Configuration +public class MenuSettingsConfig { + + @Bean + public AnswerText settingsLanguage( + AppSettingService settingService, + AnswerText setLanguage + ) { + return AnswerText.builder() + .boxAnswer(message -> + BoxAnswer.builder() + .message(settingService.getMessage("ui.menu.setting.language.text")) + .keyBoard(KeyBoards.verticalDuoMenuString("Русский", "English")) + .build()) + .nextUnit(setLanguage) + .phrase(settingService.getMessage("ui.menu.setting.language")) + .build(); + } + + @Bean + public AnswerText setLanguage( + AppSettingService settingService + ) { + return AnswerText.builder() + .boxAnswer( + message -> { + final AppLocale appLocale = AppLocale.of(message.getText()); + settingService.setLocale(appLocale); + return BoxAnswer.of( + settingService.getMessage("ui.lang_changed") + ); + } + ) + .build(); + } + +}