Сообщение о количестве решенных задач
This commit is contained in:
parent
3df376d0f1
commit
760a17e30c
@ -22,7 +22,7 @@ telegram-config:
|
|||||||
bot-username: ${TELEGRAM_BOT_USERNAME}
|
bot-username: ${TELEGRAM_BOT_USERNAME}
|
||||||
bot-token: ${TELEGRAM_BOT_TOKEN}
|
bot-token: ${TELEGRAM_BOT_TOKEN}
|
||||||
gitlab-bot:
|
gitlab-bot:
|
||||||
version: 0.0.4 Beta
|
version: 0.0.5 Beta
|
||||||
person:
|
person:
|
||||||
telegram-id: ${TELEGRAM_PERSON_ID}
|
telegram-id: ${TELEGRAM_PERSON_ID}
|
||||||
token: ${GITLAB_PERSONAL_TOKEN}
|
token: ${GITLAB_PERSONAL_TOKEN}
|
||||||
|
@ -126,6 +126,7 @@
|
|||||||
<constraints nullable="false" foreignKeyName="discussion_responsible_id_person_id"
|
<constraints nullable="false" foreignKeyName="discussion_responsible_id_person_id"
|
||||||
references="person(id)"/>
|
references="person(id)"/>
|
||||||
</column>
|
</column>
|
||||||
|
<column name="resolved" type="boolean"/>
|
||||||
</createTable>
|
</createTable>
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ notify.pr.forgotten={0} *Напоминание о просмотре PullReques
|
|||||||
notify.pr.conflict={0} *Внимание! Конфликт в MergeRequest | {4}*{1}[{2}]({3})
|
notify.pr.conflict={0} *Внимание! Конфликт в MergeRequest | {4}*{1}[{2}]({3})
|
||||||
notify.pr.smart={0} *Напоминание о MergeRequest | {6}*{3}[{1}]({2}){3}{4} изменил свое решение на {5}
|
notify.pr.smart={0} *Напоминание о MergeRequest | {6}*{3}[{1}]({2}){3}{4} изменил свое решение на {5}
|
||||||
notify.pr.state={0} *Изменился статус MergeRequest | {7}*{1}[{2}]({3}){1}{4} {5} {6}
|
notify.pr.state={0} *Изменился статус MergeRequest | {7}*{1}[{2}]({3}){1}{4} {5} {6}
|
||||||
notify.pr.update={0} *Обновление MergeRequest | {6}*{3}[{1}]({2}){3}{4}: {5}
|
notify.pr.update={0} *Обновление MergeRequest | {6}*{3}[{1}]({2}){3}Все задачи: {8}/{7}\nВаши задачи: {10}/{9}{3}{4}: {5}
|
||||||
notify.task.close={0} *Закрыта* [задача]({1}){2}*{3}*: {4}
|
notify.task.close={0} *Закрыта* [задача]({1}){2}*{3}*: {4}
|
||||||
notify.task.new={0} *Назначена новая* [задача]({1}){2}*{3}*: {4}
|
notify.task.new={0} *Назначена новая* [задача]({1}){2}*{3}*: {4}
|
||||||
notify.project.new={0} *Новый Проект*{1}[{2}]({3}){1}{4}{5}: {6}
|
notify.project.new={0} *Новый Проект*{1}[{2}]({3}){1}{4}{5}: {6}
|
||||||
|
@ -37,6 +37,9 @@ public class Discussion implements BasicEntity<String> {
|
|||||||
@JoinColumn(name = "responsible_id")
|
@JoinColumn(name = "responsible_id")
|
||||||
private Person responsible;
|
private Person responsible;
|
||||||
|
|
||||||
|
@Column(name = "resolved")
|
||||||
|
private Boolean resolved;
|
||||||
|
|
||||||
@ManyToOne()
|
@ManyToOne()
|
||||||
@JoinTable(
|
@JoinTable(
|
||||||
name = "discussion_merge_request",
|
name = "discussion_merge_request",
|
||||||
@ -60,4 +63,8 @@ public class Discussion implements BasicEntity<String> {
|
|||||||
this.notes = notes;
|
this.notes = notes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Note getFirstNote() {
|
||||||
|
return this.notes.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,23 +9,35 @@ import org.sadtech.bot.gitlab.context.utils.Smile;
|
|||||||
public class UpdatePrNotify extends PrNotify {
|
public class UpdatePrNotify extends PrNotify {
|
||||||
|
|
||||||
private final String author;
|
private final String author;
|
||||||
|
private final Long allTasks;
|
||||||
|
private final Long allResolvedTasks;
|
||||||
|
private final Long personTasks;
|
||||||
|
private final Long personResolvedTasks;
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
private UpdatePrNotify(
|
private UpdatePrNotify(
|
||||||
String name,
|
String name,
|
||||||
String url,
|
String url,
|
||||||
String author,
|
String author,
|
||||||
String projectKey
|
String projectKey,
|
||||||
|
Long allTasks,
|
||||||
|
Long allResolvedTasks,
|
||||||
|
Long personTasks,
|
||||||
|
Long personResolvedTasks
|
||||||
) {
|
) {
|
||||||
super(projectKey, name, url);
|
super(projectKey, name, url);
|
||||||
this.author = author;
|
this.author = author;
|
||||||
|
this.allTasks = allTasks;
|
||||||
|
this.allResolvedTasks = allResolvedTasks;
|
||||||
|
this.personTasks = personTasks;
|
||||||
|
this.personResolvedTasks = personResolvedTasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String generateMessage(AppSettingService settingService) {
|
public String generateMessage(AppSettingService settingService) {
|
||||||
return settingService.getMessage(
|
return settingService.getMessage(
|
||||||
"notify.pr.update",
|
"notify.pr.update",
|
||||||
Smile.UPDATE.getValue(), title, url, Smile.HR.getValue(), Smile.AUTHOR.getValue(), author, projectName
|
Smile.UPDATE.getValue(), title, url, Smile.HR.getValue(), Smile.AUTHOR.getValue(), author, projectName, allTasks, allResolvedTasks, personTasks, personResolvedTasks
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package org.sadtech.bot.gitlab.context.repository;
|
package org.sadtech.bot.gitlab.context.repository;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import org.sadtech.haiti.context.repository.SimpleManagerRepository;
|
import org.sadtech.haiti.context.repository.SimpleManagerRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* // TODO: 11.02.2021 Добавить описание.
|
||||||
*
|
*
|
||||||
@ -10,4 +13,6 @@ import org.sadtech.haiti.context.repository.SimpleManagerRepository;
|
|||||||
*/
|
*/
|
||||||
public interface DiscussionRepository extends SimpleManagerRepository<Discussion, String> {
|
public interface DiscussionRepository extends SimpleManagerRepository<Discussion, String> {
|
||||||
|
|
||||||
|
List<Discussion> findAllByMergeRequestId(@NonNull Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public interface AppSettingService {
|
|||||||
|
|
||||||
String getMessage(@NonNull String label);
|
String getMessage(@NonNull String label);
|
||||||
|
|
||||||
String getMessage(@NonNull String label, String... params);
|
String getMessage(@NonNull String label, Object... params);
|
||||||
|
|
||||||
void setLocale(@NonNull AppLocale appLocale);
|
void setLocale(@NonNull AppLocale appLocale);
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ import lombok.NonNull;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import org.sadtech.haiti.context.service.SimpleManagerService;
|
import org.sadtech.haiti.context.service.SimpleManagerService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* // TODO: 11.02.2021 Добавить описание.
|
||||||
*
|
*
|
||||||
@ -13,4 +15,6 @@ public interface DiscussionService extends SimpleManagerService<Discussion, Stri
|
|||||||
|
|
||||||
void answer(@NonNull String discussionId, @NonNull String text);
|
void answer(@NonNull String discussionId, @NonNull String text);
|
||||||
|
|
||||||
|
List<Discussion> getAllByMergeRequestId(@NonNull Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ public class AppSettingServiceImpl implements AppSettingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMessage(@NonNull String label, String... params) {
|
public String getMessage(@NonNull String label, Object... params) {
|
||||||
final Object[] paramsArray = Arrays.stream(params).toArray();
|
final Object[] paramsArray = Arrays.stream(params).toArray();
|
||||||
return messageSource.getMessage(
|
return messageSource.getMessage(
|
||||||
label,
|
label,
|
||||||
|
@ -13,9 +13,11 @@ import org.sadtech.bot.gitlab.context.domain.entity.MergeRequest;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.entity.Note;
|
import org.sadtech.bot.gitlab.context.domain.entity.Note;
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.comment.CommentNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.comment.CommentNotify;
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.task.TaskCloseNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.task.TaskCloseNotify;
|
||||||
|
import org.sadtech.bot.gitlab.context.domain.notify.task.TaskNewNotify;
|
||||||
import org.sadtech.bot.gitlab.context.repository.DiscussionRepository;
|
import org.sadtech.bot.gitlab.context.repository.DiscussionRepository;
|
||||||
import org.sadtech.bot.gitlab.context.service.DiscussionService;
|
import org.sadtech.bot.gitlab.context.service.DiscussionService;
|
||||||
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.core.config.properties.GitlabProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty;
|
||||||
import org.sadtech.bot.gitlab.core.config.properties.PersonProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.PersonProperty;
|
||||||
import org.sadtech.haiti.context.exception.NotFoundException;
|
import org.sadtech.haiti.context.exception.NotFoundException;
|
||||||
@ -25,6 +27,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@ -45,6 +48,7 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
|
|
||||||
protected static final Pattern PATTERN = Pattern.compile("@[\\w]+");
|
protected static final Pattern PATTERN = Pattern.compile("@[\\w]+");
|
||||||
|
|
||||||
|
private final PersonService personService;
|
||||||
private final DiscussionRepository discussionRepository;
|
private final DiscussionRepository discussionRepository;
|
||||||
private final PersonInformation personInformation;
|
private final PersonInformation personInformation;
|
||||||
|
|
||||||
@ -53,8 +57,9 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
private final PersonProperty personProperty;
|
private final PersonProperty personProperty;
|
||||||
private final NotifyService notifyService;
|
private final NotifyService notifyService;
|
||||||
|
|
||||||
public DiscussionServiceImpl(DiscussionRepository discussionRepository, PersonInformation personInformation, GitlabProperty gitlabProperty, PersonProperty personProperty, NotifyService notifyService) {
|
public DiscussionServiceImpl(PersonService personService, DiscussionRepository discussionRepository, PersonInformation personInformation, GitlabProperty gitlabProperty, PersonProperty personProperty, NotifyService notifyService) {
|
||||||
super(discussionRepository);
|
super(discussionRepository);
|
||||||
|
this.personService = personService;
|
||||||
this.discussionRepository = discussionRepository;
|
this.discussionRepository = discussionRepository;
|
||||||
this.personInformation = personInformation;
|
this.personInformation = personInformation;
|
||||||
this.gitlabProperty = gitlabProperty;
|
this.gitlabProperty = gitlabProperty;
|
||||||
@ -64,35 +69,78 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Discussion create(@NonNull Discussion discussion) {
|
public Discussion create(@NonNull Discussion discussion) {
|
||||||
|
discussion.getNotes().forEach(note -> personService.create(note.getAuthor()));
|
||||||
discussion.getNotes().forEach(this::notificationPersonal);
|
discussion.getNotes().forEach(this::notificationPersonal);
|
||||||
|
discussion.getNotes().forEach(note -> notifyNewTask(note, discussion));
|
||||||
|
|
||||||
|
final boolean resolved = discussion.getNotes().stream()
|
||||||
|
.allMatch(note -> note.isResolvable() && note.getResolved());
|
||||||
|
discussion.setResolved(resolved);
|
||||||
return discussionRepository.save(discussion);
|
return discussionRepository.save(discussion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void notifyNewTask(Note note, Discussion discussion) {
|
||||||
|
if (note.isResolvable()
|
||||||
|
&& personInformation.getId().equals(discussion.getResponsible().getId())
|
||||||
|
&& !personInformation.getId().equals(note.getAuthor().getId())
|
||||||
|
&& note.getResolved() != null
|
||||||
|
&& !note.getResolved()
|
||||||
|
) {
|
||||||
|
notifyService.send(
|
||||||
|
TaskNewNotify.builder()
|
||||||
|
.authorName(note.getAuthor().getName())
|
||||||
|
.messageTask(note.getBody())
|
||||||
|
.url(note.getWebUrl())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Discussion update(@NonNull Discussion discussion) {
|
public Discussion update(@NonNull Discussion discussion) {
|
||||||
final Discussion oldDiscussion = discussionRepository.findById(discussion.getId()).orElseThrow(() -> new NotFoundException("Дискуссия не найдена"));
|
final Discussion oldDiscussion = discussionRepository.findById(discussion.getId())
|
||||||
|
.orElseThrow(() -> new NotFoundException("Дискуссия не найдена"));
|
||||||
final Map<Long, Note> noteMap = oldDiscussion
|
final Map<Long, Note> noteMap = oldDiscussion
|
||||||
.getNotes().stream()
|
.getNotes().stream()
|
||||||
.collect(Collectors.toMap(Note::getId, note -> note));
|
.collect(Collectors.toMap(Note::getId, note -> note));
|
||||||
|
final boolean inDiscussion = discussion.getNotes().stream()
|
||||||
|
.anyMatch(note -> personInformation.getId().equals(note.getAuthor().getId()));
|
||||||
|
|
||||||
discussion.setMergeRequest(oldDiscussion.getMergeRequest());
|
discussion.setMergeRequest(oldDiscussion.getMergeRequest());
|
||||||
discussion.setResponsible(oldDiscussion.getResponsible());
|
discussion.setResponsible(oldDiscussion.getResponsible());
|
||||||
discussion.getNotes().forEach(note -> updateNote(note, noteMap));
|
discussion.getNotes().forEach(note -> updateNote(note, noteMap, inDiscussion));
|
||||||
|
final boolean resolved = discussion.getNotes().stream()
|
||||||
|
.allMatch(note -> note.isResolvable() && note.getResolved());
|
||||||
|
discussion.setResolved(resolved);
|
||||||
return discussionRepository.save(discussion);
|
return discussionRepository.save(discussion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateNote(Note note, Map<Long, Note> noteMap) {
|
private void updateNote(Note note, Map<Long, Note> noteMap, boolean inDiscussion) {
|
||||||
if (noteMap.containsKey(note.getId())) {
|
if (noteMap.containsKey(note.getId())) {
|
||||||
final Note oldNote = noteMap.get(note.getId());
|
final Note oldNote = noteMap.get(note.getId());
|
||||||
note.setWebUrl(oldNote.getWebUrl());
|
|
||||||
|
|
||||||
if (note.isResolvable()) {
|
if (note.isResolvable()) {
|
||||||
updateTask(note, oldNote);
|
updateTask(note, oldNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
notificationPersonal(note);
|
if (inDiscussion) {
|
||||||
|
notifyNewAnswer(note);
|
||||||
|
} else {
|
||||||
|
notificationPersonal(note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyNewAnswer(Note note) {
|
||||||
|
if (!personInformation.getId().equals(note.getAuthor().getId())) {
|
||||||
|
notifyService.send(
|
||||||
|
CommentNotify.builder()
|
||||||
|
.url(note.getWebUrl())
|
||||||
|
.message(note.getBody())
|
||||||
|
.authorName(note.getAuthor().getName())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +191,11 @@ public class DiscussionServiceImpl extends AbstractSimpleManagerService<Discussi
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Discussion> getAllByMergeRequestId(@NonNull Long mergeRequestId) {
|
||||||
|
return discussionRepository.findAllByMergeRequestId(mergeRequestId);
|
||||||
|
}
|
||||||
|
|
||||||
protected void notificationPersonal(@NonNull Note note) {
|
protected void notificationPersonal(@NonNull Note note) {
|
||||||
Matcher matcher = PATTERN.matcher(note.getBody());
|
Matcher matcher = PATTERN.matcher(note.getBody());
|
||||||
Set<String> recipientsLogins = new HashSet<>();
|
Set<String> recipientsLogins = new HashSet<>();
|
||||||
|
@ -4,6 +4,7 @@ import lombok.NonNull;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.IdAndStatusPr;
|
import org.sadtech.bot.gitlab.context.domain.IdAndStatusPr;
|
||||||
import org.sadtech.bot.gitlab.context.domain.MergeRequestState;
|
import org.sadtech.bot.gitlab.context.domain.MergeRequestState;
|
||||||
import org.sadtech.bot.gitlab.context.domain.PersonInformation;
|
import org.sadtech.bot.gitlab.context.domain.PersonInformation;
|
||||||
|
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.MergeRequest;
|
import org.sadtech.bot.gitlab.context.domain.entity.MergeRequest;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Project;
|
import org.sadtech.bot.gitlab.context.domain.entity.Project;
|
||||||
import org.sadtech.bot.gitlab.context.domain.filter.MergeRequestFilter;
|
import org.sadtech.bot.gitlab.context.domain.filter.MergeRequestFilter;
|
||||||
@ -12,6 +13,7 @@ import org.sadtech.bot.gitlab.context.domain.notify.pullrequest.NewPrNotify;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.notify.pullrequest.StatusPrNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.pullrequest.StatusPrNotify;
|
||||||
import org.sadtech.bot.gitlab.context.domain.notify.pullrequest.UpdatePrNotify;
|
import org.sadtech.bot.gitlab.context.domain.notify.pullrequest.UpdatePrNotify;
|
||||||
import org.sadtech.bot.gitlab.context.repository.MergeRequestRepository;
|
import org.sadtech.bot.gitlab.context.repository.MergeRequestRepository;
|
||||||
|
import org.sadtech.bot.gitlab.context.service.DiscussionService;
|
||||||
import org.sadtech.bot.gitlab.context.service.MergeRequestsService;
|
import org.sadtech.bot.gitlab.context.service.MergeRequestsService;
|
||||||
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.PersonService;
|
||||||
@ -24,8 +26,11 @@ import org.sadtech.haiti.filter.FilterService;
|
|||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<MergeRequest, Long> implements MergeRequestsService {
|
public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<MergeRequest, Long> implements MergeRequestsService {
|
||||||
@ -35,6 +40,7 @@ public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<Merge
|
|||||||
private final PersonService personService;
|
private final PersonService personService;
|
||||||
private final FilterService<MergeRequest, MergeRequestFilter> filterService;
|
private final FilterService<MergeRequest, MergeRequestFilter> filterService;
|
||||||
private final ProjectService projectService;
|
private final ProjectService projectService;
|
||||||
|
private final DiscussionService discussionService;
|
||||||
|
|
||||||
private final PersonInformation personInformation;
|
private final PersonInformation personInformation;
|
||||||
|
|
||||||
@ -44,7 +50,7 @@ public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<Merge
|
|||||||
PersonService personService,
|
PersonService personService,
|
||||||
@Qualifier("mergeRequestFilterService") FilterService<MergeRequest, MergeRequestFilter> filterService,
|
@Qualifier("mergeRequestFilterService") FilterService<MergeRequest, MergeRequestFilter> filterService,
|
||||||
ProjectService projectService,
|
ProjectService projectService,
|
||||||
PersonInformation personInformation
|
DiscussionService discussionService, PersonInformation personInformation
|
||||||
) {
|
) {
|
||||||
super(mergeRequestRepository);
|
super(mergeRequestRepository);
|
||||||
this.notifyService = notifyService;
|
this.notifyService = notifyService;
|
||||||
@ -52,6 +58,7 @@ public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<Merge
|
|||||||
this.personService = personService;
|
this.personService = personService;
|
||||||
this.filterService = filterService;
|
this.filterService = filterService;
|
||||||
this.projectService = projectService;
|
this.projectService = projectService;
|
||||||
|
this.discussionService = discussionService;
|
||||||
this.personInformation = personInformation;
|
this.personInformation = personInformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,12 +132,30 @@ public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<Merge
|
|||||||
!personInformation.getId().equals(mergeRequest.getAuthor().getId())
|
!personInformation.getId().equals(mergeRequest.getAuthor().getId())
|
||||||
&& !oldMergeRequest.getDateLastCommit().equals(mergeRequest.getDateLastCommit())
|
&& !oldMergeRequest.getDateLastCommit().equals(mergeRequest.getDateLastCommit())
|
||||||
) {
|
) {
|
||||||
|
final List<Discussion> discussions = discussionService.getAllByMergeRequestId(oldMergeRequest.getId())
|
||||||
|
.stream()
|
||||||
|
.filter(discussion -> Objects.nonNull(discussion.getResponsible()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
final long allTask = discussions.size();
|
||||||
|
final long resolvedTask = discussions.stream()
|
||||||
|
.filter(Discussion::getResolved)
|
||||||
|
.count();
|
||||||
|
final long allYouTasks = discussions.stream()
|
||||||
|
.filter(discussion -> personInformation.getId().equals(discussion.getFirstNote().getAuthor().getId()))
|
||||||
|
.count();
|
||||||
|
final long resolvedYouTask = discussions.stream()
|
||||||
|
.filter(discussion -> personInformation.getId().equals(discussion.getFirstNote().getAuthor().getId()) && discussion.getResolved())
|
||||||
|
.count();
|
||||||
notifyService.send(
|
notifyService.send(
|
||||||
UpdatePrNotify.builder()
|
UpdatePrNotify.builder()
|
||||||
.author(oldMergeRequest.getAuthor().getName())
|
.author(oldMergeRequest.getAuthor().getName())
|
||||||
.name(oldMergeRequest.getTitle())
|
.name(oldMergeRequest.getTitle())
|
||||||
.projectKey(project.getName())
|
.projectKey(project.getName())
|
||||||
.url(oldMergeRequest.getWebUrl())
|
.url(oldMergeRequest.getWebUrl())
|
||||||
|
.allTasks(allTask)
|
||||||
|
.allResolvedTasks(resolvedTask)
|
||||||
|
.personTasks(allYouTasks)
|
||||||
|
.personResolvedTasks(resolvedYouTask)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -159,6 +184,7 @@ public class MergeRequestsServiceImpl extends AbstractSimpleManagerService<Merge
|
|||||||
!oldStatus.equals(newStatus)
|
!oldStatus.equals(newStatus)
|
||||||
&& oldMergeRequest.getAuthor().getId().equals(personInformation.getId())
|
&& oldMergeRequest.getAuthor().getId().equals(personInformation.getId())
|
||||||
) {
|
) {
|
||||||
|
|
||||||
notifyService.send(
|
notifyService.send(
|
||||||
StatusPrNotify.builder()
|
StatusPrNotify.builder()
|
||||||
.name(newMergeRequest.getTitle())
|
.name(newMergeRequest.getTitle())
|
||||||
|
@ -16,7 +16,6 @@ import java.util.List;
|
|||||||
@Service
|
@Service
|
||||||
public class NoteServiceImpl extends AbstractSimpleManagerService<Note, Long> implements NoteService {
|
public class NoteServiceImpl extends AbstractSimpleManagerService<Note, Long> implements NoteService {
|
||||||
|
|
||||||
|
|
||||||
private final NoteRepository noteRepository;
|
private final NoteRepository noteRepository;
|
||||||
|
|
||||||
public NoteServiceImpl(NoteRepository noteRepository) {
|
public NoteServiceImpl(NoteRepository noteRepository) {
|
||||||
|
@ -9,7 +9,6 @@ import org.sadtech.bot.gitlab.core.config.properties.GitlabProperty;
|
|||||||
import org.sadtech.bot.gitlab.core.config.properties.PersonProperty;
|
import org.sadtech.bot.gitlab.core.config.properties.PersonProperty;
|
||||||
import org.sadtech.bot.gitlab.sdk.domain.DiscussionJson;
|
import org.sadtech.bot.gitlab.sdk.domain.DiscussionJson;
|
||||||
import org.sadtech.haiti.context.domain.ExistsContainer;
|
import org.sadtech.haiti.context.domain.ExistsContainer;
|
||||||
import org.sadtech.haiti.context.exception.ConvertException;
|
|
||||||
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.sadtech.haiti.utils.network.HttpParse;
|
import org.sadtech.haiti.utils.network.HttpParse;
|
||||||
@ -18,6 +17,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -93,6 +93,7 @@ public class DiscussionParser {
|
|||||||
);
|
);
|
||||||
return discussion;
|
return discussion;
|
||||||
})
|
})
|
||||||
|
.filter(discussion -> discussion.getNotes() != null && !discussion.getNotes().isEmpty())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
discussionService.createAll(newDiscussions);
|
discussionService.createAll(newDiscussions);
|
||||||
}
|
}
|
||||||
@ -114,13 +115,21 @@ public class DiscussionParser {
|
|||||||
|
|
||||||
for (Discussion discussion : discussions) {
|
for (Discussion discussion : discussions) {
|
||||||
if (discussion.getMergeRequest() != null) {
|
if (discussion.getMergeRequest() != null) {
|
||||||
final Discussion newDiscussion = HttpParse.request(MessageFormat.format(gitlabProperty.getUrlOneDiscussion(), discussion.getMergeRequest().getProjectId(), discussion.getMergeRequest().getTwoId(), discussion.getId()))
|
final Optional<Discussion> optNewDiscussion = HttpParse.request(MessageFormat.format(gitlabProperty.getUrlOneDiscussion(), discussion.getMergeRequest().getProjectId(), discussion.getMergeRequest().getTwoId(), discussion.getId()))
|
||||||
.header(ACCEPT)
|
.header(ACCEPT)
|
||||||
.header(AUTHORIZATION, BEARER + personProperty.getToken())
|
.header(AUTHORIZATION, BEARER + personProperty.getToken())
|
||||||
.execute(DiscussionJson.class)
|
.execute(DiscussionJson.class)
|
||||||
.map(json -> conversionService.convert(json, Discussion.class))
|
.map(json -> {
|
||||||
.orElseThrow(() -> new ConvertException("Ошибка парсинга дискуссии"));
|
final Discussion newDiscussion = conversionService.convert(json, Discussion.class);
|
||||||
discussionService.update(newDiscussion);
|
newDiscussion.getNotes().forEach(
|
||||||
|
note -> {
|
||||||
|
final String url = MessageFormat.format(gitlabProperty.getUrlNote(), discussion.getMergeRequest().getWebUrl(), note.getId());
|
||||||
|
note.setWebUrl(url);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return newDiscussion;
|
||||||
|
});
|
||||||
|
optNewDiscussion.ifPresent(discussionService::update);
|
||||||
} else {
|
} else {
|
||||||
discussionService.deleteById(discussion.getId());
|
discussionService.deleteById(discussion.getId());
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@ import static org.sadtech.haiti.utils.network.HttpParse.BEARER;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MergeRequestParser {
|
public class MergeRequestParser {
|
||||||
|
|
||||||
|
|
||||||
public static final Integer COUNT = 100;
|
public static final Integer COUNT = 100;
|
||||||
private static final Set<MergeRequestState> OLD_STATUSES = Stream.of(
|
private static final Set<MergeRequestState> OLD_STATUSES = Stream.of(
|
||||||
MergeRequestState.MERGED, MergeRequestState.OPENED, MergeRequestState.CLOSED
|
MergeRequestState.MERGED, MergeRequestState.OPENED, MergeRequestState.CLOSED
|
||||||
@ -119,7 +118,9 @@ public class MergeRequestParser {
|
|||||||
.header(ACCEPT)
|
.header(ACCEPT)
|
||||||
.header(AUTHORIZATION, BEARER + personProperty.getToken())
|
.header(AUTHORIZATION, BEARER + personProperty.getToken())
|
||||||
.executeList(CommitJson.class);
|
.executeList(CommitJson.class);
|
||||||
mergeRequest.setDateLastCommit(commitJson.get(0).getCreatedDate());
|
if (commitJson != null && !commitJson.isEmpty()) {
|
||||||
|
mergeRequest.setDateLastCommit(commitJson.get(0).getCreatedDate());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MergeRequestJson> getMergeRequestJsons(Project project, int page) {
|
private List<MergeRequestJson> getMergeRequestJsons(Project project, int page) {
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
package org.sadtech.bot.gitlab.data.impl;
|
package org.sadtech.bot.gitlab.data.impl;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import org.sadtech.bot.gitlab.context.repository.DiscussionRepository;
|
import org.sadtech.bot.gitlab.context.repository.DiscussionRepository;
|
||||||
|
import org.sadtech.bot.gitlab.data.jpa.DiscussionJpaRepository;
|
||||||
import org.sadtech.haiti.database.repository.manager.AbstractSimpleManagerRepository;
|
import org.sadtech.haiti.database.repository.manager.AbstractSimpleManagerRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* // TODO: 11.02.2021 Добавить описание.
|
||||||
*
|
*
|
||||||
@ -14,8 +17,16 @@ import org.springframework.stereotype.Repository;
|
|||||||
@Repository
|
@Repository
|
||||||
public class DiscussionRepositoryImpl extends AbstractSimpleManagerRepository<Discussion, String> implements DiscussionRepository {
|
public class DiscussionRepositoryImpl extends AbstractSimpleManagerRepository<Discussion, String> implements DiscussionRepository {
|
||||||
|
|
||||||
public DiscussionRepositoryImpl(JpaRepository<Discussion, String> jpaRepository) {
|
private final DiscussionJpaRepository jpaRepository;
|
||||||
|
|
||||||
|
public DiscussionRepositoryImpl(DiscussionJpaRepository jpaRepository) {
|
||||||
super(jpaRepository);
|
super(jpaRepository);
|
||||||
|
this.jpaRepository = jpaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Discussion> findAllByMergeRequestId(@NonNull Long mergeRequestId) {
|
||||||
|
return jpaRepository.findAllByMergeRequestId(mergeRequestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package org.sadtech.bot.gitlab.data.jpa;
|
|||||||
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
import org.sadtech.bot.gitlab.context.domain.entity.Discussion;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* // TODO: 11.02.2021 Добавить описание.
|
* // TODO: 11.02.2021 Добавить описание.
|
||||||
*
|
*
|
||||||
@ -10,4 +12,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
*/
|
*/
|
||||||
public interface DiscussionJpaRepository extends JpaRepository<Discussion, String> {
|
public interface DiscussionJpaRepository extends JpaRepository<Discussion, String> {
|
||||||
|
|
||||||
|
List<Discussion> findAllByMergeRequestId(Long mergeRequestId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user