Большой рефакторинг 2
This commit is contained in:
parent
32a5bf19e1
commit
f5b30b11fa
@ -9,7 +9,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
* Список локализаций приложения.
|
||||||
*
|
*
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.domain;
|
package dev.struchkov.bot.gitlab.context.domain;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
*
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
|
@ -4,8 +4,6 @@ import lombok.Getter;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.domain;
|
package dev.struchkov.bot.gitlab.context.domain;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
public enum PipelineStatus {
|
public enum PipelineStatus {
|
||||||
|
@ -13,7 +13,7 @@ import javax.persistence.Id;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
* Основные настройки приложения.
|
||||||
*
|
*
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
|
@ -18,8 +18,6 @@ import javax.persistence.Table;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -12,8 +12,6 @@ import javax.persistence.Id;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 12.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 12.09.2020
|
* @author upagge 12.09.2020
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -10,8 +10,6 @@ import javax.persistence.Id;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
|
@ -17,8 +17,6 @@ import javax.persistence.Table;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -12,8 +12,6 @@ import javax.persistence.Table;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.domain.filter;
|
package dev.struchkov.bot.gitlab.context.domain.filter;
|
||||||
|
|
||||||
|
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -10,7 +11,7 @@ import lombok.Setter;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.02.2021 Добавить описание.
|
* Объект фильтра для {@link Pipeline}.
|
||||||
*
|
*
|
||||||
* @author upagge 08.02.2021
|
* @author upagge 08.02.2021
|
||||||
*/
|
*/
|
||||||
|
@ -5,7 +5,6 @@ import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
|||||||
import dev.struchkov.bot.gitlab.context.utils.MessageUtils;
|
import dev.struchkov.bot.gitlab.context.utils.MessageUtils;
|
||||||
import dev.struchkov.bot.gitlab.context.utils.Smile;
|
import dev.struchkov.bot.gitlab.context.utils.Smile;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -14,28 +13,17 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author upagge 20.09.2020
|
* @author upagge 20.09.2020
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
//TODO [28.01.2022]: Решить доработать и оставить или удалить.
|
//TODO [28.01.2022]: Решить доработать и оставить или удалить.
|
||||||
public class GoodMorningNotify implements Notify {
|
public record GoodMorningNotify(
|
||||||
|
List<MergeRequest> mergeRequestsReviews,
|
||||||
|
List<MergeRequest> mergeRequestsNeedWork,
|
||||||
|
String personName, String version
|
||||||
|
) implements Notify {
|
||||||
|
|
||||||
private static final Integer PR_COUNT = 4;
|
private static final Integer PR_COUNT = 4;
|
||||||
|
|
||||||
private final List<MergeRequest> mergeRequestsReviews;
|
|
||||||
private final List<MergeRequest> mergeRequestsNeedWork;
|
|
||||||
private final String personName;
|
|
||||||
private final String version;
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
protected GoodMorningNotify(
|
public GoodMorningNotify {
|
||||||
List<MergeRequest> mergeRequestsReviews,
|
|
||||||
List<MergeRequest> mergeRequestsNeedWork,
|
|
||||||
String personName,
|
|
||||||
String version
|
|
||||||
) {
|
|
||||||
this.mergeRequestsReviews = mergeRequestsReviews;
|
|
||||||
this.mergeRequestsNeedWork = mergeRequestsNeedWork;
|
|
||||||
this.personName = personName;
|
|
||||||
this.version = version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,23 +8,18 @@ import lombok.Builder;
|
|||||||
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
public class NewProjectNotify implements Notify {
|
|
||||||
|
|
||||||
private final String projectName;
|
public record NewProjectNotify(
|
||||||
private final String projectUrl;
|
String projectName,
|
||||||
private final String projectDescription;
|
String projectUrl,
|
||||||
private final String authorName;
|
String projectDescription,
|
||||||
|
String authorName
|
||||||
|
) implements Notify {
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
public NewProjectNotify(String projectName, String projectUrl, String projectDescription, String authorName) {
|
public NewProjectNotify {
|
||||||
this.projectName = projectName;
|
|
||||||
this.projectUrl = projectUrl;
|
|
||||||
this.projectDescription = projectDescription;
|
|
||||||
this.authorName = authorName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -2,21 +2,14 @@ package dev.struchkov.bot.gitlab.context.domain.notify;
|
|||||||
|
|
||||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 20.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 20.09.2020
|
* @author upagge 20.09.2020
|
||||||
*/
|
*/
|
||||||
@Getter
|
public record SimpleTextNotify(String message) implements Notify {
|
||||||
public class SimpleTextNotify implements Notify {
|
|
||||||
|
|
||||||
private final String message;
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
private SimpleTextNotify(String message) {
|
public SimpleTextNotify {
|
||||||
this.message = message;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,26 +4,17 @@ import dev.struchkov.bot.gitlab.context.domain.notify.Notify;
|
|||||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||||
import dev.struchkov.bot.gitlab.context.utils.Smile;
|
import dev.struchkov.bot.gitlab.context.utils.Smile;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
||||||
|
|
||||||
@Getter
|
public record CommentNotify(
|
||||||
public class CommentNotify implements Notify {
|
String url,
|
||||||
|
String authorName,
|
||||||
private final String authorName;
|
String message
|
||||||
private final String message;
|
) implements Notify {
|
||||||
private final String url;
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
private CommentNotify(
|
public CommentNotify {
|
||||||
String url,
|
|
||||||
String authorName,
|
|
||||||
String message
|
|
||||||
) {
|
|
||||||
this.authorName = authorName;
|
|
||||||
this.message = message;
|
|
||||||
this.url = url;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -10,34 +10,19 @@ import java.text.MessageFormat;
|
|||||||
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
public class PipelineNotify implements Notify {
|
public record PipelineNotify(
|
||||||
|
Long pipelineId,
|
||||||
private final Long pipelineId;
|
String projectName,
|
||||||
private final String projectName;
|
String refName,
|
||||||
private final String refName;
|
String oldStatus,
|
||||||
private final String newStatus;
|
String newStatus,
|
||||||
private final String webUrl;
|
String webUrl
|
||||||
private String oldStatus = "n/a";
|
) implements Notify {
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
public PipelineNotify(
|
public PipelineNotify {
|
||||||
Long pipelineId,
|
|
||||||
String projectName,
|
|
||||||
String refName,
|
|
||||||
String oldStatus,
|
|
||||||
String newStatus,
|
|
||||||
String webUrl
|
|
||||||
) {
|
|
||||||
this.pipelineId = pipelineId;
|
|
||||||
this.projectName = projectName;
|
|
||||||
this.refName = refName;
|
|
||||||
this.oldStatus = oldStatus;
|
|
||||||
this.newStatus = newStatus;
|
|
||||||
this.webUrl = webUrl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -7,8 +7,6 @@ import lombok.Builder;
|
|||||||
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 10.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 10.09.2020
|
* @author upagge 10.09.2020
|
||||||
*/
|
*/
|
||||||
public class TaskCloseNotify extends TaskNotify {
|
public class TaskCloseNotify extends TaskNotify {
|
||||||
|
@ -8,8 +8,6 @@ import lombok.Getter;
|
|||||||
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
import static dev.struchkov.haiti.utils.Strings.escapeMarkdown;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 10.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 10.09.2020
|
* @author upagge 10.09.2020
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.exception;
|
|
||||||
|
|
||||||
import dev.struchkov.haiti.context.exception.BasicException;
|
|
||||||
|
|
||||||
abstract class GitlabBotException extends BasicException {
|
|
||||||
|
|
||||||
public GitlabBotException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GitlabBotException(String message, Throwable throwable) {
|
|
||||||
super(message, throwable);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.AppSetting;
|
|||||||
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
public interface AppSettingRepository extends SimpleManagerRepository<AppSetting, Long> {
|
public interface AppSettingRepository extends SimpleManagerRepository<AppSetting, Long> {
|
||||||
|
@ -7,12 +7,13 @@ import lombok.NonNull;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
public interface DiscussionRepository extends SimpleManagerRepository<Discussion, String> {
|
public interface DiscussionRepository extends SimpleManagerRepository<Discussion, String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Вернуть все дискусии для MR
|
||||||
|
*/
|
||||||
List<Discussion> findAllByMergeRequestId(@NonNull Long mergeRequestId);
|
List<Discussion> findAllByMergeRequestId(@NonNull Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,6 @@ import lombok.NonNull;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 08.09.2020
|
* @author upagge 08.09.2020
|
||||||
*/
|
*/
|
||||||
public interface NoteRepository extends SimpleManagerRepository<Note, Long> {
|
public interface NoteRepository extends SimpleManagerRepository<Note, Long> {
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
|||||||
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
public interface PersonRepository extends SimpleManagerRepository<Person, Long> {
|
public interface PersonRepository extends SimpleManagerRepository<Person, Long> {
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.repository;
|
package dev.struchkov.bot.gitlab.context.repository;
|
||||||
|
|
||||||
|
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
||||||
import dev.struchkov.haiti.context.page.Pagination;
|
import dev.struchkov.haiti.context.page.Pagination;
|
||||||
import dev.struchkov.haiti.context.page.Sheet;
|
import dev.struchkov.haiti.context.page.Sheet;
|
||||||
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
||||||
import dev.struchkov.haiti.filter.FilterOperation;
|
import dev.struchkov.haiti.filter.FilterOperation;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
public interface PipelineRepository extends SimpleManagerRepository<Pipeline, Long>, FilterOperation<Pipeline> {
|
public interface PipelineRepository extends SimpleManagerRepository<Pipeline, Long>, FilterOperation<Pipeline> {
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
|||||||
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
import dev.struchkov.haiti.context.repository.SimpleManagerRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
public interface ProjectRepository extends SimpleManagerRepository<Project, Long> {
|
public interface ProjectRepository extends SimpleManagerRepository<Project, Long> {
|
||||||
|
@ -4,20 +4,41 @@ import dev.struchkov.bot.gitlab.context.domain.AppLocale;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
* Сервис отвечает за пользовательские настройки приложения.
|
||||||
*
|
*
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
public interface AppSettingService {
|
public interface AppSettingService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод позволяет проверить запускается ли приложение впервые.
|
||||||
|
*
|
||||||
|
* @return true - если это первый запуск
|
||||||
|
*/
|
||||||
boolean isFirstStart();
|
boolean isFirstStart();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод отмечает, что приложение было запущено.
|
||||||
|
*
|
||||||
|
* @see AppSettingService#isFirstStart()
|
||||||
|
*/
|
||||||
void disableFirstStart();
|
void disableFirstStart();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Позволяет получить по ключу текст на языке, который установил пользователь
|
||||||
|
*
|
||||||
|
* @param label ключ сообщений
|
||||||
|
* @return Сообщение на языке пользователя
|
||||||
|
*/
|
||||||
String getMessage(@NonNull String label);
|
String getMessage(@NonNull String label);
|
||||||
|
|
||||||
String getMessage(@NonNull String label, Object... params);
|
String getMessage(@NonNull String label, Object... params);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает язык приложения
|
||||||
|
*
|
||||||
|
* @param appLocale Язык, который необходимо установить
|
||||||
|
*/
|
||||||
void setLocale(@NonNull AppLocale appLocale);
|
void setLocale(@NonNull AppLocale appLocale);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,23 @@
|
|||||||
package dev.struchkov.bot.gitlab.context.service;
|
package dev.struchkov.bot.gitlab.context.service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.02.2021 Добавить описание.
|
* <p>Контракт очистки хранилища.</p>
|
||||||
|
* <p>Так как все что мы получаем от гитлаба сохраняется в БД, иногда нужно удалять устаревшие данные. Например, MR, которые уже были давно вмержены.</p>
|
||||||
*
|
*
|
||||||
* @author upagge 08.02.2021
|
* @author upagge 08.02.2021
|
||||||
*/
|
*/
|
||||||
public interface CleanService {
|
public interface CleanService {
|
||||||
|
|
||||||
void cleanMergedPullRequests();
|
/**
|
||||||
|
* <p>Удаляет старые MR.</p>
|
||||||
|
* <p>По умолчанию старыми считаются те, которые закрыты или вмержены</p>
|
||||||
|
*/
|
||||||
|
void cleanOldMergedRequests();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Удаляет старые пайплайны</p>
|
||||||
|
* <p>По умолчанию удаляет все пайплайны старше суток</p>
|
||||||
|
*/
|
||||||
void cleanOldPipelines();
|
void cleanOldPipelines();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,14 +7,21 @@ import lombok.NonNull;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
public interface DiscussionService extends SimpleManagerService<Discussion, String> {
|
public interface DiscussionService extends SimpleManagerService<Discussion, String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод отправляющий коментарий в дискуссию.
|
||||||
|
*
|
||||||
|
* @param discussionId Идентификатор дискуссии
|
||||||
|
* @param text Текст комментария
|
||||||
|
*/
|
||||||
void answer(@NonNull String discussionId, @NonNull String text);
|
void answer(@NonNull String discussionId, @NonNull String text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Получить все дискусси для MR.
|
||||||
|
*/
|
||||||
List<Discussion> getAllByMergeRequestId(@NonNull Long mergeRequestId);
|
List<Discussion> getAllByMergeRequestId(@NonNull Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
|||||||
import dev.struchkov.haiti.context.service.SimpleManagerService;
|
import dev.struchkov.haiti.context.service.SimpleManagerService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
public interface PersonService extends SimpleManagerService<Person, Long> {
|
public interface PersonService extends SimpleManagerService<Person, Long> {
|
||||||
|
@ -12,7 +12,7 @@ import lombok.NonNull;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
* Сервис для работы с пайплайнами
|
||||||
*
|
*
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
|||||||
import dev.struchkov.haiti.context.service.SimpleManagerService;
|
import dev.struchkov.haiti.context.service.SimpleManagerService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
public interface ProjectService extends SimpleManagerService<Project, Long> {
|
public interface ProjectService extends SimpleManagerService<Project, Long> {
|
||||||
|
@ -6,7 +6,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.10.2020 Добавить описание.
|
* Основные настройки приложения.
|
||||||
*
|
*
|
||||||
* @author upagge 11.10.2020
|
* @author upagge 11.10.2020
|
||||||
*/
|
*/
|
||||||
|
@ -6,8 +6,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -6,11 +6,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.core.convert.converter.Converter;
|
import org.springframework.core.convert.converter.Converter;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -10,8 +10,6 @@ import org.springframework.core.convert.converter.Converter;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -7,8 +7,6 @@ import org.springframework.core.convert.converter.Converter;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 12.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 12.09.2020
|
* @author upagge 12.09.2020
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -6,8 +6,6 @@ import org.springframework.core.convert.converter.Converter;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -21,8 +21,6 @@ import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.SUCCESS;
|
|||||||
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.WAITING_FOR_RESOURCE;
|
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.WAITING_FOR_RESOURCE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -6,8 +6,6 @@ import org.springframework.core.convert.converter.Converter;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -15,7 +15,7 @@ import java.util.Locale;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
* Сервис отвечает за пользовательские настройки приложения.
|
||||||
*
|
*
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
@ -31,26 +31,20 @@ public class AppSettingServiceImpl implements AppSettingService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFirstStart() {
|
public boolean isFirstStart() {
|
||||||
return appSettingRepository.findById(KEY)
|
return getAppSetting().isFirstStart();
|
||||||
.orElseThrow(NOT_FOUND_SETTINGS)
|
|
||||||
.isFirstStart();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disableFirstStart() {
|
public void disableFirstStart() {
|
||||||
final AppSetting appSetting = appSettingRepository.findById(KEY).orElseThrow(NOT_FOUND_SETTINGS);
|
final AppSetting appSetting = getAppSetting();
|
||||||
appSetting.setFirstStart(false);
|
appSetting.setFirstStart(false);
|
||||||
appSettingRepository.save(appSetting);
|
appSettingRepository.save(appSetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMessage(@NonNull String label) {
|
public String getMessage(@NonNull String label) {
|
||||||
final Locale value = appSettingRepository.findById(KEY)
|
final Locale value = getAppSetting().getAppLocale().getValue();
|
||||||
.orElseThrow(NOT_FOUND_SETTINGS)
|
return messageSource.getMessage(label, null, value);
|
||||||
.getAppLocale().getValue();
|
|
||||||
return messageSource.getMessage(
|
|
||||||
label, null, value
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,17 +53,20 @@ public class AppSettingServiceImpl implements AppSettingService {
|
|||||||
return messageSource.getMessage(
|
return messageSource.getMessage(
|
||||||
label,
|
label,
|
||||||
paramsArray,
|
paramsArray,
|
||||||
appSettingRepository.findById(KEY)
|
getAppSetting().getAppLocale().getValue()
|
||||||
.orElseThrow(NOT_FOUND_SETTINGS)
|
|
||||||
.getAppLocale().getValue()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLocale(@NonNull AppLocale appLocale) {
|
public void setLocale(@NonNull AppLocale appLocale) {
|
||||||
final AppSetting appSetting = appSettingRepository.findById(KEY).orElseThrow(NOT_FOUND_SETTINGS);
|
final AppSetting appSetting = getAppSetting();
|
||||||
appSetting.setAppLocale(appLocale);
|
appSetting.setAppLocale(appLocale);
|
||||||
appSettingRepository.save(appSetting);
|
appSettingRepository.save(appSetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AppSetting getAppSetting() {
|
||||||
|
return appSettingRepository.findById(KEY)
|
||||||
|
.orElseThrow(NOT_FOUND_SETTINGS);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,13 +15,12 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import static dev.struchkov.bot.gitlab.context.domain.MergeRequestState.CLOSED;
|
import static dev.struchkov.bot.gitlab.context.domain.MergeRequestState.CLOSED;
|
||||||
import static dev.struchkov.bot.gitlab.context.domain.MergeRequestState.MERGED;
|
import static dev.struchkov.bot.gitlab.context.domain.MergeRequestState.MERGED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.02.2021 Добавить описание.
|
* Реализация сервиса очистки данных.
|
||||||
*
|
*
|
||||||
* @author upagge 08.02.2021
|
* @author upagge 08.02.2021
|
||||||
*/
|
*/
|
||||||
@ -30,7 +29,7 @@ import static dev.struchkov.bot.gitlab.context.domain.MergeRequestState.MERGED;
|
|||||||
public class CleanServiceImpl implements CleanService {
|
public class CleanServiceImpl implements CleanService {
|
||||||
|
|
||||||
private static final int COUNT = 1000;
|
private static final int COUNT = 1000;
|
||||||
private static final MergeRequestFilter CLEAN_FILTER = MergeRequestFilter.builder()
|
private static final MergeRequestFilter MR_CLEAN_FILTER = MergeRequestFilter.builder()
|
||||||
.states(Set.of(MERGED, CLOSED))
|
.states(Set.of(MERGED, CLOSED))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -38,9 +37,9 @@ public class CleanServiceImpl implements CleanService {
|
|||||||
private final PipelineService pipelineService;
|
private final PipelineService pipelineService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanMergedPullRequests() {
|
public void cleanOldMergedRequests() {
|
||||||
int page = 0;
|
int page = 0;
|
||||||
Sheet<MergeRequest> mergeRequestSheet = mergeRequestsService.getAll(CLEAN_FILTER, PaginationImpl.of(page, COUNT));
|
Sheet<MergeRequest> mergeRequestSheet = mergeRequestsService.getAll(MR_CLEAN_FILTER, PaginationImpl.of(page, COUNT));
|
||||||
|
|
||||||
while (mergeRequestSheet.hasContent()) {
|
while (mergeRequestSheet.hasContent()) {
|
||||||
final Set<Long> ids = mergeRequestSheet.getContent().stream()
|
final Set<Long> ids = mergeRequestSheet.getContent().stream()
|
||||||
@ -49,7 +48,7 @@ public class CleanServiceImpl implements CleanService {
|
|||||||
|
|
||||||
mergeRequestsService.deleteAllById(ids);
|
mergeRequestsService.deleteAllById(ids);
|
||||||
|
|
||||||
mergeRequestSheet = mergeRequestsService.getAll(CLEAN_FILTER, PaginationImpl.of(++page, COUNT));
|
mergeRequestSheet = mergeRequestsService.getAll(MR_CLEAN_FILTER, PaginationImpl.of(++page, COUNT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,10 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static java.lang.Boolean.FALSE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* Сервис для работы с дискуссиями.
|
||||||
*
|
*
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@ -69,7 +71,7 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
public Discussion create(@NonNull Discussion discussion) {
|
public Discussion create(@NonNull Discussion discussion) {
|
||||||
discussion.getNotes().forEach(note -> personService.create(note.getAuthor()));
|
discussion.getNotes().forEach(note -> personService.create(note.getAuthor()));
|
||||||
discussion.getNotes().forEach(this::notificationPersonal);
|
discussion.getNotes().forEach(this::notificationPersonal);
|
||||||
discussion.getNotes().forEach(note -> notifyNewTask(note, discussion));
|
discussion.getNotes().forEach(note -> notifyNewNote(note, discussion));
|
||||||
|
|
||||||
final boolean resolved = discussion.getNotes().stream()
|
final boolean resolved = discussion.getNotes().stream()
|
||||||
.allMatch(note -> note.isResolvable() && note.getResolved());
|
.allMatch(note -> note.isResolvable() && note.getResolved());
|
||||||
@ -77,13 +79,11 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
return discussionRepository.save(discussion);
|
return discussionRepository.save(discussion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyNewTask(Note note, Discussion discussion) {
|
/**
|
||||||
if (note.isResolvable()
|
* <p>Уведомляет пользователя, если появился новый комментарий</p>
|
||||||
&& personInformation.getId().equals(discussion.getResponsible().getId())
|
*/
|
||||||
&& !personInformation.getId().equals(note.getAuthor().getId())
|
private void notifyNewNote(Note note, Discussion discussion) {
|
||||||
&& note.getResolved() != null
|
if (isNeedNotifyNewNote(note, discussion)) {
|
||||||
&& !note.getResolved()
|
|
||||||
) {
|
|
||||||
notifyService.send(
|
notifyService.send(
|
||||||
TaskNewNotify.builder()
|
TaskNewNotify.builder()
|
||||||
.authorName(note.getAuthor().getName())
|
.authorName(note.getAuthor().getName())
|
||||||
@ -94,22 +94,34 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isNeedNotifyNewNote(Note note, Discussion discussion) {
|
||||||
|
final Long personId = personInformation.getId();
|
||||||
|
return note.isResolvable() // Тип комментария требует решения (Задачи)
|
||||||
|
&& personId.equals(discussion.getResponsible().getId()) // Создатель дискуссии пользователь приложения
|
||||||
|
&& !personId.equals(note.getAuthor().getId()) // Создатель комментария не пользователь системы
|
||||||
|
&& FALSE.equals(note.getResolved()); // Комментарий не отмечен как решенный
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Discussion update(@NonNull Discussion discussion) {
|
public Discussion update(@NonNull Discussion discussion) {
|
||||||
final Discussion oldDiscussion = discussionRepository.findById(discussion.getId())
|
final Discussion oldDiscussion = discussionRepository.findById(discussion.getId())
|
||||||
.orElseThrow(NotFoundException.supplier("Дискуссия не найдена"));
|
.orElseThrow(NotFoundException.supplier("Дискуссия не найдена"));
|
||||||
final Map<Long, Note> noteMap = oldDiscussion
|
final Map<Long, Note> idAndNoteMap = oldDiscussion
|
||||||
.getNotes().stream()
|
.getNotes().stream()
|
||||||
.collect(Collectors.toMap(Note::getId, note -> note));
|
.collect(Collectors.toMap(Note::getId, note -> note));
|
||||||
final boolean inDiscussion = discussion.getNotes().stream()
|
|
||||||
|
// Пользователь участвовал в обсуждении
|
||||||
|
final boolean userParticipatedInDiscussion = discussion.getNotes().stream()
|
||||||
.anyMatch(note -> personInformation.getId().equals(note.getAuthor().getId()));
|
.anyMatch(note -> personInformation.getId().equals(note.getAuthor().getId()));
|
||||||
|
|
||||||
discussion.setMergeRequest(oldDiscussion.getMergeRequest());
|
discussion.setMergeRequest(oldDiscussion.getMergeRequest());
|
||||||
discussion.setResponsible(oldDiscussion.getResponsible());
|
discussion.setResponsible(oldDiscussion.getResponsible());
|
||||||
discussion.getNotes().forEach(note -> updateNote(note, noteMap, inDiscussion));
|
discussion.getNotes().forEach(note -> updateNote(note, idAndNoteMap, userParticipatedInDiscussion));
|
||||||
|
|
||||||
final boolean resolved = discussion.getNotes().stream()
|
final boolean resolved = discussion.getNotes().stream()
|
||||||
.allMatch(note -> note.isResolvable() && note.getResolved());
|
.allMatch(note -> note.isResolvable() && note.getResolved());
|
||||||
discussion.setResolved(resolved);
|
discussion.setResolved(resolved);
|
||||||
|
|
||||||
return discussionRepository.save(discussion);
|
return discussionRepository.save(discussion);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,9 +217,12 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
return discussionRepository.findAllByMergeRequestId(mergeRequestId);
|
return discussionRepository.findAllByMergeRequestId(mergeRequestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Уведомляет пользователя, если его никнейм упоминается в комментарии.
|
||||||
|
*/
|
||||||
protected void notificationPersonal(@NonNull Note note) {
|
protected void notificationPersonal(@NonNull Note note) {
|
||||||
Matcher matcher = PATTERN.matcher(note.getBody());
|
final Matcher matcher = PATTERN.matcher(note.getBody());
|
||||||
Set<String> recipientsLogins = new HashSet<>();
|
final Set<String> recipientsLogins = new HashSet<>();
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
final String login = matcher.group(0).replace("@", "");
|
final String login = matcher.group(0).replace("@", "");
|
||||||
recipientsLogins.add(login);
|
recipientsLogins.add(login);
|
||||||
|
@ -8,8 +8,6 @@ import lombok.NonNull;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@ -2,6 +2,7 @@ package dev.struchkov.bot.gitlab.core.service.impl;
|
|||||||
|
|
||||||
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
||||||
|
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.filter.PipelineFilter;
|
import dev.struchkov.bot.gitlab.context.domain.filter.PipelineFilter;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.notify.pipeline.PipelineNotify;
|
import dev.struchkov.bot.gitlab.context.domain.notify.pipeline.PipelineNotify;
|
||||||
@ -26,13 +27,14 @@ import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.SKIPPED;
|
|||||||
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.SUCCESS;
|
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.SUCCESS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
* Реализация сервиса для работы с пайплайнами.
|
||||||
*
|
*
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline, Long> implements PipelineService {
|
public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline, Long> implements PipelineService {
|
||||||
|
|
||||||
|
// Статусы пайплайнов, о которых нужно уведомить
|
||||||
private static final Set<PipelineStatus> notificationStatus = Set.of(FAILED, SUCCESS, CANCELED, SKIPPED);
|
private static final Set<PipelineStatus> notificationStatus = Set.of(FAILED, SUCCESS, CANCELED, SKIPPED);
|
||||||
|
|
||||||
private final NotifyService notifyService;
|
private final NotifyService notifyService;
|
||||||
@ -61,12 +63,12 @@ public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline,
|
|||||||
public Pipeline create(@NonNull Pipeline pipeline) {
|
public Pipeline create(@NonNull Pipeline pipeline) {
|
||||||
personService.create(pipeline.getPerson());
|
personService.create(pipeline.getPerson());
|
||||||
final Pipeline newPipeline = pipelineRepository.save(pipeline);
|
final Pipeline newPipeline = pipelineRepository.save(pipeline);
|
||||||
|
notifyNewPipeline(pipeline, "n/a");
|
||||||
|
return newPipeline;
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
private void notifyNewPipeline(Pipeline pipeline, String oldStatus) {
|
||||||
notificationStatus.contains(pipeline.getStatus())
|
if (isNeedNotifyNewPipeline(pipeline)) {
|
||||||
&& pipeline.getPerson() != null
|
|
||||||
&& personInformation.getId().equals(pipeline.getPerson().getId())
|
|
||||||
) {
|
|
||||||
notifyService.send(
|
notifyService.send(
|
||||||
PipelineNotify.builder()
|
PipelineNotify.builder()
|
||||||
.newStatus(pipeline.getStatus().name())
|
.newStatus(pipeline.getStatus().name())
|
||||||
@ -74,11 +76,10 @@ public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline,
|
|||||||
.projectName(pipeline.getProject().getName())
|
.projectName(pipeline.getProject().getName())
|
||||||
.refName(pipeline.getRef())
|
.refName(pipeline.getRef())
|
||||||
.webUrl(pipeline.getWebUrl())
|
.webUrl(pipeline.getWebUrl())
|
||||||
|
.oldStatus(oldStatus)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return newPipeline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,31 +89,20 @@ public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline,
|
|||||||
|
|
||||||
if (!oldPipeline.getUpdated().equals(pipeline.getUpdated())) {
|
if (!oldPipeline.getUpdated().equals(pipeline.getUpdated())) {
|
||||||
pipeline.setProject(oldPipeline.getProject());
|
pipeline.setProject(oldPipeline.getProject());
|
||||||
|
notifyNewPipeline(pipeline, oldPipeline.getStatus().name());
|
||||||
if (
|
return pipelineRepository.save(pipeline);
|
||||||
notificationStatus.contains(pipeline.getStatus())
|
|
||||||
&& pipeline.getPerson() != null
|
|
||||||
&& personInformation.getId().equals(pipeline.getPerson().getId())
|
|
||||||
) {
|
|
||||||
notifyService.send(
|
|
||||||
PipelineNotify.builder()
|
|
||||||
.pipelineId(pipeline.getId())
|
|
||||||
.webUrl(pipeline.getWebUrl())
|
|
||||||
.projectName(pipeline.getProject().getName())
|
|
||||||
.refName(pipeline.getRef())
|
|
||||||
.newStatus(pipeline.getStatus().name())
|
|
||||||
.oldStatus(oldPipeline.getStatus().name())
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
|
|
||||||
return pipelineRepository.save(pipeline);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return oldPipeline;
|
return oldPipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isNeedNotifyNewPipeline(@NonNull Pipeline pipeline) {
|
||||||
|
final Person personPipelineCreator = pipeline.getPerson();
|
||||||
|
return notificationStatus.contains(pipeline.getStatus()) // Пайплайн имеет статус необходимый для уведомления
|
||||||
|
&& personPipelineCreator != null
|
||||||
|
&& personInformation.getId().equals(personPipelineCreator.getId()); // Пользователь приложения является инициатором пайплайна
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Sheet<Pipeline> getAllByStatuses(@NonNull Set<PipelineStatus> statuses, @NonNull Pagination pagination) {
|
public Sheet<Pipeline> getAllByStatuses(@NonNull Set<PipelineStatus> statuses, @NonNull Pagination pagination) {
|
||||||
return pipelineRepository.findAllByStatuses(statuses, pagination);
|
return pipelineRepository.findAllByStatuses(statuses, pagination);
|
||||||
|
@ -14,8 +14,6 @@ import lombok.NonNull;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@ -44,23 +42,27 @@ public class ProjectServiceImpl extends AbstractSimpleManagerService<Project, Lo
|
|||||||
public Project create(@NonNull Project project) {
|
public Project create(@NonNull Project project) {
|
||||||
final Project newProject = projectRepository.save(project);
|
final Project newProject = projectRepository.save(project);
|
||||||
|
|
||||||
if (!newProject.getCreatorId().equals(personInformation.getId())) {
|
if (!personInformation.getId().equals(newProject.getCreatorId())) {
|
||||||
final String authorName = personService.getById(newProject.getCreatorId())
|
final String authorName = personService.getById(newProject.getCreatorId())
|
||||||
.orElseThrow(NotFoundException.supplier("Пользователь не найден"))
|
.orElseThrow(NotFoundException.supplier("Пользователь не найден"))
|
||||||
.getName();
|
.getName();
|
||||||
notifyService.send(
|
sendNotifyNewProject(newProject, authorName);
|
||||||
NewProjectNotify.builder()
|
|
||||||
.projectDescription(newProject.getDescription())
|
|
||||||
.projectName(newProject.getName())
|
|
||||||
.projectUrl(newProject.getWebUrl())
|
|
||||||
.authorName(authorName)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return newProject;
|
return newProject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendNotifyNewProject(Project newProject, String authorName) {
|
||||||
|
notifyService.send(
|
||||||
|
NewProjectNotify.builder()
|
||||||
|
.projectDescription(newProject.getDescription())
|
||||||
|
.projectName(newProject.getName())
|
||||||
|
.projectUrl(newProject.getWebUrl())
|
||||||
|
.authorName(authorName)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Project update(@NonNull Project project) {
|
public Project update(@NonNull Project project) {
|
||||||
return projectRepository.save(project);
|
return projectRepository.save(project);
|
||||||
|
@ -13,7 +13,7 @@ import lombok.NonNull;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.02.2021 Добавить описание.
|
* Сервис фильтрации пайплайнов.
|
||||||
*
|
*
|
||||||
* @author upagge 08.02.2021
|
* @author upagge 08.02.2021
|
||||||
*/
|
*/
|
||||||
|
@ -2,11 +2,11 @@ package dev.struchkov.bot.gitlab.core.service.parser;
|
|||||||
|
|
||||||
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
|
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
|
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
|
||||||
|
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
|
||||||
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
||||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
|
||||||
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
|
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
|
||||||
import dev.struchkov.haiti.context.domain.ExistsContainer;
|
import dev.struchkov.haiti.context.domain.ExistsContainer;
|
||||||
import dev.struchkov.haiti.context.page.Sheet;
|
import dev.struchkov.haiti.context.page.Sheet;
|
||||||
@ -20,12 +20,14 @@ import java.text.MessageFormat;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static dev.struchkov.bot.gitlab.core.utils.StringUtils.H_PRIVATE_TOKEN;
|
||||||
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* Парсер обсуждений.
|
||||||
*
|
*
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@ -33,7 +35,7 @@ import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class DiscussionParser {
|
public class DiscussionParser {
|
||||||
|
|
||||||
public static final int COUNT = 100;
|
public static final int COUNT = 500;
|
||||||
|
|
||||||
private final DiscussionService discussionService;
|
private final DiscussionService discussionService;
|
||||||
private final MergeRequestsService mergeRequestsService;
|
private final MergeRequestsService mergeRequestsService;
|
||||||
@ -42,19 +44,16 @@ public class DiscussionParser {
|
|||||||
private final GitlabProperty gitlabProperty;
|
private final GitlabProperty gitlabProperty;
|
||||||
private final PersonProperty personProperty;
|
private final PersonProperty personProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Поиск новых обсуждений
|
||||||
|
*/
|
||||||
public void scanNewDiscussion() {
|
public void scanNewDiscussion() {
|
||||||
int page = 0;
|
int page = 0;
|
||||||
Sheet<MergeRequest> mergeRequestSheet = mergeRequestsService.getAll(PaginationImpl.of(page, COUNT));
|
Sheet<MergeRequest> mergeRequestSheet = mergeRequestsService.getAll(PaginationImpl.of(page, COUNT));
|
||||||
|
|
||||||
while (mergeRequestSheet.hasContent()) {
|
while (mergeRequestSheet.hasContent()) {
|
||||||
|
mergeRequestSheet.getContent()
|
||||||
final List<MergeRequest> mergeRequests = mergeRequestSheet.getContent();
|
.forEach(this::processingMergeRequest);
|
||||||
for (MergeRequest mergeRequest : mergeRequests) {
|
|
||||||
|
|
||||||
processingMergeRequest(mergeRequest);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
mergeRequestSheet = mergeRequestsService.getAll(PaginationImpl.of(++page, COUNT));
|
mergeRequestSheet = mergeRequestsService.getAll(PaginationImpl.of(++page, COUNT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,11 +71,11 @@ public class DiscussionParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createNewDiscussion(List<DiscussionJson> discussionJson, MergeRequest mergeRequest) {
|
private void createNewDiscussion(List<DiscussionJson> discussionJson, MergeRequest mergeRequest) {
|
||||||
final Set<String> jsonIds = discussionJson.stream()
|
final Set<String> discussionIds = discussionJson.stream()
|
||||||
.map(DiscussionJson::getId)
|
.map(DiscussionJson::getId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
|
||||||
final ExistsContainer<Discussion, String> existsContainer = discussionService.existsById(jsonIds);
|
final ExistsContainer<Discussion, String> existsContainer = discussionService.existsById(discussionIds);
|
||||||
if (!existsContainer.isAllFound()) {
|
if (!existsContainer.isAllFound()) {
|
||||||
final List<Discussion> newDiscussions = discussionJson.stream()
|
final List<Discussion> newDiscussions = discussionJson.stream()
|
||||||
.filter(json -> existsContainer.getIdNoFound().contains(json.getId()))
|
.filter(json -> existsContainer.getIdNoFound().contains(json.getId()))
|
||||||
@ -84,12 +83,7 @@ public class DiscussionParser {
|
|||||||
final Discussion discussion = conversionService.convert(json, Discussion.class);
|
final Discussion discussion = conversionService.convert(json, Discussion.class);
|
||||||
discussion.setMergeRequest(mergeRequest);
|
discussion.setMergeRequest(mergeRequest);
|
||||||
discussion.setResponsible(mergeRequest.getAuthor());
|
discussion.setResponsible(mergeRequest.getAuthor());
|
||||||
discussion.getNotes().forEach(
|
discussion.getNotes().forEach(createNoteLink(mergeRequest));
|
||||||
note -> {
|
|
||||||
final String url = MessageFormat.format(gitlabProperty.getUrlNote(), mergeRequest.getWebUrl(), note.getId());
|
|
||||||
note.setWebUrl(url);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return discussion;
|
return discussion;
|
||||||
})
|
})
|
||||||
.filter(discussion -> discussion.getNotes() != null && !discussion.getNotes().isEmpty())
|
.filter(discussion -> discussion.getNotes() != null && !discussion.getNotes().isEmpty())
|
||||||
@ -98,34 +92,25 @@ public class DiscussionParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DiscussionJson> getDiscussionJson(MergeRequest mergeRequest, int page) {
|
/**
|
||||||
return HttpParse.request(MessageFormat.format(gitlabProperty.getUrlDiscussion(), mergeRequest.getProjectId(), mergeRequest.getTwoId(), page))
|
* Сканирование старых обсуждений на предмет новых комментарие
|
||||||
.header(ACCEPT)
|
*/
|
||||||
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
|
||||||
.executeList(DiscussionJson.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void scanOldDiscussions() {
|
public void scanOldDiscussions() {
|
||||||
int page = 0;
|
int page = 0;
|
||||||
Sheet<Discussion> discussionSheet = discussionService.getAll(PaginationImpl.of(page, 100));
|
Sheet<Discussion> discussionSheet = discussionService.getAll(PaginationImpl.of(page, COUNT));
|
||||||
|
|
||||||
while (discussionSheet.hasContent()) {
|
while (discussionSheet.hasContent()) {
|
||||||
final List<Discussion> discussions = discussionSheet.getContent();
|
final List<Discussion> discussions = discussionSheet.getContent();
|
||||||
|
|
||||||
for (Discussion discussion : discussions) {
|
for (Discussion discussion : discussions) {
|
||||||
if (discussion.getMergeRequest() != null) {
|
if (discussion.getMergeRequest() != null) {
|
||||||
final Optional<Discussion> optNewDiscussion = HttpParse.request(MessageFormat.format(gitlabProperty.getUrlOneDiscussion(), discussion.getMergeRequest().getProjectId(), discussion.getMergeRequest().getTwoId(), discussion.getId()))
|
final Optional<Discussion> optNewDiscussion = HttpParse.request(createLinkOldDiscussion(discussion))
|
||||||
.header(ACCEPT)
|
.header(ACCEPT)
|
||||||
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
.header(H_PRIVATE_TOKEN, personProperty.getToken())
|
||||||
.execute(DiscussionJson.class)
|
.execute(DiscussionJson.class)
|
||||||
.map(json -> {
|
.map(json -> {
|
||||||
final Discussion newDiscussion = conversionService.convert(json, Discussion.class);
|
final Discussion newDiscussion = conversionService.convert(json, Discussion.class);
|
||||||
newDiscussion.getNotes().forEach(
|
newDiscussion.getNotes().forEach(createNoteLink(discussion.getMergeRequest()));
|
||||||
note -> {
|
|
||||||
final String url = MessageFormat.format(gitlabProperty.getUrlNote(), discussion.getMergeRequest().getWebUrl(), note.getId());
|
|
||||||
note.setWebUrl(url);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return newDiscussion;
|
return newDiscussion;
|
||||||
});
|
});
|
||||||
optNewDiscussion.ifPresent(discussionService::update);
|
optNewDiscussion.ifPresent(discussionService::update);
|
||||||
@ -134,10 +119,32 @@ public class DiscussionParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
discussionSheet = discussionService.getAll(PaginationImpl.of(++page, 100));
|
discussionSheet = discussionService.getAll(PaginationImpl.of(++page, COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createLinkOldDiscussion(Discussion discussion) {
|
||||||
|
return MessageFormat.format(
|
||||||
|
gitlabProperty.getUrlOneDiscussion(),
|
||||||
|
discussion.getMergeRequest().getProjectId(),
|
||||||
|
discussion.getMergeRequest().getTwoId(),
|
||||||
|
discussion.getId()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<DiscussionJson> getDiscussionJson(MergeRequest mergeRequest, int page) {
|
||||||
|
return HttpParse.request(MessageFormat.format(gitlabProperty.getUrlDiscussion(), mergeRequest.getProjectId(), mergeRequest.getTwoId(), page))
|
||||||
|
.header(ACCEPT)
|
||||||
|
.header(H_PRIVATE_TOKEN, personProperty.getToken())
|
||||||
|
.executeList(DiscussionJson.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Consumer<Note> createNoteLink(MergeRequest mergeRequest) {
|
||||||
|
return note -> {
|
||||||
|
final String url = MessageFormat.format(gitlabProperty.getUrlNote(), mergeRequest.getWebUrl(), note.getId());
|
||||||
|
note.setWebUrl(url);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.CREATED;
|
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.CREATED;
|
||||||
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.MANUAL;
|
import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.MANUAL;
|
||||||
@ -35,11 +34,10 @@ import static dev.struchkov.bot.gitlab.context.domain.PipelineStatus.WAITING_FOR
|
|||||||
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
* Парсер пайплайнов.
|
||||||
*
|
*
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class PipelineParser {
|
public class PipelineParser {
|
||||||
@ -101,7 +99,7 @@ public class PipelineParser {
|
|||||||
pipeline.setProject(project);
|
pipeline.setProject(project);
|
||||||
return pipeline;
|
return pipeline;
|
||||||
})
|
})
|
||||||
.orElseThrow(() -> new ConvertException("Ошибка обновления Pipelines"));
|
.orElseThrow(ConvertException.supplier("Ошибка обновления Pipelines"));
|
||||||
pipelineService.create(newPipeline);
|
pipelineService.create(newPipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +134,7 @@ public class PipelineParser {
|
|||||||
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
||||||
.execute(PipelineJson.class)
|
.execute(PipelineJson.class)
|
||||||
.map(json -> conversionService.convert(json, Pipeline.class))
|
.map(json -> conversionService.convert(json, Pipeline.class))
|
||||||
.orElseThrow(() -> new ConvertException("Ошибка обновления Pipelines"));
|
.orElseThrow(ConvertException.supplier("Ошибка обновления Pipelines"));
|
||||||
|
|
||||||
pipelineService.update(newPipeline);
|
pipelineService.update(newPipeline);
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ import java.util.stream.Collectors;
|
|||||||
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
import static dev.struchkov.haiti.utils.network.HttpParse.ACCEPT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
* Парсер проектов.
|
||||||
*
|
*
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@ -60,13 +60,13 @@ public class ProjectParser {
|
|||||||
|
|
||||||
while (!projectJsons.isEmpty()) {
|
while (!projectJsons.isEmpty()) {
|
||||||
|
|
||||||
final Set<Long> jsonIds = projectJsons.stream()
|
final Set<Long> projectIds = projectJsons.stream()
|
||||||
.map(ProjectJson::getId)
|
.map(ProjectJson::getId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
|
||||||
createNewPersons(projectJsons);
|
createNewPersons(projectJsons);
|
||||||
|
|
||||||
final ExistsContainer<Project, Long> existsContainer = projectService.existsById(jsonIds);
|
final ExistsContainer<Project, Long> existsContainer = projectService.existsById(projectIds);
|
||||||
final List<Project> newProjects = projectJsons.stream()
|
final List<Project> newProjects = projectJsons.stream()
|
||||||
.filter(json -> existsContainer.getIdNoFound().contains(json.getId()))
|
.filter(json -> existsContainer.getIdNoFound().contains(json.getId()))
|
||||||
.map(json -> conversionService.convert(json, Project.class))
|
.map(json -> conversionService.convert(json, Project.class))
|
||||||
@ -81,11 +81,11 @@ public class ProjectParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createNewPersons(List<ProjectJson> projectJsons) {
|
private void createNewPersons(List<ProjectJson> projectJsons) {
|
||||||
final Set<Long> jsonIds = projectJsons.stream()
|
final Set<Long> personCreatorId = projectJsons.stream()
|
||||||
.map(ProjectJson::getCreatorId)
|
.map(ProjectJson::getCreatorId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
final ExistsContainer<Person, Long> existsContainer = personService.existsById(jsonIds);
|
final ExistsContainer<Person, Long> existsContainer = personService.existsById(personCreatorId);
|
||||||
|
|
||||||
if (!existsContainer.isAllFound()) {
|
if (!existsContainer.isAllFound()) {
|
||||||
final Collection<Long> notFoundId = existsContainer.getIdNoFound();
|
final Collection<Long> notFoundId = existsContainer.getIdNoFound();
|
||||||
@ -96,11 +96,11 @@ public class ProjectParser {
|
|||||||
.header(ACCEPT)
|
.header(ACCEPT)
|
||||||
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
||||||
.execute(PersonJson.class)
|
.execute(PersonJson.class)
|
||||||
.map(json -> conversionService.convert(json, Person.class)).orElseThrow(() -> new ConvertException("Ошибка преобразования нового пользователя"))
|
.map(json -> conversionService.convert(json, Person.class))
|
||||||
|
.orElseThrow(ConvertException.supplier("Ошибка преобразования нового пользователя"))
|
||||||
).toList();
|
).toList();
|
||||||
|
|
||||||
personService.createAll(newPersons);
|
personService.createAll(newPersons);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ public class ProjectParser {
|
|||||||
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
.header(StringUtils.H_PRIVATE_TOKEN, personProperty.getToken())
|
||||||
.execute(ProjectJson.class)
|
.execute(ProjectJson.class)
|
||||||
.map(json -> conversionService.convert(json, Project.class))
|
.map(json -> conversionService.convert(json, Project.class))
|
||||||
.orElseThrow(() -> new ConvertException("Ошибка получения проекта"));
|
.orElseThrow(ConvertException.supplier("Ошибка получения проекта"));
|
||||||
if (!projectService.existsById(project.getId())) {
|
if (!projectService.existsById(project.getId())) {
|
||||||
projectService.create(project);
|
projectService.create(project);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import lombok.AccessLevel;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 29.09.2020 Добавить описание.
|
* Утилитарный класс для работы со сторками.
|
||||||
*
|
*
|
||||||
* @author upagge 29.09.2020
|
* @author upagge 29.09.2020
|
||||||
*/
|
*/
|
||||||
|
@ -7,8 +7,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -10,8 +10,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -13,7 +13,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 08.09.2020 Добавить описание.
|
|
||||||
*
|
*
|
||||||
* @author upagge 08.09.2020
|
* @author upagge 08.09.2020
|
||||||
*/
|
*/
|
||||||
|
@ -7,8 +7,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -14,8 +14,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -7,8 +7,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.AppSetting;
|
|||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 16.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 16.01.2021
|
* @author upagge 16.01.2021
|
||||||
*/
|
*/
|
||||||
public interface AppSettingJpaRepository extends JpaRepository<AppSetting, Long> {
|
public interface AppSettingJpaRepository extends JpaRepository<AppSetting, Long> {
|
||||||
|
@ -6,12 +6,13 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
public interface DiscussionJpaRepository extends JpaRepository<Discussion, String> {
|
public interface DiscussionJpaRepository extends JpaRepository<Discussion, String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Находит все обсуждения MR
|
||||||
|
*/
|
||||||
List<Discussion> findAllByMergeRequestId(Long mergeRequestId);
|
List<Discussion> findAllByMergeRequestId(Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
|||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 15.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 15.01.2021
|
* @author upagge 15.01.2021
|
||||||
*/
|
*/
|
||||||
public interface PersonJpaRepository extends JpaRepository<Person, Long> {
|
public interface PersonJpaRepository extends JpaRepository<Person, Long> {
|
||||||
|
@ -9,8 +9,6 @@ import org.springframework.data.jpa.repository.support.JpaRepositoryImplementati
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
public interface PipelineJpaRepository extends JpaRepositoryImplementation<Pipeline, Long> {
|
public interface PipelineJpaRepository extends JpaRepositoryImplementation<Pipeline, Long> {
|
||||||
|
@ -4,8 +4,6 @@ import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
|||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
public interface ProjectJpaRepository extends JpaRepository<Project, Long> {
|
public interface ProjectJpaRepository extends JpaRepository<Project, Long> {
|
||||||
|
@ -10,8 +10,6 @@ import org.springframework.scheduling.annotation.Scheduled;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -33,7 +31,7 @@ public class SchedulerService {
|
|||||||
discussionParser.scanOldDiscussions();
|
discussionParser.scanOldDiscussions();
|
||||||
discussionParser.scanNewDiscussion();
|
discussionParser.scanNewDiscussion();
|
||||||
cleanService.cleanOldPipelines();
|
cleanService.cleanOldPipelines();
|
||||||
cleanService.cleanMergedPullRequests();
|
cleanService.cleanOldMergedRequests();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,6 @@ import lombok.Data;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 19.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 19.01.2021
|
* @author upagge 19.01.2021
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -6,8 +6,6 @@ import lombok.Setter;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 11.02.2021
|
* @author upagge 11.02.2021
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -11,8 +11,6 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
* @author upagge [30.01.2020]
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -3,8 +3,6 @@ package dev.struchkov.bot.gitlab.sdk.domain;
|
|||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить комментарий енума.
|
|
||||||
*
|
|
||||||
* @author upagge [01.02.2020]
|
* @author upagge [01.02.2020]
|
||||||
*/
|
*/
|
||||||
public enum MergeRequestStateJson {
|
public enum MergeRequestStateJson {
|
||||||
|
@ -4,8 +4,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [31.01.2020]
|
* @author upagge [31.01.2020]
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -10,8 +10,6 @@ import lombok.Data;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -3,8 +3,6 @@ package dev.struchkov.bot.gitlab.sdk.domain;
|
|||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.01.2021
|
* @author upagge 17.01.2021
|
||||||
*/
|
*/
|
||||||
public enum PipelineStatusJson {
|
public enum PipelineStatusJson {
|
||||||
|
@ -10,8 +10,6 @@ import lombok.Data;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 14.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 14.01.2021
|
* @author upagge 14.01.2021
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
package dev.struchkov.bot.gitlab.sdk.domain;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public abstract class Sheet<T> {
|
|
||||||
|
|
||||||
private Integer size;
|
|
||||||
private Integer limit;
|
|
||||||
private Boolean isLastPage;
|
|
||||||
private List<T> values;
|
|
||||||
private Integer nextPageStart;
|
|
||||||
|
|
||||||
public boolean hasContent() {
|
|
||||||
return values != null && !values.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -3,8 +3,6 @@ package dev.struchkov.bot.gitlab.sdk.domain;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [31.01.2020]
|
* @author upagge [31.01.2020]
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package dev.struchkov.bot.gitlab.sdk.utils;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParser;
|
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
|
||||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
|
|
||||||
public class LocalDateTimeFromEpochDeserializer extends JsonDeserializer<LocalDateTime> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt) {
|
|
||||||
try {
|
|
||||||
Long time = jp.readValueAs(Long.class);
|
|
||||||
Instant instant = Instant.ofEpochMilli(time);
|
|
||||||
return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
||||||
} catch (IOException e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -24,8 +24,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
* @author upagge [30.01.2020]
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@ -11,7 +11,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.09.2020 Добавить описание.
|
* Отправляет сообщение в телеграмм.
|
||||||
*
|
*
|
||||||
* @author upagge 17.09.2020
|
* @author upagge 17.09.2020
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 18.09.2020 Добавить описание.
|
* Заменяет урл, который назначает гитлаб на любой другой перед отправкой сообщения. Потому что иногда у self-host гитлабов урлы, которые не преобразуются телеграммом в ссылки. В этом случае имеет смысл менять их на ip.
|
||||||
*
|
*
|
||||||
* @author upagge 18.09.2020
|
* @author upagge 18.09.2020
|
||||||
*/
|
*/
|
||||||
|
@ -10,8 +10,6 @@ import org.springframework.stereotype.Component;
|
|||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 19.01.2021 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 19.01.2021
|
* @author upagge 19.01.2021
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package dev.struchkov.bot.gitlab.telegram.service.unit;
|
//package dev.struchkov.bot.gitlab.telegram.service.unit;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* // TODO: 17.09.2020 Добавить описание.
|
// * // TODO: 17.09.2020 Добавить описание.
|
||||||
*
|
// *
|
||||||
* @author upagge 17.09.2020
|
// * @author upagge 17.09.2020
|
||||||
*/
|
// */
|
||||||
//@Component
|
//@Component
|
||||||
//@RequiredArgsConstructor
|
//@RequiredArgsConstructor
|
||||||
//public class TaskProcessing implements ProcessingData<Message> {
|
//public class TaskProcessing implements ProcessingData<Message> {
|
||||||
|
@ -7,8 +7,6 @@ import dev.struchkov.godfather.context.service.usercode.ProcessingData;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.09.2020
|
* @author upagge 17.09.2020
|
||||||
*/
|
*/
|
||||||
//@Component
|
//@Component
|
||||||
|
@ -7,8 +7,6 @@ import dev.struchkov.godfather.context.service.usercode.ProcessingData;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 17.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 17.09.2020
|
* @author upagge 17.09.2020
|
||||||
*/
|
*/
|
||||||
//@Component
|
//@Component
|
||||||
|
@ -10,6 +10,7 @@ import dev.struchkov.bot.gitlab.context.service.NoteService;
|
|||||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
||||||
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Message;
|
||||||
import dev.struchkov.godfather.context.domain.keyboard.KeyBoard;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoard;
|
||||||
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
|
import dev.struchkov.godfather.context.domain.keyboard.KeyBoardLine;
|
||||||
import dev.struchkov.godfather.context.domain.keyboard.button.KeyBoardButtonText;
|
import dev.struchkov.godfather.context.domain.keyboard.button.KeyBoardButtonText;
|
||||||
@ -35,12 +36,12 @@ import java.util.stream.Collectors;
|
|||||||
public class MenuConfig {
|
public class MenuConfig {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText menu(
|
public AnswerText<Message> menu(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText settings,
|
AnswerText<Message> settings,
|
||||||
AnswerText textAddNewProject,
|
AnswerText<Message> textAddNewProject,
|
||||||
AnswerText getTasks,
|
AnswerText<Message> getTasks,
|
||||||
AnswerText getAssigneeMergeRequest
|
AnswerText<Message> getAssigneeMergeRequest
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
.boxAnswer(message ->
|
.boxAnswer(message ->
|
||||||
@ -83,9 +84,9 @@ public class MenuConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText textAddNewProject(
|
public AnswerText<Message> textAddNewProject(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText addNewProject
|
AnswerText<Message> addNewProject
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
.boxAnswer(BoxAnswer.processing(settingService.getMessage("ui.menu.add_mr.text")))
|
.boxAnswer(BoxAnswer.processing(settingService.getMessage("ui.menu.add_mr.text")))
|
||||||
@ -95,7 +96,7 @@ public class MenuConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText addNewProject(
|
public AnswerText<Message> addNewProject(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
ProjectParser projectParser,
|
ProjectParser projectParser,
|
||||||
GitlabProperty gitlabProperty
|
GitlabProperty gitlabProperty
|
||||||
@ -112,9 +113,9 @@ public class MenuConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText settings(
|
public AnswerText<Message> settings(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText settingsLanguage
|
AnswerText<Message> settingsLanguage
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
.boxAnswer(message ->
|
.boxAnswer(message ->
|
||||||
@ -128,7 +129,7 @@ public class MenuConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText getTasks(
|
public AnswerText<Message> getTasks(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
PersonInformation personInformation,
|
PersonInformation personInformation,
|
||||||
NoteService noteService
|
NoteService noteService
|
||||||
@ -151,7 +152,7 @@ public class MenuConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText getAssigneeMergeRequest(
|
public AnswerText<Message> getAssigneeMergeRequest(
|
||||||
MergeRequestsService mergeRequestsService,
|
MergeRequestsService mergeRequestsService,
|
||||||
PersonInformation personInformation,
|
PersonInformation personInformation,
|
||||||
AppSettingService settingService
|
AppSettingService settingService
|
||||||
|
@ -8,6 +8,7 @@ import dev.struchkov.bot.gitlab.context.service.NoteService;
|
|||||||
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
||||||
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
||||||
import dev.struchkov.godfather.context.domain.content.Mail;
|
import dev.struchkov.godfather.context.domain.content.Mail;
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Message;
|
||||||
import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
|
import dev.struchkov.godfather.context.domain.content.attachment.Attachment;
|
||||||
import dev.struchkov.godfather.context.domain.content.attachment.AttachmentType;
|
import dev.struchkov.godfather.context.domain.content.attachment.AttachmentType;
|
||||||
import dev.struchkov.godfather.context.domain.content.attachment.Link;
|
import dev.struchkov.godfather.context.domain.content.attachment.Link;
|
||||||
@ -40,7 +41,7 @@ public class UnitConfig {
|
|||||||
@Bean
|
@Bean
|
||||||
public AnswerCheck checkFirstStart(
|
public AnswerCheck checkFirstStart(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText textCheckLanguage,
|
AnswerText<Message> textCheckLanguage,
|
||||||
AnswerCheck checkMenuOrAnswer
|
AnswerCheck checkMenuOrAnswer
|
||||||
) {
|
) {
|
||||||
return AnswerCheck.builder()
|
return AnswerCheck.builder()
|
||||||
@ -54,8 +55,8 @@ public class UnitConfig {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerCheck checkMenuOrAnswer(
|
public AnswerCheck checkMenuOrAnswer(
|
||||||
AnswerText menu,
|
AnswerText<Message> menu,
|
||||||
AnswerText answerNote
|
AnswerText<Message> answerNote
|
||||||
) {
|
) {
|
||||||
return AnswerCheck.builder()
|
return AnswerCheck.builder()
|
||||||
.check(
|
.check(
|
||||||
@ -76,7 +77,7 @@ public class UnitConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText answerNote(
|
public AnswerText<Message> answerNote(
|
||||||
NoteService noteService,
|
NoteService noteService,
|
||||||
DiscussionService discussionService
|
DiscussionService discussionService
|
||||||
) {
|
) {
|
||||||
@ -105,7 +106,7 @@ public class UnitConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText textCheckLanguage(
|
public AnswerText<Message> textCheckLanguage(
|
||||||
AnswerProcessing checkLanguage
|
AnswerProcessing checkLanguage
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
@ -122,7 +123,7 @@ public class UnitConfig {
|
|||||||
@Bean
|
@Bean
|
||||||
public AnswerProcessing checkLanguage(
|
public AnswerProcessing checkLanguage(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText textParserPrivateProject
|
AnswerText<Message> textParserPrivateProject
|
||||||
) {
|
) {
|
||||||
return AnswerProcessing
|
return AnswerProcessing
|
||||||
.builder()
|
.builder()
|
||||||
@ -140,7 +141,7 @@ public class UnitConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText textParserPrivateProject(
|
public AnswerText<Message> textParserPrivateProject(
|
||||||
AnswerCheck checkParserPrivateProject,
|
AnswerCheck checkParserPrivateProject,
|
||||||
AppSettingService settingService
|
AppSettingService settingService
|
||||||
) {
|
) {
|
||||||
@ -162,7 +163,7 @@ public class UnitConfig {
|
|||||||
public AnswerCheck checkParserPrivateProject(
|
public AnswerCheck checkParserPrivateProject(
|
||||||
AppSettingService appSettingService,
|
AppSettingService appSettingService,
|
||||||
AnswerProcessing parserPrivateProject,
|
AnswerProcessing parserPrivateProject,
|
||||||
AnswerText textParseOwnerProject
|
AnswerText<Message> textParseOwnerProject
|
||||||
) {
|
) {
|
||||||
return AnswerCheck.builder()
|
return AnswerCheck.builder()
|
||||||
.check(
|
.check(
|
||||||
@ -177,7 +178,7 @@ public class UnitConfig {
|
|||||||
public AnswerProcessing parserPrivateProject(
|
public AnswerProcessing parserPrivateProject(
|
||||||
ProjectParser projectParser,
|
ProjectParser projectParser,
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText textParseOwnerProject
|
AnswerText<Message> textParseOwnerProject
|
||||||
) {
|
) {
|
||||||
return AnswerProcessing.builder()
|
return AnswerProcessing.builder()
|
||||||
.processingData(message -> {
|
.processingData(message -> {
|
||||||
@ -189,7 +190,7 @@ public class UnitConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText textParseOwnerProject(
|
public AnswerText<Message> textParseOwnerProject(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerCheck checkParseOwnerProject
|
AnswerCheck checkParseOwnerProject
|
||||||
) {
|
) {
|
||||||
|
@ -3,6 +3,7 @@ package dev.struchkov.bot.gitlab.telegram.unit.menu;
|
|||||||
import dev.struchkov.bot.gitlab.context.domain.AppLocale;
|
import dev.struchkov.bot.gitlab.context.domain.AppLocale;
|
||||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||||
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
import dev.struchkov.godfather.context.domain.BoxAnswer;
|
||||||
|
import dev.struchkov.godfather.context.domain.content.Message;
|
||||||
import dev.struchkov.godfather.context.utils.KeyBoards;
|
import dev.struchkov.godfather.context.utils.KeyBoards;
|
||||||
import dev.struchkov.godfather.core.domain.unit.AnswerText;
|
import dev.struchkov.godfather.core.domain.unit.AnswerText;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@ -17,9 +18,9 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
public class MenuSettingsConfig {
|
public class MenuSettingsConfig {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText settingsLanguage(
|
public AnswerText<Message> settingsLanguage(
|
||||||
AppSettingService settingService,
|
AppSettingService settingService,
|
||||||
AnswerText setLanguage
|
AnswerText<Message> setLanguage
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
.boxAnswer(
|
.boxAnswer(
|
||||||
@ -34,7 +35,7 @@ public class MenuSettingsConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public AnswerText setLanguage(
|
public AnswerText<Message> setLanguage(
|
||||||
AppSettingService settingService
|
AppSettingService settingService
|
||||||
) {
|
) {
|
||||||
return AnswerText.builder()
|
return AnswerText.builder()
|
||||||
|
Loading…
Reference in New Issue
Block a user