Продолжаем переработку
This commit is contained in:
parent
9c97344bf5
commit
418b7c9f80
@ -1,123 +0,0 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.core;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.IdAndStatusPr;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.filter.PullRequestFilter;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
|
||||||
import org.sadtech.bot.gitlab.core.utils.Pair;
|
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.PullRequestJson;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.sheet.PullRequestSheetJson;
|
|
||||||
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
|
||||||
import org.sadtech.bot.vsc.context.service.PullRequestParser;
|
|
||||||
import org.springframework.core.convert.ConversionService;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Абстрактный парсер ПРов, для использования в мульти и локал версиях приложения.
|
|
||||||
*
|
|
||||||
* @author upagge 25.10.2020
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
public abstract class AbstractPullRequestBitbucketParser implements PullRequestParser {
|
|
||||||
|
|
||||||
private static final Set<PullRequestStatus> OLD_STATUSES = Stream.of(PullRequestStatus.MERGED, PullRequestStatus.OPEN, PullRequestStatus.DECLINED).collect(Collectors.toSet());
|
|
||||||
|
|
||||||
protected final PullRequestsService pullRequestsService;
|
|
||||||
protected final ConversionService conversionService;
|
|
||||||
|
|
||||||
protected AbstractPullRequestBitbucketParser(
|
|
||||||
PullRequestsService pullRequestsService,
|
|
||||||
ConversionService conversionService
|
|
||||||
) {
|
|
||||||
this.pullRequestsService = pullRequestsService;
|
|
||||||
this.conversionService = conversionService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void processingOldPullRequests(@NonNull String urlPullRequestOpen, @NonNull String urlPullRequestClose) {
|
|
||||||
final Set<Long> existsId = pullRequestsService.getAllId(OLD_STATUSES).stream()
|
|
||||||
.map(IdAndStatusPr::getId)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
final Set<Long> openId = getExistsPullRequestIds(urlPullRequestOpen);
|
|
||||||
final Set<Long> closeId = getExistsPullRequestIds(urlPullRequestClose);
|
|
||||||
final Set<Long> newNotExistsId = existsId.stream()
|
|
||||||
.filter(id -> !openId.contains(id) && !closeId.contains(id))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
log.info("Открыты: " + Arrays.toString(openId.toArray()));
|
|
||||||
log.info("Закрыты: " + Arrays.toString(closeId.toArray()));
|
|
||||||
log.info("Не найдены: " + Arrays.toString(newNotExistsId.toArray()));
|
|
||||||
if (!newNotExistsId.isEmpty() && !openId.isEmpty()) {
|
|
||||||
pullRequestsService.deleteAllById(newNotExistsId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract Set<Long> getExistsPullRequestIds(@NonNull String bitbucketUrl);
|
|
||||||
|
|
||||||
protected void createNewPullRequest(@NonNull String urlPullRequestOpen, @NonNull String bitbucketToken) {
|
|
||||||
Optional<PullRequestSheetJson> sheetJson = Utils.urlToJson(urlPullRequestOpen, bitbucketToken, PullRequestSheetJson.class);
|
|
||||||
while (sheetJson.isPresent() && sheetJson.get().hasContent()) {
|
|
||||||
final PullRequestSheetJson pullRequestBitbucketSheet = sheetJson.get();
|
|
||||||
final List<PullRequest> newPullRequest = pullRequestBitbucketSheet.getValues().stream()
|
|
||||||
.collect(Collectors.toMap(pullRequestJson -> new Pair<>(pullRequestJson.getId(), pullRequestJson.getFromRef().getRepository().getId()), pullRequestJson -> pullRequestJson))
|
|
||||||
.values()
|
|
||||||
.stream()
|
|
||||||
.filter(pullRequestJson -> !pullRequestsService.exists(bitbucketIdAndPullRequestId(pullRequestJson)))
|
|
||||||
.map(pullRequestJson -> conversionService.convert(pullRequestJson, PullRequest.class))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
pullRequestsService.createAll(newPullRequest);
|
|
||||||
|
|
||||||
if (pullRequestBitbucketSheet.getNextPageStart() != null) {
|
|
||||||
sheetJson = Utils.urlToJson(urlPullRequestOpen + pullRequestBitbucketSheet.getNextPageStart(), bitbucketToken, PullRequestSheetJson.class);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Set<Long> updateOldPullRequests(@NonNull String url, @NonNull String token) {
|
|
||||||
Optional<PullRequestSheetJson> sheetJson = Utils.urlToJson(url, token, PullRequestSheetJson.class);
|
|
||||||
Set<Long> ids = new HashSet<>();
|
|
||||||
while (sheetJson.isPresent() && sheetJson.get().hasContent()) {
|
|
||||||
final PullRequestSheetJson jsonSheet = sheetJson.get();
|
|
||||||
final List<PullRequest> existsPr = getExistsPr(jsonSheet.getValues());
|
|
||||||
|
|
||||||
ids.addAll(
|
|
||||||
pullRequestsService.updateAll(existsPr).stream()
|
|
||||||
.map(PullRequest::getId)
|
|
||||||
.collect(Collectors.toSet())
|
|
||||||
);
|
|
||||||
|
|
||||||
if (jsonSheet.getNextPageStart() != null) {
|
|
||||||
sheetJson = Utils.urlToJson(url + jsonSheet.getNextPageStart(), token, PullRequestSheetJson.class);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<PullRequest> getExistsPr(@NonNull List<PullRequestJson> pullRequestJsons) {
|
|
||||||
return pullRequestJsons.stream()
|
|
||||||
.filter(json -> pullRequestsService.exists(bitbucketIdAndPullRequestId(json)))
|
|
||||||
.map(json -> conversionService.convert(json, PullRequest.class))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
private PullRequestFilter bitbucketIdAndPullRequestId(PullRequestJson json) {
|
|
||||||
return PullRequestFilter.builder()
|
|
||||||
.bitbucketId(json.getId())
|
|
||||||
.bitbucketRepositoryId(json.getFromRef().getRepository().getId())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -75,6 +75,11 @@
|
|||||||
<artifactId>gitlab-sdk</artifactId>
|
<artifactId>gitlab-sdk</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.sadtech.haiti</groupId>
|
||||||
|
<artifactId>haiti-utils</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.liquibase</groupId>
|
<groupId>org.liquibase</groupId>
|
||||||
<artifactId>liquibase-core</artifactId>
|
<artifactId>liquibase-core</artifactId>
|
||||||
@ -98,7 +103,7 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<finalName>bitbucketbot</finalName>
|
<finalName>gitlab-notification</finalName>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app;
|
package org.sadtech.bot.gitlab.app;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
||||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||||
|
|
||||||
@EnableJpaRepositories(basePackages = {"org.sadtech.bot.vcs.bitbucketbot.data.jpa", "org.sadtech.bot.vcs.teamcity.core.repository.jpa"})
|
@EnableJpaRepositories(basePackages = {"org.sadtech.bot.gitlab.data.jpa", "org.sadtech.bot.gitlab.teamcity.core.repository.jpa"})
|
||||||
@SpringBootApplication(scanBasePackages = "org.sadtech.bot.vcs")
|
@SpringBootApplication(scanBasePackages = "org.sadtech.bot.gitlab")
|
||||||
@EntityScan(basePackages = {"org.sadtech.bot.vsc.bitbucketbot.context.domain.entity", "org.sadtech.bot.vcs.teamcity.core.domain.entity"})
|
@EntityScan(basePackages = {"org.sadtech.bot.gitlab.context.domain.entity", "org.sadtech.bot.gitlab.teamcity.core.domain.entity"})
|
||||||
public class BitbucketbotApplication {
|
public class BitbucketbotApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.config;
|
package org.sadtech.bot.gitlab.app.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.config.property;
|
package org.sadtech.bot.gitlab.app.config.property;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
@ -1,7 +1,7 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.scheduler;
|
package org.sadtech.bot.gitlab.app.scheduler;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.CommentAndTaskParser;
|
import org.sadtech.bot.gitlab.app.service.CommentAndTaskParser;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.scheduler;
|
package org.sadtech.bot.gitlab.app.scheduler;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
@ -1,6 +1,8 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service;
|
package org.sadtech.bot.gitlab.app.service;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import org.sadtech.bot.gitlab.app.config.property.CommentSchedulerProperty;
|
||||||
|
import org.sadtech.bot.gitlab.app.service.executor.DataScan;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Comment;
|
import org.sadtech.bot.gitlab.context.domain.entity.Comment;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequestMini;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequestMini;
|
||||||
@ -9,13 +11,10 @@ import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
|||||||
import org.sadtech.bot.gitlab.context.service.CommentService;
|
import org.sadtech.bot.gitlab.context.service.CommentService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.service.TaskService;
|
import org.sadtech.bot.gitlab.context.service.TaskService;
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.BitbucketProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.InitProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.InitProperty;
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.Severity;
|
import org.sadtech.bot.gitlab.sdk.domain.Severity;
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.config.property.CommentSchedulerProperty;
|
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.executor.DataScan;
|
|
||||||
import org.sadtech.haiti.context.page.Sheet;
|
import org.sadtech.haiti.context.page.Sheet;
|
||||||
import org.sadtech.haiti.core.page.PaginationImpl;
|
import org.sadtech.haiti.core.page.PaginationImpl;
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
@ -41,7 +40,7 @@ public class CommentAndTaskParser {
|
|||||||
private final TaskService taskService;
|
private final TaskService taskService;
|
||||||
private final ConversionService conversionService;
|
private final ConversionService conversionService;
|
||||||
|
|
||||||
private final BitbucketProperty bitbucketProperty;
|
private final GitlabProperty gitlabProperty;
|
||||||
private final CommentSchedulerProperty commentSchedulerProperty;
|
private final CommentSchedulerProperty commentSchedulerProperty;
|
||||||
private final InitProperty initProperty;
|
private final InitProperty initProperty;
|
||||||
|
|
||||||
@ -53,7 +52,7 @@ public class CommentAndTaskParser {
|
|||||||
ExecutorScanner executorScanner,
|
ExecutorScanner executorScanner,
|
||||||
TaskService taskService,
|
TaskService taskService,
|
||||||
ConversionService conversionService,
|
ConversionService conversionService,
|
||||||
BitbucketProperty bitbucketProperty,
|
GitlabProperty gitlabProperty,
|
||||||
CommentSchedulerProperty commentSchedulerProperty,
|
CommentSchedulerProperty commentSchedulerProperty,
|
||||||
InitProperty initProperty
|
InitProperty initProperty
|
||||||
) {
|
) {
|
||||||
@ -62,7 +61,7 @@ public class CommentAndTaskParser {
|
|||||||
this.executorScanner = executorScanner;
|
this.executorScanner = executorScanner;
|
||||||
this.taskService = taskService;
|
this.taskService = taskService;
|
||||||
this.conversionService = conversionService;
|
this.conversionService = conversionService;
|
||||||
this.bitbucketProperty = bitbucketProperty;
|
this.gitlabProperty = gitlabProperty;
|
||||||
this.commentSchedulerProperty = commentSchedulerProperty;
|
this.commentSchedulerProperty = commentSchedulerProperty;
|
||||||
this.initProperty = initProperty;
|
this.initProperty = initProperty;
|
||||||
}
|
}
|
||||||
@ -157,7 +156,7 @@ public class CommentAndTaskParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getCommentUrl(long commentId, PullRequest pullRequest) {
|
private String getCommentUrl(long commentId, PullRequest pullRequest) {
|
||||||
return bitbucketProperty.getUrlPullRequestComment()
|
return gitlabProperty.getUrlPullRequestComment()
|
||||||
.replace("{projectKey}", pullRequest.getProjectKey())
|
.replace("{projectKey}", pullRequest.getProjectKey())
|
||||||
.replace("{repositorySlug}", pullRequest.getRepositorySlug())
|
.replace("{repositorySlug}", pullRequest.getRepositorySlug())
|
||||||
.replace("{pullRequestId}", pullRequest.getBitbucketId().toString())
|
.replace("{pullRequestId}", pullRequest.getBitbucketId().toString())
|
||||||
@ -171,7 +170,7 @@ public class CommentAndTaskParser {
|
|||||||
for (Comment oldComment : comments) {
|
for (Comment oldComment : comments) {
|
||||||
final Optional<CommentJson> optCommentJson = Utils.urlToJson(
|
final Optional<CommentJson> optCommentJson = Utils.urlToJson(
|
||||||
oldComment.getUrlApi(),
|
oldComment.getUrlApi(),
|
||||||
bitbucketProperty.getToken(),
|
gitlabProperty.getToken(),
|
||||||
CommentJson.class
|
CommentJson.class
|
||||||
);
|
);
|
||||||
if (optCommentJson.isPresent()) {
|
if (optCommentJson.isPresent()) {
|
||||||
@ -195,7 +194,7 @@ public class CommentAndTaskParser {
|
|||||||
for (Task oldTask : tasks) {
|
for (Task oldTask : tasks) {
|
||||||
final Optional<CommentJson> optCommentJson = Utils.urlToJson(
|
final Optional<CommentJson> optCommentJson = Utils.urlToJson(
|
||||||
oldTask.getUrlApi(),
|
oldTask.getUrlApi(),
|
||||||
bitbucketProperty.getToken(),
|
gitlabProperty.getToken(),
|
||||||
CommentJson.class
|
CommentJson.class
|
||||||
);
|
);
|
||||||
if (optCommentJson.isPresent()) {
|
if (optCommentJson.isPresent()) {
|
@ -1,13 +1,13 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service;
|
package org.sadtech.bot.gitlab.app.service;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.BitbucketProperty;
|
import org.sadtech.bot.gitlab.app.service.executor.DataScan;
|
||||||
|
import org.sadtech.bot.gitlab.app.service.executor.Executor;
|
||||||
|
import org.sadtech.bot.gitlab.app.service.executor.Seeker;
|
||||||
|
import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.executor.DataScan;
|
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.executor.Executor;
|
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.executor.Seeker;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -25,13 +25,13 @@ public class ExecutorScanner implements Executor<DataScan, CommentJson> {
|
|||||||
|
|
||||||
private final ExecutorService executorService;
|
private final ExecutorService executorService;
|
||||||
private List<Future<Optional<CommentJson>>> resultList = new ArrayList<>();
|
private List<Future<Optional<CommentJson>>> resultList = new ArrayList<>();
|
||||||
private final BitbucketProperty bitbucketProperty;
|
private final GitlabProperty gitlabProperty;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean registration(@NonNull List<DataScan> dataScans) {
|
public boolean registration(@NonNull List<DataScan> dataScans) {
|
||||||
resultList.addAll(
|
resultList.addAll(
|
||||||
dataScans.stream()
|
dataScans.stream()
|
||||||
.map(dataScan -> new Seeker(dataScan, bitbucketProperty.getToken()))
|
.map(dataScan -> new Seeker(dataScan, gitlabProperty.getToken()))
|
||||||
.map(executorService::submit)
|
.map(executorService::submit)
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList())
|
||||||
);
|
);
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.executor;
|
package org.sadtech.bot.gitlab.app.service.executor;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.executor;
|
package org.sadtech.bot.gitlab.app.service.executor;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.executor;
|
package org.sadtech.bot.gitlab.app.service.executor;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
@ -1,7 +1,6 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.executor;
|
package org.sadtech.bot.gitlab.app.service.executor;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
import org.sadtech.bot.gitlab.sdk.domain.CommentJson;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
@ -0,0 +1,116 @@
|
|||||||
|
package org.sadtech.bot.gitlab.app.service.parser;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
|
import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
|
import org.sadtech.bot.gitlab.core.utils.Pair;
|
||||||
|
import org.sadtech.bot.gitlab.sdk.domain.PullRequestJson;
|
||||||
|
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
||||||
|
import org.sadtech.bot.vsc.context.service.PullRequestParser;
|
||||||
|
import org.sadtech.haiti.utils.network.HttpHeader;
|
||||||
|
import org.sadtech.haiti.utils.network.HttpParse;
|
||||||
|
import org.springframework.core.convert.ConversionService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static org.sadtech.haiti.utils.network.HttpParse.ACCEPT;
|
||||||
|
import static org.sadtech.haiti.utils.network.HttpParse.AUTHORIZATION;
|
||||||
|
import static org.sadtech.haiti.utils.network.HttpParse.BEARER;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class PullRequestBitbucketParser implements PullRequestParser {
|
||||||
|
|
||||||
|
private static final Set<PullRequestStatus> OLD_STATUSES = Stream.of(PullRequestStatus.MERGED, PullRequestStatus.OPEN, PullRequestStatus.DECLINED).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
private final GitlabProperty gitlabProperty;
|
||||||
|
private final PullRequestsService pullRequestsService;
|
||||||
|
private final ConversionService conversionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parsingOldPullRequest() {
|
||||||
|
// processingOldPullRequests(gitlabProperty.getUrlPullRequestOpen(), gitlabProperty.getUrlPullRequestClose());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parsingNewPullRequest() {
|
||||||
|
|
||||||
|
final List<PullRequestJson> pullRequestJsons = HttpParse.request(gitlabProperty.getUrlPullRequestOpen())
|
||||||
|
.header(HttpHeader.of(AUTHORIZATION, BEARER + gitlabProperty.getToken()))
|
||||||
|
.header(ACCEPT)
|
||||||
|
.executeList(PullRequestJson.class);
|
||||||
|
|
||||||
|
while (pullRequestJsons != null && !pullRequestJsons.isEmpty()) {
|
||||||
|
final List<PullRequest> newPullRequest = pullRequestJsons.stream()
|
||||||
|
.collect(Collectors.toMap(pullRequestJson -> new Pair<>(pullRequestJson.getId(), pullRequestJson.getFromRef().getRepository().getId()), pullRequestJson -> pullRequestJson))
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
|
// .filter(pullRequestJson -> !pullRequestsService.exists(bitbucketIdAndPullRequestId(pullRequestJson)))
|
||||||
|
.map(pullRequestJson -> conversionService.convert(pullRequestJson, PullRequest.class))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
pullRequestsService.createAll(newPullRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// private Set<Long> getExistsPullRequestIds(String bitbucketUrl) {
|
||||||
|
// Optional<PullRequestSheetJson> sheetJson = Utils.urlToJson(url, token, PullRequestSheetJson.class);
|
||||||
|
// Set<Long> ids = new HashSet<>();
|
||||||
|
// while (sheetJson.isPresent() && sheetJson.get().hasContent()) {
|
||||||
|
// final PullRequestSheetJson jsonSheet = sheetJson.get();
|
||||||
|
// final List<PullRequest> existsPr = getExistsPr(jsonSheet.getValues());
|
||||||
|
//
|
||||||
|
// ids.addAll(
|
||||||
|
// pullRequestsService.updateAll(existsPr).stream()
|
||||||
|
// .map(PullRequest::getId)
|
||||||
|
// .collect(Collectors.toSet())
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// if (jsonSheet.getNextPageStart() != null) {
|
||||||
|
// sheetJson = Utils.urlToJson(url + jsonSheet.getNextPageStart(), token, PullRequestSheetJson.class);
|
||||||
|
// } else {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return ids;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public void processingOldPullRequests(@NonNull String urlPullRequestOpen, @NonNull String urlPullRequestClose) {
|
||||||
|
// final Set<Long> existsId = pullRequestsService.getAllId(OLD_STATUSES).stream()
|
||||||
|
// .map(IdAndStatusPr::getId)
|
||||||
|
// .collect(Collectors.toSet());
|
||||||
|
// final Set<Long> openId = getExistsPullRequestIds(urlPullRequestOpen);
|
||||||
|
// final Set<Long> closeId = getExistsPullRequestIds(urlPullRequestClose);
|
||||||
|
// final Set<Long> newNotExistsId = existsId.stream()
|
||||||
|
// .filter(id -> !openId.contains(id) && !closeId.contains(id))
|
||||||
|
// .collect(Collectors.toSet());
|
||||||
|
// log.info("Открыты: " + Arrays.toString(openId.toArray()));
|
||||||
|
// log.info("Закрыты: " + Arrays.toString(closeId.toArray()));
|
||||||
|
// log.info("Не найдены: " + Arrays.toString(newNotExistsId.toArray()));
|
||||||
|
// if (!newNotExistsId.isEmpty() && !openId.isEmpty()) {
|
||||||
|
// pullRequestsService.deleteAllById(newNotExistsId);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private List<PullRequest> getExistsPr(@NonNull List<PullRequestJson> pullRequestJsons) {
|
||||||
|
// return pullRequestJsons.stream()
|
||||||
|
// .filter(json -> pullRequestsService.exists(bitbucketIdAndPullRequestId(json)))
|
||||||
|
// .map(json -> conversionService.convert(json, PullRequest.class))
|
||||||
|
// .collect(Collectors.toList());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private PullRequestFilter bitbucketIdAndPullRequestId(PullRequestJson json) {
|
||||||
|
// return PullRequestFilter.builder()
|
||||||
|
// .bitbucketId(json.getId())
|
||||||
|
// .bitbucketRepositoryId(json.getFromRef().getRepository().getId())
|
||||||
|
// .build();
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
@ -1,19 +0,0 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.scheduler;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.sadtech.bot.vcs.bitbucket.app.service.parser.PersonBitbucketParser;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class PersonScheduler {
|
|
||||||
|
|
||||||
private final PersonBitbucketParser personParser;
|
|
||||||
|
|
||||||
@Scheduled(cron = "${bitbucketbot.scheduler.person:0 0 0 */1 * *}")
|
|
||||||
public void scanPersons() {
|
|
||||||
personParser.scanNewPerson();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.scheduler;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.EntityType;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.SimpleTextNotify;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class RatingScheduler {
|
|
||||||
|
|
||||||
private final RatingService ratingService;
|
|
||||||
private final PersonService personService;
|
|
||||||
private final NotifyService notifyService;
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 */50 * * * *")
|
|
||||||
private void ratingRecalculation() {
|
|
||||||
ratingService.ratingRecalculation();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 20 8 * * MON-FRI")
|
|
||||||
private void goodMorningRating() {
|
|
||||||
List<Person> allRegister = personService.getAllRegister();
|
|
||||||
for (Person person : allRegister) {
|
|
||||||
final String message = ratingService.getRatingTop(person.getLogin());
|
|
||||||
notifyService.send(
|
|
||||||
SimpleTextNotify.builder()
|
|
||||||
.entityType(EntityType.PERSON)
|
|
||||||
.message(message)
|
|
||||||
.recipients(Collections.singleton(person.getLogin()))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.parser;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.parser.PersonParser;
|
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.BitbucketProperty;
|
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.UserJson;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.sheet.UserSheetJson;
|
|
||||||
import org.springframework.core.convert.ConversionService;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class PersonBitbucketParser implements PersonParser {
|
|
||||||
|
|
||||||
private final PersonService personService;
|
|
||||||
private final ConversionService conversionService;
|
|
||||||
|
|
||||||
private final BitbucketProperty bitbucketProperty;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void scanNewPerson() {
|
|
||||||
Optional<UserSheetJson> sheetJson = Utils.urlToJson(bitbucketProperty.getUrlUsers(), bitbucketProperty.getToken(), UserSheetJson.class);
|
|
||||||
while (sheetJson.isPresent() && sheetJson.get().hasContent()) {
|
|
||||||
final UserSheetJson sheetUsers = sheetJson.get();
|
|
||||||
final List<UserJson> users = sheetUsers.getValues();
|
|
||||||
final Set<String> logins = users.stream().map(UserJson::getName).collect(Collectors.toSet());
|
|
||||||
final Set<String> existsLogins = personService.existsByLogin(logins);
|
|
||||||
final Set<Person> newUsers = users.stream()
|
|
||||||
.filter(userJson -> !existsLogins.contains(userJson.getName()))
|
|
||||||
.map(userJson -> conversionService.convert(userJson, Person.class))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
if (!newUsers.isEmpty()) {
|
|
||||||
personService.createAll(newUsers);
|
|
||||||
}
|
|
||||||
if (sheetUsers.getNextPageStart() != null) {
|
|
||||||
sheetJson = Utils.urlToJson(bitbucketProperty.getUrlUsers() + sheetUsers.getNextPageStart(), bitbucketProperty.getToken(), UserSheetJson.class);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.app.service.parser;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.BitbucketProperty;
|
|
||||||
import org.sadtech.bot.vcs.bitbucket.core.AbstractPullRequestBitbucketParser;
|
|
||||||
import org.sadtech.bot.vsc.context.service.PullRequestParser;
|
|
||||||
import org.springframework.core.convert.ConversionService;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class PullRequestBitbucketParser extends AbstractPullRequestBitbucketParser implements PullRequestParser {
|
|
||||||
|
|
||||||
private final PersonService personService;
|
|
||||||
private final BitbucketProperty bitbucketProperty;
|
|
||||||
|
|
||||||
protected PullRequestBitbucketParser(
|
|
||||||
PullRequestsService pullRequestsService,
|
|
||||||
PersonService personService,
|
|
||||||
ConversionService conversionService,
|
|
||||||
BitbucketProperty bitbucketProperty
|
|
||||||
) {
|
|
||||||
super(pullRequestsService, conversionService);
|
|
||||||
this.personService = personService;
|
|
||||||
this.bitbucketProperty = bitbucketProperty;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void parsingOldPullRequest() {
|
|
||||||
processingOldPullRequests(bitbucketProperty.getUrlPullRequestOpen(), bitbucketProperty.getUrlPullRequestClose());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void parsingNewPullRequest() {
|
|
||||||
final List<Person> users = personService.getAllRegister();
|
|
||||||
for (Person user : users) {
|
|
||||||
createNewPullRequest(bitbucketProperty.getUrlPullRequestOpen(), user.getToken());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Set<Long> getExistsPullRequestIds(String bitbucketUrl) {
|
|
||||||
final List<Person> persons = personService.getAllRegister();
|
|
||||||
final Set<Long> ids = new HashSet<>();
|
|
||||||
for (Person person : persons) {
|
|
||||||
ids.addAll(updateOldPullRequests(bitbucketUrl, person.getToken()));
|
|
||||||
}
|
|
||||||
return ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
spring:
|
|
||||||
datasource:
|
|
||||||
url: ${DATASOURCE_URL}
|
|
||||||
username: ${DATASOURCE_USERNAME}
|
|
||||||
driver-class-name: org.postgresql.Driver
|
|
||||||
password: ${DATASOURCE_PASSWORD}
|
|
||||||
liquibase:
|
|
||||||
change-log: classpath:liquibase/change-log.xml
|
|
||||||
jpa:
|
|
||||||
show-sql: false
|
|
||||||
hibernate:
|
|
||||||
ddl-auto: none
|
|
||||||
database-platform: org.hibernate.dialect.PostgreSQLDialect
|
|
||||||
properties:
|
|
||||||
hibernate:
|
|
||||||
jdbc:
|
|
||||||
lob:
|
|
||||||
non_contextual_creation: true
|
|
||||||
logging:
|
|
||||||
config: classpath:logback-dev.xml
|
|
||||||
bitbucketbot:
|
|
||||||
scheduler:
|
|
||||||
person: 0 */1 * * * *
|
|
||||||
comment:
|
|
||||||
settings:
|
|
||||||
no-comment-count: 20
|
|
||||||
comment-count: 100
|
|
||||||
init:
|
|
||||||
start-comment-id: 8301
|
|
||||||
use: false
|
|
||||||
rating:
|
|
||||||
enable: true
|
|
||||||
bitbucket:
|
|
||||||
token: ${BITBUCKET_ADMIN_TOKEN}
|
|
||||||
url-pull-request-open: ${BITBUCKET_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&state=OPEN
|
|
||||||
url-pull-request-close: ${BITBUCKET_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&closedSince=86400
|
|
||||||
url-pull-request-comment: ${BITBUCKET_URL}/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
|
|
||||||
url-pull-request: ${BITBUCKET_URL}/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/overview
|
|
||||||
url-users: ${BITBUCKET_URL}/rest/api/1.0/admin/users
|
|
||||||
teamcity:
|
|
||||||
token: ${TEAMCITY_ADMIN_TOKEN}
|
|
||||||
project-url: ${TEAMCITY_URL}/app/rest/projects
|
|
||||||
build-url: ${TEAMCITY_URL}/app/rest/builds/?locator=project:(id:{0}),branch:(default:any)
|
|
@ -1,41 +0,0 @@
|
|||||||
spring:
|
|
||||||
datasource:
|
|
||||||
url: ${DATASOURCE_URL}
|
|
||||||
username: ${DATASOURCE_USERNAME}
|
|
||||||
driver-class-name: org.postgresql.Driver
|
|
||||||
password: ${DATASOURCE_PASSWORD}
|
|
||||||
liquibase:
|
|
||||||
change-log: classpath:liquibase/change-log.xml
|
|
||||||
jpa:
|
|
||||||
show-sql: false
|
|
||||||
hibernate:
|
|
||||||
ddl-auto: none
|
|
||||||
database-platform: org.hibernate.dialect.PostgreSQLDialect
|
|
||||||
properties:
|
|
||||||
hibernate:
|
|
||||||
jdbc:
|
|
||||||
lob:
|
|
||||||
non_contextual_creation: true
|
|
||||||
logging:
|
|
||||||
config: classpath:logback-prod.xml
|
|
||||||
bitbucketbot:
|
|
||||||
scheduler:
|
|
||||||
person: 0 0 0 */1 * *
|
|
||||||
comment:
|
|
||||||
settings:
|
|
||||||
no-comment-count: 20
|
|
||||||
comment-count: 100
|
|
||||||
init:
|
|
||||||
start-comment-id: 7807
|
|
||||||
use: false
|
|
||||||
bitbucket:
|
|
||||||
token: ${BITBUCKET_ADMIN_TOKEN}
|
|
||||||
url-pull-request-open: ${BITBUCKET_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&state=OPEN
|
|
||||||
url-pull-request-close: ${BITBUCKET_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&closedSince=86400
|
|
||||||
url-pull-request-comment: ${BITBUCKET_URL}/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
|
|
||||||
url-pull-request: ${BITBUCKET_URL}/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/overview
|
|
||||||
url-users: ${BITBUCKET_URL}/rest/api/1.0/admin/users
|
|
||||||
teamcity:
|
|
||||||
token: ${TEAMCITY_ADMIN_TOKEN}
|
|
||||||
project-url: ${TEAMCITY_URL}/app/rest/projects
|
|
||||||
build-url: ${TEAMCITY_URL}/app/rest/builds/?locator=project:(id:{0}),branch:(default:any)
|
|
@ -1,7 +1,43 @@
|
|||||||
server:
|
server:
|
||||||
port: 8018
|
port: 8018
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
url: ${DATASOURCE_URL}
|
||||||
|
username: ${DATASOURCE_USERNAME}
|
||||||
|
driver-class-name: org.postgresql.Driver
|
||||||
|
password: ${DATASOURCE_PASSWORD}
|
||||||
|
liquibase:
|
||||||
|
change-log: classpath:liquibase/change-log.xml
|
||||||
|
jpa:
|
||||||
|
show-sql: false
|
||||||
|
hibernate:
|
||||||
|
ddl-auto: none
|
||||||
|
database-platform: org.hibernate.dialect.PostgreSQLDialect
|
||||||
|
properties:
|
||||||
|
hibernate:
|
||||||
|
jdbc:
|
||||||
|
lob:
|
||||||
|
non_contextual_creation: true
|
||||||
telegram-config:
|
telegram-config:
|
||||||
bot-username: ${TELEGRAM_BOT_USERNAME}
|
bot-username: ${TELEGRAM_BOT_USERNAME}
|
||||||
bot-token: ${TELEGRAM_BOT_TOKEN}
|
bot-token: ${TELEGRAM_BOT_TOKEN}
|
||||||
bitbucketbot:
|
gitlab-bot:
|
||||||
version: 2.15.3
|
version: 2.15.3
|
||||||
|
scheduler:
|
||||||
|
comment:
|
||||||
|
settings:
|
||||||
|
no-comment-count: 20
|
||||||
|
comment-count: 100
|
||||||
|
gitlab:
|
||||||
|
token: ${GITLAB_PERSONAL_TOKEN}
|
||||||
|
username: ${GITLAB_USERNAME}
|
||||||
|
full-name: ${GITLAB_FULLNAME}
|
||||||
|
url-pull-request-open: ${GITLAB_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&state=OPEN
|
||||||
|
url-pull-request-close: ${GITLAB_URL}/rest/api/1.0/dashboard/pull-requests?limit=150&closedSince=86400
|
||||||
|
url-pull-request-comment: ${GITLAB_URL}/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/comments/{commentId}
|
||||||
|
url-pull-request: ${GITLAB_URL}/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/overview
|
||||||
|
url-users: ${GITLAB_URL}/rest/api/1.0/admin/users
|
||||||
|
teamcity:
|
||||||
|
token: ${TEAMCITY_ADMIN_TOKEN}
|
||||||
|
project-url: ${TEAMCITY_URL}/app/rest/projects
|
||||||
|
build-url: ${TEAMCITY_URL}/app/rest/builds/?locator=project:(id:{0}),branch:(default:any)
|
@ -1,24 +0,0 @@
|
|||||||
<configuration>
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{20} - %msg%n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
||||||
<file>bitbucketbot-logs.log</file>
|
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
||||||
<fileNamePattern>bitbucket.%d{yyyy-MM-dd}.log</fileNamePattern>
|
|
||||||
<maxHistory>10</maxHistory>
|
|
||||||
<totalSizeCap>50MB</totalSizeCap>
|
|
||||||
</rollingPolicy>
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{20} - %msg%n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<root level="info">
|
|
||||||
<appender-ref ref="STDOUT"/>
|
|
||||||
</root>
|
|
||||||
|
|
||||||
</configuration>
|
|
@ -1,24 +0,0 @@
|
|||||||
<configuration>
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{20} - %msg%n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
||||||
<file>bitbucketbot-logs.log</file>
|
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
||||||
<fileNamePattern>bitbucket.%d{yyyy-MM-dd}.log</fileNamePattern>
|
|
||||||
<maxHistory>10</maxHistory>
|
|
||||||
<totalSizeCap>50MB</totalSizeCap>
|
|
||||||
</rollingPolicy>
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{20} - %msg%n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<root level="info">
|
|
||||||
<appender-ref ref="FILE"/>
|
|
||||||
</root>
|
|
||||||
|
|
||||||
</configuration>
|
|
@ -1,50 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.domain.entity;
|
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Пользователь битбакета.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@Entity
|
|
||||||
@Table(name = "person")
|
|
||||||
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
|
||||||
public class Person {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Логин
|
|
||||||
*/
|
|
||||||
@Id
|
|
||||||
@EqualsAndHashCode.Include
|
|
||||||
@Column(name = "login")
|
|
||||||
private String login;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Персональный токен из битбакета
|
|
||||||
*/
|
|
||||||
@Column(name = "bitbucket_token")
|
|
||||||
private String token;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Идентификатор телеграма
|
|
||||||
*/
|
|
||||||
@Column(name = "telegram_id")
|
|
||||||
private Long telegramId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ФИО
|
|
||||||
*/
|
|
||||||
@Column(name = "full_name")
|
|
||||||
private String fullName;
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.domain.entity;
|
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.PointType;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.EnumType;
|
|
||||||
import javax.persistence.Enumerated;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@Entity
|
|
||||||
@Table(name = "rating_history")
|
|
||||||
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
|
||||||
public class RatingHistory {
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@Column(name = "id")
|
|
||||||
@EqualsAndHashCode.Include
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "login")
|
|
||||||
private String login;
|
|
||||||
|
|
||||||
@Column(name = "points")
|
|
||||||
private Integer points;
|
|
||||||
|
|
||||||
@Enumerated(EnumType.STRING)
|
|
||||||
@Column(name = "type")
|
|
||||||
private PointType type;
|
|
||||||
|
|
||||||
@Column(name = "date_add")
|
|
||||||
private LocalDateTime dateAdd;
|
|
||||||
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.domain.entity;
|
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@Entity
|
|
||||||
@Table(name = "rating_list")
|
|
||||||
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
|
||||||
public class RatingList implements Comparable<RatingList> {
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@Column(name = "login")
|
|
||||||
@EqualsAndHashCode.Include
|
|
||||||
private String login;
|
|
||||||
|
|
||||||
@Column(name = "points")
|
|
||||||
private Integer points;
|
|
||||||
|
|
||||||
@Column(name = "number")
|
|
||||||
private Integer number;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(@NonNull RatingList ratingList) {
|
|
||||||
return Integer.compare(ratingList.getPoints(), points);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.repository;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 06.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 06.09.2020
|
|
||||||
*/
|
|
||||||
public interface PersonRepository {
|
|
||||||
|
|
||||||
Person save(@NonNull Person person);
|
|
||||||
|
|
||||||
boolean existsByTelegramId(Long chatId);
|
|
||||||
|
|
||||||
boolean existsByLogin(String login);
|
|
||||||
|
|
||||||
List<Person> findAllByTelegramIdNotNullAndTokenNotNull();
|
|
||||||
|
|
||||||
Set<Long> findAllTelegramIdByLogin(Set<String> logins);
|
|
||||||
|
|
||||||
Optional<Person> findByLogin(@NonNull String login);
|
|
||||||
|
|
||||||
Optional<Person> findByTelegramId(@NonNull Long telegramId);
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.repository;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingHistory;
|
|
||||||
import org.sadtech.haiti.context.repository.SimpleManagerRepository;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
public interface RatingHistoryRepository extends SimpleManagerRepository<RatingHistory, Long> {
|
|
||||||
|
|
||||||
List<RatingHistory> findAllByDateAddBetween(@NonNull LocalDateTime from, @NonNull LocalDateTime to);
|
|
||||||
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.repository;
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingList;
|
|
||||||
import org.sadtech.haiti.context.repository.SimpleManagerRepository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
public interface RatingListRepository extends SimpleManagerRepository<RatingList, String> {
|
|
||||||
|
|
||||||
Optional<RatingList> getByLogin(String login);
|
|
||||||
|
|
||||||
List<RatingList> findFirstThree();
|
|
||||||
|
|
||||||
List<RatingList> findLastThree();
|
|
||||||
|
|
||||||
long count();
|
|
||||||
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.service;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public interface PersonService {
|
|
||||||
|
|
||||||
Set<String> existsByLogin(@NonNull Set<String> logins);
|
|
||||||
|
|
||||||
Person reg(@NonNull Person user);
|
|
||||||
|
|
||||||
List<Person> getAllRegister();
|
|
||||||
|
|
||||||
Set<Long> getAllTelegramIdByLogin(Set<String> logins);
|
|
||||||
|
|
||||||
Person create(@NonNull Person person);
|
|
||||||
|
|
||||||
List<Person> createAll(Collection<Person> newUsers);
|
|
||||||
|
|
||||||
boolean existsByTelegram(Long telegramId);
|
|
||||||
|
|
||||||
Optional<Person> getByTelegramId(@NonNull Long telegramId);
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.service;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.PointType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
public interface RatingService {
|
|
||||||
|
|
||||||
void addRating(@NonNull String login, @NonNull PointType type, @NonNull Integer points);
|
|
||||||
|
|
||||||
void ratingRecalculation();
|
|
||||||
|
|
||||||
String getRatingTop(@NonNull String login);
|
|
||||||
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.context.service.parser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 06.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 06.09.2020
|
|
||||||
*/
|
|
||||||
public interface PersonParser {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Извлечение новых пользователей SCV.
|
|
||||||
*/
|
|
||||||
void scanNewPerson();
|
|
||||||
|
|
||||||
}
|
|
@ -13,12 +13,13 @@ import org.springframework.stereotype.Component;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Component
|
@Component
|
||||||
@ConfigurationProperties("bitbucketbot.bitbucket")
|
@ConfigurationProperties("gitlab-bot.gitlab")
|
||||||
public class BitbucketProperty {
|
public class GitlabProperty {
|
||||||
|
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
private String fullName;
|
||||||
|
|
||||||
/**
|
|
||||||
* Токен администратора
|
|
||||||
*/
|
|
||||||
private String token;
|
private String token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,9 +42,4 @@ public class BitbucketProperty {
|
|||||||
*/
|
*/
|
||||||
private String urlPullRequest;
|
private String urlPullRequest;
|
||||||
|
|
||||||
/**
|
|
||||||
* Адрес на получение пользователей битбакет
|
|
||||||
*/
|
|
||||||
private String urlUsers;
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,21 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.core.config.properties;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 25.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 25.10.2020
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
@Component
|
|
||||||
@ConfigurationProperties(prefix = "bitbucketbot.rating")
|
|
||||||
public class RatingProperty {
|
|
||||||
|
|
||||||
boolean enabled = false;
|
|
||||||
|
|
||||||
}
|
|
@ -2,12 +2,10 @@ package org.sadtech.bot.gitlab.core.scheduler;
|
|||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.domain.EntityType;
|
import org.sadtech.bot.gitlab.context.domain.EntityType;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.GoodMorningNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.GoodMorningNotify;
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.SimpleTextNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.SimpleTextNotify;
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.utils.Smile;
|
import org.sadtech.bot.gitlab.context.utils.Smile;
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.AppProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.AppProperty;
|
||||||
@ -31,7 +29,6 @@ public class NotificationScheduler {
|
|||||||
"mstruchkov", "emukhin", "imescheryakov", "kkeglev"
|
"mstruchkov", "emukhin", "imescheryakov", "kkeglev"
|
||||||
));
|
));
|
||||||
|
|
||||||
private final PersonService personService;
|
|
||||||
private final PullRequestsService pullRequestsService;
|
private final PullRequestsService pullRequestsService;
|
||||||
|
|
||||||
private final NotifyService notifyService;
|
private final NotifyService notifyService;
|
||||||
|
@ -11,7 +11,6 @@ import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
|||||||
import org.sadtech.bot.gitlab.context.repository.CommentRepository;
|
import org.sadtech.bot.gitlab.context.repository.CommentRepository;
|
||||||
import org.sadtech.bot.gitlab.context.service.CommentService;
|
import org.sadtech.bot.gitlab.context.service.CommentService;
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.TaskService;
|
import org.sadtech.bot.gitlab.context.service.TaskService;
|
||||||
import org.sadtech.haiti.core.service.AbstractSimpleManagerService;
|
import org.sadtech.haiti.core.service.AbstractSimpleManagerService;
|
||||||
import org.sadtech.haiti.core.util.Assert;
|
import org.sadtech.haiti.core.util.Assert;
|
||||||
|
@ -1,111 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.core.service.impl;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.NotifySetting;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.exception.RegException;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.PersonRepository;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.BitbucketProperty;
|
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.haiti.core.util.Assert;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class PersonServiceImpl implements PersonService {
|
|
||||||
|
|
||||||
private final PersonRepository personRepository;
|
|
||||||
private final BitbucketProperty bitbucketProperty;
|
|
||||||
|
|
||||||
private final NotifyService notifyService;
|
|
||||||
|
|
||||||
public PersonServiceImpl(
|
|
||||||
PersonRepository personRepository,
|
|
||||||
BitbucketProperty bitbucketProperty,
|
|
||||||
@Lazy NotifyService notifyService
|
|
||||||
) {
|
|
||||||
this.personRepository = personRepository;
|
|
||||||
this.bitbucketProperty = bitbucketProperty;
|
|
||||||
this.notifyService = notifyService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> existsByLogin(@NonNull Set<String> logins) {
|
|
||||||
return logins.stream()
|
|
||||||
.filter(personRepository::existsByLogin)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Person reg(@NonNull Person user) {
|
|
||||||
final Optional<Person> optUser = personRepository.findByLogin(user.getLogin());
|
|
||||||
if (optUser.isPresent()) {
|
|
||||||
final Person oldUser = optUser.get();
|
|
||||||
if (oldUser.getTelegramId() == null) {
|
|
||||||
Optional<Object> sheetJson = Utils.urlToJson(bitbucketProperty.getUrlPullRequestClose(), user.getToken(), Object.class);
|
|
||||||
if (sheetJson.isPresent()) {
|
|
||||||
oldUser.setTelegramId(user.getTelegramId());
|
|
||||||
|
|
||||||
defaultSettings(oldUser);
|
|
||||||
|
|
||||||
return personRepository.save(oldUser);
|
|
||||||
} else {
|
|
||||||
throw new RegException("Ваш токен не валиден");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RegException("Вы уже авторизованы в системе");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new RegException("Пользователь не найден, подождите обновление базы пользователей!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void defaultSettings(Person person) {
|
|
||||||
final NotifySetting notifySetting = new NotifySetting();
|
|
||||||
notifySetting.setLogin(person.getLogin());
|
|
||||||
notifySetting.setStartReceiving(LocalDateTime.now());
|
|
||||||
notifyService.saveSettings(notifySetting);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Person> getAllRegister() {
|
|
||||||
return personRepository.findAllByTelegramIdNotNullAndTokenNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Long> getAllTelegramIdByLogin(Set<String> logins) {
|
|
||||||
return personRepository.findAllTelegramIdByLogin(logins);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Person create(@NonNull Person person) {
|
|
||||||
Assert.isNotNull(person.getLogin(), "При создании пользователя должен присутствовать логин");
|
|
||||||
return personRepository.save(person);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Person> createAll(Collection<Person> newPersons) {
|
|
||||||
return newPersons.stream().map(this::create).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean existsByTelegram(Long telegramId) {
|
|
||||||
return personRepository.existsByTelegramId(telegramId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<Person> getByTelegramId(@NonNull Long telegramId) {
|
|
||||||
return personRepository.findByTelegramId(telegramId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,8 +19,6 @@ import org.sadtech.bot.gitlab.context.exception.UpdateException;
|
|||||||
import org.sadtech.bot.gitlab.context.repository.PullRequestsRepository;
|
import org.sadtech.bot.gitlab.context.repository.PullRequestsRepository;
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.RatingProperty;
|
|
||||||
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
||||||
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
||||||
import org.sadtech.haiti.context.page.Pagination;
|
import org.sadtech.haiti.context.page.Pagination;
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.core.service.impl;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.PointType;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingHistory;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingList;
|
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.RatingHistoryRepository;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.RatingListRepository;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.sadtech.bot.gitlab.context.utils.Smile;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class RatingServiceImpl implements RatingService {
|
|
||||||
|
|
||||||
private final RatingHistoryRepository ratingHistoryRepository;
|
|
||||||
private final RatingListRepository ratingListRepository;
|
|
||||||
private final PersonService personService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addRating(@NonNull String login, @NonNull PointType type, @NonNull Integer points) {
|
|
||||||
final RatingHistory ratingHistory = new RatingHistory();
|
|
||||||
ratingHistory.setLogin(login);
|
|
||||||
ratingHistory.setPoints(points);
|
|
||||||
ratingHistory.setType(type);
|
|
||||||
ratingHistory.setDateAdd(LocalDateTime.now());
|
|
||||||
ratingHistoryRepository.save(ratingHistory);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void ratingRecalculation() {
|
|
||||||
AtomicInteger i = new AtomicInteger();
|
|
||||||
final List<RatingList> newRatingList = ratingHistoryRepository.findAllByDateAddBetween(LocalDateTime.now().minusDays(30L), LocalDateTime.now()).stream()
|
|
||||||
.collect(Collectors.groupingBy(RatingHistory::getLogin, Collectors.summingInt(RatingHistory::getPoints)))
|
|
||||||
.entrySet().stream()
|
|
||||||
.map(this::createRatingList)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
final Set<String> ratingListLogins = newRatingList.stream()
|
|
||||||
.map(RatingList::getLogin)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
final Set<String> regLogins = personService.getAllRegister().stream()
|
|
||||||
.map(Person::getLogin)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
newRatingList.addAll(
|
|
||||||
regLogins.stream()
|
|
||||||
.filter(s -> !ratingListLogins.contains(s))
|
|
||||||
.map(this::createEmptyRatingList)
|
|
||||||
.collect(Collectors.toList())
|
|
||||||
);
|
|
||||||
ratingListRepository.saveAll(
|
|
||||||
newRatingList.stream()
|
|
||||||
.sorted()
|
|
||||||
.peek(ratingList -> ratingList.setNumber(i.getAndIncrement()))
|
|
||||||
.collect(Collectors.toList())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private RatingList createEmptyRatingList(String s) {
|
|
||||||
final RatingList ratingList = new RatingList();
|
|
||||||
ratingList.setLogin(s);
|
|
||||||
ratingList.setPoints(0);
|
|
||||||
return ratingList;
|
|
||||||
}
|
|
||||||
|
|
||||||
private RatingList createRatingList(Map.Entry<String, Integer> entry) {
|
|
||||||
final RatingList ratingList = new RatingList();
|
|
||||||
ratingList.setLogin(entry.getKey());
|
|
||||||
ratingList.setPoints(entry.getValue());
|
|
||||||
return ratingList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRatingTop(@NonNull String login) {
|
|
||||||
final RatingList personRating = ratingListRepository.getByLogin(login)
|
|
||||||
.orElseThrow(() -> new NotFoundException("Пользователь не найден"));
|
|
||||||
|
|
||||||
final long countPerson = ratingListRepository.count();
|
|
||||||
final String threeMessage = ratingListRepository.findFirstThree().stream()
|
|
||||||
.map(this::createString)
|
|
||||||
.collect(Collectors.joining("\n"));
|
|
||||||
final String lastMessage = ratingListRepository.findLastThree().stream()
|
|
||||||
.limit(countPerson - 3 < 0 ? 0 : countPerson - 3)
|
|
||||||
.map(this::createString)
|
|
||||||
.collect(Collectors.joining("\n"));
|
|
||||||
|
|
||||||
String message;
|
|
||||||
|
|
||||||
if (personRating.getPoints() == 0) {
|
|
||||||
message = Smile.SADLY + " У вас не обнаружена активность в битбакете, поэтому вы не учавствуйте в рейтинге" +
|
|
||||||
"\n\n" + Smile.TOP + " Рейтинговая таблица " + Smile.TOP + Smile.HR + threeMessage + "\n... ... ... ... ...\n";
|
|
||||||
} else {
|
|
||||||
message = Smile.TOP + " Рейтинговая таблица " + Smile.TOP + Smile.HR + threeMessage;
|
|
||||||
final Integer numberRatingList = personRating.getNumber();
|
|
||||||
if (numberRatingList <= 2) {
|
|
||||||
if (countPerson > 3) {
|
|
||||||
message += "\n... ... ... ... ...\n";
|
|
||||||
}
|
|
||||||
} else if (numberRatingList > 3 && numberRatingList <= (countPerson - 3)) {
|
|
||||||
message += "\n... ... ... ... ...\n" + personRating.getNumber() + ": " + personRating.getLogin() + "\n... ... ... ... ...\n";
|
|
||||||
} else {
|
|
||||||
message += "\n... ... ... ... ...\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
message += lastMessage;
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String createString(RatingList ratingList) {
|
|
||||||
String message = "";
|
|
||||||
final Integer number = ratingList.getNumber();
|
|
||||||
if (number == 0) {
|
|
||||||
message += Smile.TOP_ONE.getValue() + " " + ratingList.getLogin() + " " + Smile.TOP_ONE.getValue();
|
|
||||||
} else if (number == 1) {
|
|
||||||
message += Smile.TOP_TWO.getValue() + " " + ratingList.getLogin() + " " + Smile.TOP_TWO.getValue();
|
|
||||||
} else if (number == 2) {
|
|
||||||
message += Smile.TOP_THREE.getValue() + " " + ratingList.getLogin() + " " + Smile.TOP_THREE.getValue();
|
|
||||||
} else {
|
|
||||||
message += Smile.KAKASHKA.getValue() + " " + ratingList.getLogin();
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -16,7 +16,6 @@ import org.sadtech.bot.gitlab.context.repository.TaskRepository;
|
|||||||
import org.sadtech.bot.gitlab.context.service.CommentService;
|
import org.sadtech.bot.gitlab.context.service.CommentService;
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.TaskService;
|
import org.sadtech.bot.gitlab.context.service.TaskService;
|
||||||
import org.sadtech.haiti.core.service.AbstractSimpleManagerService;
|
import org.sadtech.haiti.core.service.AbstractSimpleManagerService;
|
||||||
import org.sadtech.haiti.core.util.Assert;
|
import org.sadtech.haiti.core.util.Assert;
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.core.utils;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import okhttp3.Response;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
public class Utils {
|
|
||||||
|
|
||||||
private static final ObjectMapper objectMapper;
|
|
||||||
|
|
||||||
static {
|
|
||||||
objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final OkHttpClient client = new OkHttpClient.Builder()
|
|
||||||
.connectTimeout(60, TimeUnit.SECONDS)
|
|
||||||
.writeTimeout(60, TimeUnit.SECONDS)
|
|
||||||
.readTimeout(60, TimeUnit.SECONDS)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
private Utils() {
|
|
||||||
throw new IllegalStateException("Утилитарный класс");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> Optional<T> urlToJson(@NonNull String urlValue, @NonNull String token, @NonNull Class<T> classOfT) {
|
|
||||||
Request request = new Request.Builder()
|
|
||||||
.url(urlValue)
|
|
||||||
.header("Authorization", "Bearer " + token)
|
|
||||||
.header("Accept", "text/html,application/xhtml+xml,application/json")
|
|
||||||
.build();
|
|
||||||
try (final Response execute = client.newCall(request).execute()) {
|
|
||||||
if (execute.isSuccessful() && execute.body() != null) {
|
|
||||||
return Optional.ofNullable(objectMapper.readValue(execute.body().string(), classOfT));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.impl;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.PersonRepository;
|
|
||||||
import org.sadtech.bot.gitlab.data.jpa.PersonJpaRepository;
|
|
||||||
import org.springframework.dao.InvalidDataAccessResourceUsageException;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 06.09.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 06.09.2020
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Repository
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class PersonRepositoryImpl implements PersonRepository {
|
|
||||||
|
|
||||||
private final PersonJpaRepository jpaRepository;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Person save(@NonNull Person person) {
|
|
||||||
return jpaRepository.save(person);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean existsByTelegramId(Long chatId) {
|
|
||||||
return jpaRepository.existsByTelegramId(chatId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean existsByLogin(String login) {
|
|
||||||
try {
|
|
||||||
return jpaRepository.existsByLogin(login);
|
|
||||||
} catch (InvalidDataAccessResourceUsageException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Person> findAllByTelegramIdNotNullAndTokenNotNull() {
|
|
||||||
try {
|
|
||||||
return jpaRepository.findAllByTelegramIdNotNullAndTokenNotNull();
|
|
||||||
} catch (InvalidDataAccessResourceUsageException e) {
|
|
||||||
log.error(e.getMessage());
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Long> findAllTelegramIdByLogin(Set<String> logins) {
|
|
||||||
return jpaRepository.findAllTelegramIdByLogin(logins);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<Person> findByLogin(@NonNull String login) {
|
|
||||||
return jpaRepository.findById(login);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<Person> findByTelegramId(@NonNull Long telegramId) {
|
|
||||||
return jpaRepository.findByTelegramId(telegramId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.impl;
|
|
||||||
|
|
||||||
import lombok.NonNull;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingHistory;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.RatingHistoryRepository;
|
|
||||||
import org.sadtech.bot.gitlab.data.jpa.RatingHistoryJpaRepository;
|
|
||||||
import org.sadtech.haiti.database.repository.manager.AbstractSimpleManagerRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public class RatingHistoryRepositoryImpl extends AbstractSimpleManagerRepository<RatingHistory, Long> implements RatingHistoryRepository {
|
|
||||||
|
|
||||||
private final RatingHistoryJpaRepository jpaRepository;
|
|
||||||
|
|
||||||
public RatingHistoryRepositoryImpl(RatingHistoryJpaRepository jpaRepository) {
|
|
||||||
super(jpaRepository);
|
|
||||||
this.jpaRepository = jpaRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RatingHistory> findAllByDateAddBetween(@NonNull LocalDateTime from, @NonNull LocalDateTime to) {
|
|
||||||
return jpaRepository.findAllByDateAddBetween(from, to);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.impl;
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingList;
|
|
||||||
import org.sadtech.bot.gitlab.context.repository.RatingListRepository;
|
|
||||||
import org.sadtech.bot.gitlab.data.jpa.RatingListJpaRepository;
|
|
||||||
import org.sadtech.haiti.database.repository.manager.AbstractSimpleManagerRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public class RatingListRepositoryImpl extends AbstractSimpleManagerRepository<RatingList, String> implements RatingListRepository {
|
|
||||||
|
|
||||||
private final RatingListJpaRepository jpaRepository;
|
|
||||||
|
|
||||||
public RatingListRepositoryImpl(RatingListJpaRepository jpaRepository) {
|
|
||||||
super(jpaRepository);
|
|
||||||
this.jpaRepository = jpaRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<RatingList> getByLogin(String login) {
|
|
||||||
return jpaRepository.findById(login);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RatingList> findFirstThree() {
|
|
||||||
return jpaRepository.findTop3ByPointsGreaterThanOrderByNumberAsc(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RatingList> findLastThree() {
|
|
||||||
return jpaRepository.findTop3ByPointsGreaterThanOrderByNumberDesc(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long count() {
|
|
||||||
return jpaRepository.countByNumberGreaterThan(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.jpa;
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [30.01.2020]
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public interface PersonJpaRepository extends JpaRepository<Person, String> {
|
|
||||||
|
|
||||||
boolean existsByTelegramId(Long chatId);
|
|
||||||
|
|
||||||
boolean existsByLogin(String login);
|
|
||||||
|
|
||||||
List<Person> findAllByTelegramIdNotNullAndTokenNotNull();
|
|
||||||
|
|
||||||
@Query("SELECT u.telegramId FROM Person u WHERE u.login=:login")
|
|
||||||
Long findTelegramIdByLogin(String login);
|
|
||||||
|
|
||||||
@Query("SELECT u.telegramId FROM Person u WHERE u.login IN :logins AND u.telegramId IS NOT NULL")
|
|
||||||
Set<Long> findAllTelegramIdByLogin(Set<String> logins);
|
|
||||||
|
|
||||||
Optional<Person> findByTelegramId(Long telegramId);
|
|
||||||
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.jpa;
|
|
||||||
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingHistory;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
public interface RatingHistoryJpaRepository extends JpaRepository<RatingHistory, Long> {
|
|
||||||
|
|
||||||
List<RatingHistory> findAllByDateAddBetween(LocalDateTime from, LocalDateTime to);
|
|
||||||
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.data.jpa;
|
|
||||||
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.RatingList;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
public interface RatingListJpaRepository extends JpaRepository<RatingList, String> {
|
|
||||||
|
|
||||||
List<RatingList> findTop3ByPointsGreaterThanOrderByNumberAsc(Integer points);
|
|
||||||
|
|
||||||
List<RatingList> findTop3ByPointsGreaterThanOrderByNumberDesc(Integer points);
|
|
||||||
|
|
||||||
Long countByNumberGreaterThan(Integer points);
|
|
||||||
|
|
||||||
}
|
|
@ -4,11 +4,11 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Reviewer;
|
import org.sadtech.bot.gitlab.context.domain.entity.Reviewer;
|
||||||
import org.sadtech.bot.gitlab.core.utils.StringUtils;
|
import org.sadtech.bot.gitlab.core.utils.StringUtils;
|
||||||
|
import org.sadtech.bot.gitlab.sdk.domain.AuthorJson;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.Outcome;
|
import org.sadtech.bot.gitlab.sdk.domain.Outcome;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.Properties;
|
import org.sadtech.bot.gitlab.sdk.domain.Properties;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.PullRequestJson;
|
import org.sadtech.bot.gitlab.sdk.domain.PullRequestJson;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.PullRequestState;
|
import org.sadtech.bot.gitlab.sdk.domain.PullRequestState;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.UserDecisionJson;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.UserPullRequestStatus;
|
import org.sadtech.bot.gitlab.sdk.domain.UserPullRequestStatus;
|
||||||
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
||||||
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
||||||
@ -23,6 +23,32 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class PullRequestJsonConverter implements Converter<PullRequestJson, PullRequest> {
|
public class PullRequestJsonConverter implements Converter<PullRequestJson, PullRequest> {
|
||||||
|
|
||||||
|
public static PullRequestStatus convertPullRequestStatus(PullRequestState state) {
|
||||||
|
switch (state) {
|
||||||
|
case OPENED:
|
||||||
|
return PullRequestStatus.OPEN;
|
||||||
|
case MERGED:
|
||||||
|
return PullRequestStatus.MERGED;
|
||||||
|
case DECLINED:
|
||||||
|
return PullRequestStatus.DECLINED;
|
||||||
|
default:
|
||||||
|
throw new ConvertException("Неподдерживаемый тип ПР");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ReviewerStatus convertStatusReviewer(UserPullRequestStatus status) {
|
||||||
|
switch (status) {
|
||||||
|
case APPROVED:
|
||||||
|
return ReviewerStatus.APPROVED;
|
||||||
|
case NEEDS_WORK:
|
||||||
|
return ReviewerStatus.UNAPPROVED;
|
||||||
|
case UNAPPROVED:
|
||||||
|
return ReviewerStatus.NEEDS_WORK;
|
||||||
|
default:
|
||||||
|
throw new ConvertException("Неподдерживаемый статус ревьювера");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PullRequest convert(PullRequestJson json) {
|
public PullRequest convert(PullRequestJson json) {
|
||||||
|
|
||||||
@ -54,20 +80,7 @@ public class PullRequestJsonConverter implements Converter<PullRequestJson, Pull
|
|||||||
&& Outcome.CONFLICTED.equals(properties.getMergeResult().getOutcome());
|
&& Outcome.CONFLICTED.equals(properties.getMergeResult().getOutcome());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PullRequestStatus convertPullRequestStatus(PullRequestState state) {
|
private List<Reviewer> convertReviewers(List<AuthorJson> jsonReviewers) {
|
||||||
switch (state) {
|
|
||||||
case OPEN:
|
|
||||||
return PullRequestStatus.OPEN;
|
|
||||||
case MERGED:
|
|
||||||
return PullRequestStatus.MERGED;
|
|
||||||
case DECLINED:
|
|
||||||
return PullRequestStatus.DECLINED;
|
|
||||||
default:
|
|
||||||
throw new ConvertException("Неподдерживаемый тип ПР");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Reviewer> convertReviewers(List<UserDecisionJson> jsonReviewers) {
|
|
||||||
return jsonReviewers.stream()
|
return jsonReviewers.stream()
|
||||||
.map(
|
.map(
|
||||||
jsonReviewer -> {
|
jsonReviewer -> {
|
||||||
@ -80,17 +93,4 @@ public class PullRequestJsonConverter implements Converter<PullRequestJson, Pull
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ReviewerStatus convertStatusReviewer(UserPullRequestStatus status) {
|
|
||||||
switch (status) {
|
|
||||||
case APPROVED:
|
|
||||||
return ReviewerStatus.APPROVED;
|
|
||||||
case NEEDS_WORK:
|
|
||||||
return ReviewerStatus.UNAPPROVED;
|
|
||||||
case UNAPPROVED:
|
|
||||||
return ReviewerStatus.NEEDS_WORK;
|
|
||||||
default:
|
|
||||||
throw new ConvertException("Неподдерживаемый статус ревьювера");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package org.sadtech.bot.vcs.bitbucket.core.service.converter;
|
package org.sadtech.bot.vcs.bitbucket.core.service.converter;
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.UserJson;
|
import org.sadtech.bot.gitlab.sdk.domain.UserJson;
|
||||||
import org.springframework.core.convert.converter.Converter;
|
import org.springframework.core.convert.converter.Converter;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
@ -0,0 +1,21 @@
|
|||||||
|
package org.sadtech.bot.gitlab.sdk.domain;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Добавить описание класса.
|
||||||
|
*
|
||||||
|
* @author upagge [31.01.2020]
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AuthorJson {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
@JsonProperty("web_url")
|
||||||
|
private String webUrl;
|
||||||
|
|
||||||
|
}
|
@ -1,11 +1,11 @@
|
|||||||
package org.sadtech.bot.gitlab.sdk.domain;
|
package org.sadtech.bot.gitlab.sdk.domain;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.sadtech.bot.gitlab.sdk.utils.LocalDateTimeFromEpochDeserializer;
|
import org.sadtech.bot.gitlab.sdk.utils.LocalDateTimeFromEpochDeserializer;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
* TODO: Добавить описание класса.
|
||||||
@ -16,21 +16,30 @@ import java.util.List;
|
|||||||
public class PullRequestJson {
|
public class PullRequestJson {
|
||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
private Integer version;
|
|
||||||
|
@JsonProperty("iid")
|
||||||
|
private Long twoId;
|
||||||
|
|
||||||
|
@JsonProperty("project_id")
|
||||||
|
private Long projectId;
|
||||||
|
private String title;
|
||||||
|
private String description;
|
||||||
private PullRequestState state;
|
private PullRequestState state;
|
||||||
|
|
||||||
|
@JsonProperty("created_at")
|
||||||
@JsonDeserialize(using = LocalDateTimeFromEpochDeserializer.class)
|
@JsonDeserialize(using = LocalDateTimeFromEpochDeserializer.class)
|
||||||
private LocalDateTime createdDate;
|
private LocalDateTime createdDate;
|
||||||
|
|
||||||
|
@JsonProperty("updated_at")
|
||||||
@JsonDeserialize(using = LocalDateTimeFromEpochDeserializer.class)
|
@JsonDeserialize(using = LocalDateTimeFromEpochDeserializer.class)
|
||||||
private LocalDateTime updatedDate;
|
private LocalDateTime updatedDate;
|
||||||
|
|
||||||
private String title;
|
private AuthorJson author;
|
||||||
private String description;
|
|
||||||
private LinkJson links;
|
@JsonProperty("web_url")
|
||||||
private UserDecisionJson author;
|
private String webUrl;
|
||||||
private List<UserDecisionJson> reviewers;
|
|
||||||
private FromRefJson fromRef;
|
@JsonProperty("has_conflicts")
|
||||||
private Properties properties;
|
private String conflicts;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@ package org.sadtech.bot.gitlab.sdk.domain;
|
|||||||
*/
|
*/
|
||||||
public enum PullRequestState {
|
public enum PullRequestState {
|
||||||
|
|
||||||
OPEN, MERGED, DECLINED
|
OPENED, MERGED, DECLINED
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.sdk.domain;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [31.01.2020]
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class UserDecisionJson {
|
|
||||||
|
|
||||||
private UserJson user;
|
|
||||||
private BitbucketUserRole role;
|
|
||||||
private Boolean approved;
|
|
||||||
private UserPullRequestStatus status;
|
|
||||||
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.sdk.domain.sheet;
|
|
||||||
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.PullRequestJson;
|
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.Sheet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [02.02.2020]
|
|
||||||
*/
|
|
||||||
public class PullRequestSheetJson extends Sheet<PullRequestJson> {
|
|
||||||
|
|
||||||
}
|
|
8
pom.xml
8
pom.xml
@ -15,7 +15,7 @@
|
|||||||
<module>bot-core</module>
|
<module>bot-core</module>
|
||||||
<module>bot-app</module>
|
<module>bot-app</module>
|
||||||
<module>teamcity</module>
|
<module>teamcity</module>
|
||||||
<module>bitbucketbot-core</module>
|
<module>gitlab-core</module>
|
||||||
<module>bot-data</module>
|
<module>bot-data</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
@ -171,6 +171,12 @@
|
|||||||
<version>${haiti.database.version}</version>
|
<version>${haiti.database.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.sadtech.haiti</groupId>
|
||||||
|
<artifactId>haiti-utils</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.sadtech.bot.godfather</groupId>
|
<groupId>org.sadtech.bot.godfather</groupId>
|
||||||
<artifactId>telegram-bot</artifactId>
|
<artifactId>telegram-bot</artifactId>
|
||||||
|
@ -13,7 +13,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Component
|
@Component
|
||||||
@ConfigurationProperties(prefix = "bitbucketbot.teamcity")
|
@ConfigurationProperties(prefix = "gitlab-bot.teamcity")
|
||||||
public class TeamcityProperty {
|
public class TeamcityProperty {
|
||||||
|
|
||||||
private String token;
|
private String token;
|
||||||
|
@ -7,7 +7,6 @@ package org.sadtech.bot.gitlab.teamcity.core.service.parser;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.config.property.TeamcityProperty;
|
import org.sadtech.bot.gitlab.teamcity.core.config.property.TeamcityProperty;
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.BuildShort;
|
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.BuildShort;
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.TeamcityProject;
|
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.TeamcityProject;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package org.sadtech.bot.gitlab.teamcity.core.service.parser;
|
package org.sadtech.bot.gitlab.teamcity.core.service.parser;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.core.utils.Utils;
|
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.config.property.TeamcityProperty;
|
import org.sadtech.bot.gitlab.teamcity.core.config.property.TeamcityProperty;
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.TeamcityProject;
|
import org.sadtech.bot.gitlab.teamcity.core.domain.entity.TeamcityProject;
|
||||||
import org.sadtech.bot.gitlab.teamcity.core.service.TeamcityProjectService;
|
import org.sadtech.bot.gitlab.teamcity.core.service.TeamcityProjectService;
|
||||||
|
@ -6,7 +6,6 @@ import org.sadtech.bot.gitlab.context.domain.notify.Notify;
|
|||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
||||||
import org.sadtech.bot.gitlab.context.service.ChatService;
|
import org.sadtech.bot.gitlab.context.service.ChatService;
|
||||||
import org.sadtech.bot.gitlab.context.service.MessageSendService;
|
import org.sadtech.bot.gitlab.context.service.MessageSendService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.social.core.domain.BoxAnswer;
|
import org.sadtech.social.core.domain.BoxAnswer;
|
||||||
import org.sadtech.social.core.service.sender.Sending;
|
import org.sadtech.social.core.service.sender.Sending;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
package org.sadtech.bot.gitlab.telegram.service.unit;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.RatingService;
|
|
||||||
import org.sadtech.social.bot.service.usercode.ProcessingData;
|
|
||||||
import org.sadtech.social.core.domain.BoxAnswer;
|
|
||||||
import org.sadtech.social.core.domain.content.Message;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* // TODO: 01.10.2020 Добавить описание.
|
|
||||||
*
|
|
||||||
* @author upagge 01.10.2020
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class RatingTopProcessing implements ProcessingData<Message> {
|
|
||||||
|
|
||||||
private final RatingService ratingService;
|
|
||||||
private final PersonService personService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BoxAnswer processing(Message content) {
|
|
||||||
final Person person = personService.getByTelegramId(content.getPersonId())
|
|
||||||
.orElseThrow(() -> new NotFoundException("Пользователь не найден"));
|
|
||||||
return BoxAnswer.builder()
|
|
||||||
.message(ratingService.getRatingTop(person.getLogin()))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -2,10 +2,8 @@ package org.sadtech.bot.gitlab.telegram.service.unit;
|
|||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.domain.TaskStatus;
|
import org.sadtech.bot.gitlab.context.domain.TaskStatus;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Task;
|
import org.sadtech.bot.gitlab.context.domain.entity.Task;
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.TaskService;
|
import org.sadtech.bot.gitlab.context.service.TaskService;
|
||||||
import org.sadtech.social.bot.service.usercode.ProcessingData;
|
import org.sadtech.social.bot.service.usercode.ProcessingData;
|
||||||
import org.sadtech.social.core.domain.BoxAnswer;
|
import org.sadtech.social.core.domain.BoxAnswer;
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package org.sadtech.bot.gitlab.telegram.service.unit.pullrequest;
|
package org.sadtech.bot.gitlab.telegram.service.unit.pullrequest;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.utils.MessageUtils;
|
import org.sadtech.bot.gitlab.context.utils.MessageUtils;
|
||||||
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
import org.sadtech.bot.vsc.context.domain.ReviewerStatus;
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package org.sadtech.bot.gitlab.telegram.service.unit.pullrequest;
|
package org.sadtech.bot.gitlab.telegram.service.unit.pullrequest;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.PullRequest;
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
import org.sadtech.bot.gitlab.context.service.PullRequestsService;
|
||||||
import org.sadtech.bot.gitlab.context.utils.MessageUtils;
|
import org.sadtech.bot.gitlab.context.utils.MessageUtils;
|
||||||
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
import org.sadtech.bot.vsc.context.domain.PullRequestStatus;
|
||||||
|
@ -4,10 +4,8 @@ import lombok.Getter;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.NotifySetting;
|
import org.sadtech.bot.gitlab.context.domain.entity.NotifySetting;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Person;
|
|
||||||
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
import org.sadtech.bot.gitlab.context.exception.NotFoundException;
|
||||||
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
import org.sadtech.bot.gitlab.context.service.NotifyService;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.social.bot.domain.unit.AnswerProcessing;
|
import org.sadtech.social.bot.domain.unit.AnswerProcessing;
|
||||||
import org.sadtech.social.bot.domain.unit.AnswerText;
|
import org.sadtech.social.bot.domain.unit.AnswerText;
|
||||||
import org.sadtech.social.core.domain.BoxAnswer;
|
import org.sadtech.social.core.domain.BoxAnswer;
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package org.sadtech.bot.gitlab.telegram.unit;
|
package org.sadtech.bot.gitlab.telegram.unit;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.bot.gitlab.context.service.PersonService;
|
|
||||||
import org.sadtech.bot.gitlab.telegram.service.unit.RatingTopProcessing;
|
|
||||||
import org.sadtech.bot.gitlab.telegram.service.unit.TaskProcessing;
|
import org.sadtech.bot.gitlab.telegram.service.unit.TaskProcessing;
|
||||||
import org.sadtech.bot.gitlab.telegram.utils.GeneratorKeyBoards;
|
import org.sadtech.bot.gitlab.telegram.utils.GeneratorKeyBoards;
|
||||||
import org.sadtech.social.bot.domain.unit.AnswerCheck;
|
import org.sadtech.social.bot.domain.unit.AnswerCheck;
|
||||||
|
Loading…
Reference in New Issue
Block a user