This commit is contained in:
uPagge 2021-02-05 16:05:35 +03:00
parent 6946a63da4
commit 58a5ac294f
No known key found for this signature in database
GPG Key ID: 964B40928E4C9088
7 changed files with 64 additions and 10 deletions

View File

@ -0,0 +1,14 @@
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="2021-02-05-edit-pipelines" author="uPagge">
<addColumn tableName="pipeline">
<column name="person_id" type="int">
<constraints foreignKeyName="pipeline_person_id" references="person(id)"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog>

View File

@ -5,5 +5,6 @@
<include file="liquibase/v.1.0.0/2021-01-14-create-tables.xml"/> <include file="liquibase/v.1.0.0/2021-01-14-create-tables.xml"/>
<include file="liquibase/v.1.0.0/2020-01-16-app-setting.xml"/> <include file="liquibase/v.1.0.0/2020-01-16-app-setting.xml"/>
<include file="liquibase/v.1.0.0/2021-02-05-edit-pipelines.xml"/>
</databaseChangeLog> </databaseChangeLog>

View File

@ -54,4 +54,8 @@ public class Pipeline implements BasicEntity<Long> {
@JoinColumn(name = "project_id") @JoinColumn(name = "project_id")
private Project project; private Project project;
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
} }

View File

@ -1,5 +1,6 @@
package org.sadtech.bot.gitlab.core.service.convert; package org.sadtech.bot.gitlab.core.service.convert;
import lombok.RequiredArgsConstructor;
import org.sadtech.bot.gitlab.context.domain.PipelineStatus; import org.sadtech.bot.gitlab.context.domain.PipelineStatus;
import org.sadtech.bot.gitlab.context.domain.entity.Pipeline; import org.sadtech.bot.gitlab.context.domain.entity.Pipeline;
import org.sadtech.bot.gitlab.sdk.domain.PipelineJson; import org.sadtech.bot.gitlab.sdk.domain.PipelineJson;
@ -25,8 +26,11 @@ import static org.sadtech.bot.gitlab.context.domain.PipelineStatus.WAITING_FOR_R
* @author upagge 17.01.2021 * @author upagge 17.01.2021
*/ */
@Component @Component
@RequiredArgsConstructor
public class PipelineJsonConverter implements Converter<PipelineJson, Pipeline> { public class PipelineJsonConverter implements Converter<PipelineJson, Pipeline> {
private final PersonJsonConverter convertPerson;
@Override @Override
public Pipeline convert(PipelineJson source) { public Pipeline convert(PipelineJson source) {
final Pipeline pipeline = new Pipeline(); final Pipeline pipeline = new Pipeline();
@ -36,6 +40,7 @@ public class PipelineJsonConverter implements Converter<PipelineJson, Pipeline>
pipeline.setRef(source.getRef()); pipeline.setRef(source.getRef());
pipeline.setWebUrl(source.getWebUrl()); pipeline.setWebUrl(source.getWebUrl());
pipeline.setStatus(convertStatus(source.getStatus())); pipeline.setStatus(convertStatus(source.getStatus()));
pipeline.setPerson(convertPerson.convert(source.getUser()));
return pipeline; return pipeline;
} }

View File

@ -1,11 +1,13 @@
package org.sadtech.bot.gitlab.core.service.impl; package org.sadtech.bot.gitlab.core.service.impl;
import lombok.NonNull; import lombok.NonNull;
import org.sadtech.bot.gitlab.context.domain.PersonInformation;
import org.sadtech.bot.gitlab.context.domain.PipelineStatus; import org.sadtech.bot.gitlab.context.domain.PipelineStatus;
import org.sadtech.bot.gitlab.context.domain.entity.Pipeline; import org.sadtech.bot.gitlab.context.domain.entity.Pipeline;
import org.sadtech.bot.gitlab.context.domain.notify.pipeline.PipelineNotify; import org.sadtech.bot.gitlab.context.domain.notify.pipeline.PipelineNotify;
import org.sadtech.bot.gitlab.context.repository.PipelineRepository; import org.sadtech.bot.gitlab.context.repository.PipelineRepository;
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.PipelineService; import org.sadtech.bot.gitlab.context.service.PipelineService;
import org.sadtech.haiti.context.exception.NotFoundException; import org.sadtech.haiti.context.exception.NotFoundException;
import org.sadtech.haiti.context.page.Pagination; import org.sadtech.haiti.context.page.Pagination;
@ -36,18 +38,28 @@ public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline,
private final NotifyService notifyService; private final NotifyService notifyService;
private final PipelineRepository repository; private final PipelineRepository repository;
private final PersonService personService;
public PipelineServiceImpl(NotifyService notifyService, PipelineRepository repository) { private final PersonInformation personInformation;
public PipelineServiceImpl(NotifyService notifyService, PipelineRepository repository, PersonService personService, PersonInformation personInformation) {
super(repository); super(repository);
this.notifyService = notifyService; this.notifyService = notifyService;
this.repository = repository; this.repository = repository;
this.personService = personService;
this.personInformation = personInformation;
} }
@Override @Override
public Pipeline create(@NonNull Pipeline pipeline) { public Pipeline create(@NonNull Pipeline pipeline) {
personService.create(pipeline.getPerson());
final Pipeline newPipeline = repository.save(pipeline); final Pipeline newPipeline = repository.save(pipeline);
if (notificationStatus.contains(pipeline.getStatus())) { if (
notificationStatus.contains(pipeline.getStatus())
&& pipeline.getPerson() != null
&& personInformation.getId().equals(pipeline.getPerson().getId())
) {
notifyService.send( notifyService.send(
PipelineNotify.builder() PipelineNotify.builder()
.newStatus(pipeline.getStatus().name()) .newStatus(pipeline.getStatus().name())
@ -70,7 +82,11 @@ public class PipelineServiceImpl extends AbstractSimpleManagerService<Pipeline,
if (!oldPipeline.getUpdated().equals(pipeline.getUpdated())) { if (!oldPipeline.getUpdated().equals(pipeline.getUpdated())) {
pipeline.setProject(oldPipeline.getProject()); pipeline.setProject(oldPipeline.getProject());
if (notificationStatus.contains(pipeline.getStatus())) { if (
notificationStatus.contains(pipeline.getStatus())
&& pipeline.getPerson() != null
&& personInformation.getId().equals(pipeline.getPerson().getId())
) {
notifyService.send( notifyService.send(
PipelineNotify.builder() PipelineNotify.builder()
.pipelineId(pipeline.getId()) .pipelineId(pipeline.getId())

View File

@ -18,6 +18,7 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -82,14 +83,25 @@ public class PipelineParser {
final ExistsContainer<Pipeline, Long> existsContainer = pipelineService.existsById(jsonIds); final ExistsContainer<Pipeline, Long> existsContainer = pipelineService.existsById(jsonIds);
if (!existsContainer.isAllFound()) { if (!existsContainer.isAllFound()) {
final List<Pipeline> newPipelines = pipelineJsons.stream()
.filter(json -> existsContainer.getIdNoFound().contains(json.getId()))
.map(json -> conversionService.convert(json, Pipeline.class))
.peek(
pipeline -> pipeline.setProject(project)
).collect(Collectors.toList());
pipelineService.createAll(newPipelines); final Collection<Long> idsNotFound = existsContainer.getIdNoFound();
for (Long newId : idsNotFound) {
final Pipeline newPipeline = HttpParse.request(
MessageFormat.format(gitlabProperty.getUrlPipeline(), project.getId(), newId)
)
.header(ACCEPT)
.header(AUTHORIZATION, BEARER + personProperty.getToken())
.execute(PipelineJson.class)
.map(json -> {
final Pipeline pipeline = conversionService.convert(json, Pipeline.class);
pipeline.setProject(project);
return pipeline;
})
.orElseThrow(() -> new ConvertException("Ошибка обновления Pipelines"));
pipelineService.create(newPipeline);
}
} }
pipelineJsons = getPipelineJsons(project.getId(), ++page); pipelineJsons = getPipelineJsons(project.getId(), ++page);

View File

@ -33,6 +33,8 @@ public class PipelineJson {
private String ref; private String ref;
private PersonJson user;
@JsonProperty("web_url") @JsonProperty("web_url")
private String webUrl; private String webUrl;