Рефакторинг по пакетам

This commit is contained in:
Struchkov Mark 2024-08-23 20:41:33 +03:00
parent 7b0019f4fe
commit d2e1fdbfcb
No known key found for this signature in database
GPG Key ID: A3F0AC3F0FA52F3C
39 changed files with 286 additions and 185 deletions

View File

@ -0,0 +1,17 @@
package dev.struchkov.bot.gitlab.context.prop;
import lombok.Getter;
import lombok.Setter;
/**
* Основные настройки приложения.
*
* @author upagge 11.10.2020
*/
@Getter
@Setter
public class AppProperty {
private String version;
}

View File

@ -1,9 +1,7 @@
package dev.struchkov.bot.gitlab.core.config.properties;
package dev.struchkov.bot.gitlab.context.prop;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* Данные необходимые для взаимодействия с API GitLab.
@ -12,8 +10,6 @@ import org.springframework.stereotype.Component;
*/
@Getter
@Setter
@Component
@ConfigurationProperties("gitlab-bot.gitlab")
public class GitlabProperty {
private String baseUrl;

View File

@ -0,0 +1,17 @@
package dev.struchkov.bot.gitlab.context.prop;
import lombok.Getter;
import lombok.Setter;
/**
* @author upagge 15.01.2021
*/
@Getter
@Setter
public class PersonProperty {
private String token;
private String telegramId;
}

View File

@ -34,6 +34,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -1,16 +0,0 @@
package dev.struchkov.bot.gitlab.core.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ForkJoinPool;
@Configuration
public class CoreConfig {
@Bean("parserPool")
public ForkJoinPool parserPool() {
return new ForkJoinPool(4);
}
}

View File

@ -1,21 +0,0 @@
package dev.struchkov.bot.gitlab.core.config.properties;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* Основные настройки приложения.
*
* @author upagge 11.10.2020
*/
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "gitlab-bot")
public class AppProperty {
private String version;
}

View File

@ -1,21 +0,0 @@
package dev.struchkov.bot.gitlab.core.config.properties;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author upagge 15.01.2021
*/
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "gitlab-bot.person")
public class PersonProperty {
private String token;
private String telegramId;
}

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.MergeRequestState;
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
import dev.struchkov.bot.gitlab.sdk.domain.NoteJson;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
import dev.struchkov.bot.gitlab.sdk.domain.PersonJson;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.convert;
package dev.struchkov.bot.gitlab.core.convert;
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
import dev.struchkov.bot.gitlab.sdk.domain.ProjectJson;

View File

@ -1,14 +1,14 @@
package dev.struchkov.bot.gitlab.core.service.parser;
package dev.struchkov.bot.gitlab.core.parser;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequestForDiscussion;
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,16 +1,16 @@
package dev.struchkov.bot.gitlab.core.service.parser;
package dev.struchkov.bot.gitlab.core.parser;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.IdAndStatusPr;
import dev.struchkov.bot.gitlab.context.domain.MergeRequestState;
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.context.service.ProjectService;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetAllMergeRequestForProjectTask;
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetSingleMergeRequestTask;
import dev.struchkov.bot.gitlab.core.parser.forktask.GetAllMergeRequestForProjectTask;
import dev.struchkov.bot.gitlab.core.parser.forktask.GetSingleMergeRequestTask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
import dev.struchkov.bot.gitlab.sdk.domain.ApprovalContainerJson;

View File

@ -1,14 +1,14 @@
package dev.struchkov.bot.gitlab.core.service.parser;
package dev.struchkov.bot.gitlab.core.parser;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.service.PipelineService;
import dev.struchkov.bot.gitlab.context.service.ProjectService;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetPipelineShortTask;
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetPipelineTask;
import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineShortTask;
import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineTask;
import dev.struchkov.bot.gitlab.sdk.domain.PipelineJson;
import dev.struchkov.bot.gitlab.sdk.domain.PipelineShortJson;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,13 +1,13 @@
package dev.struchkov.bot.gitlab.core.service.parser;
package dev.struchkov.bot.gitlab.core.parser;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.context.service.PersonService;
import dev.struchkov.bot.gitlab.context.service.ProjectService;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
import dev.struchkov.bot.gitlab.sdk.domain.PersonJson;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
package dev.struchkov.bot.gitlab.core.parser.forktask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
package dev.struchkov.bot.gitlab.core.parser.forktask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
package dev.struchkov.bot.gitlab.core.parser.forktask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
package dev.struchkov.bot.gitlab.core.parser.forktask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
package dev.struchkov.bot.gitlab.core.parser.forktask;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.entity.AppSetting;
import dev.struchkov.bot.gitlab.context.domain.notify.level.DiscussionLevel;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
@ -10,12 +10,12 @@ import dev.struchkov.bot.gitlab.context.domain.notify.comment.NewCommentNotify;
import dev.struchkov.bot.gitlab.context.domain.notify.level.DiscussionLevel;
import dev.struchkov.bot.gitlab.context.domain.notify.task.DiscussionNewNotify;
import dev.struchkov.bot.gitlab.context.domain.notify.task.ThreadCloseNotify;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.repository.DiscussionRepository;
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
import dev.struchkov.bot.gitlab.context.service.NotifyService;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
import dev.struchkov.haiti.utils.container.Pair;
import lombok.NonNull;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.AssigneeChanged;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl.note;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
import dev.struchkov.bot.gitlab.context.repository.NoteRepository;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.notify.Notify;
import dev.struchkov.bot.gitlab.context.service.AppSettingService;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.entity.Person;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;

View File

@ -1,4 +1,4 @@
package dev.struchkov.bot.gitlab.core.service.impl;
package dev.struchkov.bot.gitlab.core.service;
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
import dev.struchkov.bot.gitlab.context.domain.entity.Project;

View File

@ -2,124 +2,98 @@ package dev.struchkov.bot.gitlab.core.utils;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import dev.struchkov.haiti.utils.Inspector;
import jakarta.validation.constraints.NotNull;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
/**
* Утилитарный класс для работы с web.
*
* @author upagge 30.09.2020
*/
@Component
public class HttpParse {
private static final Logger log = LoggerFactory.getLogger(HttpParse.class);
public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json");
private static final ObjectMapper objectMapper;
private final Request.Builder requestBuilder = new Request.Builder();
private final HttpUrl.Builder httpUrlBuilder;
private final HttpHeaders headers = new HttpHeaders();
private final UriComponentsBuilder uriBuilder;
static {
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
public HttpParse(String url) {
Inspector.isNotNull(url);
httpUrlBuilder = HttpUrl.parse(url).newBuilder();
private final RestTemplate restTemplate;
public HttpParse(String url, RestTemplate restTemplate) {
this.restTemplate = restTemplate;
this.uriBuilder = UriComponentsBuilder.fromHttpUrl(url);
}
public static HttpParse request(String url) {
Inspector.isNotNull(url);
return new HttpParse(url);
public static HttpParse request(String url, RestTemplate restTemplate) {
return new HttpParse(url, restTemplate);
}
public HttpParse header(String name, String value) {
isNotNull(name);
if (value != null) {
requestBuilder.header(name, value);
if (name != null && value != null) {
headers.add(name, value);
}
return this;
}
public HttpParse header(HttpHeader header) {
isNotNull(header);
requestBuilder.header(header.getName(), header.getValue());
if (header != null) {
headers.add(header.getName(), header.getValue());
}
return this;
}
public HttpParse getParameter(String name, String value) {
isNotNull(name);
if (value != null) {
httpUrlBuilder.addQueryParameter(name, value);
if (name != null && value != null) {
uriBuilder.queryParam(name, value);
}
return this;
}
public <T> Optional<T> execute(Class<T> classOfT) {
isNotNull(classOfT);
final HttpUrl url = httpUrlBuilder.build();
final Request request = requestBuilder.url(url).build();
log.trace("Выполняется okhttp3 запрос | {}", url);
final OkHttpClient httpClient = getNewClient();
try (final Response execute = httpClient.newCall(request).execute()) {
try {
String url = uriBuilder.toUriString();
log.trace("Выполняется RestTemplate запрос | {}", url);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
log.trace("Запрос выполнен | {}", url);
if (execute.isSuccessful() && checkNotNull(execute.body())) {
final String string = execute.body().string();
return Optional.ofNullable(objectMapper.readValue(string, classOfT));
if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) {
String body = response.getBody();
return Optional.ofNullable(objectMapper.readValue(body, classOfT));
}
} catch (IOException e) {
log.error("Ошибка выполнения okhttp3", e);
log.error("Ошибка выполнения RestTemplate", e);
}
return Optional.empty();
}
//TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate
public <T> List<T> executeList(Class<T> classOfT) {
isNotNull(classOfT);
final HttpUrl url = httpUrlBuilder.build();
final Request request = requestBuilder.url(url).build();
log.trace("Выполняется okhttp3 запрос | {}", url);
final OkHttpClient httpClient = getNewClient();
try (Response execute = httpClient.newCall(request).execute()) {
try {
String url = uriBuilder.toUriString();
log.trace("Выполняется RestTemplate запрос | {}", url);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
log.trace("Запрос выполнен | {}", url);
ResponseBody body = execute.body();
if (execute.isSuccessful() && checkNotNull(body)) {
final String stringBody = body.string();
final List<T> list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
return (list == null || list.isEmpty()) ? Collections.emptyList() : list;
if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) {
String body = response.getBody();
return objectMapper.readValue(body, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
}
} catch (IOException e) {
log.error("Ошибка выполнения okhttp3", e);
log.error("Ошибка выполнения RestTemplate", e);
}
return Collections.emptyList();
}
}
@NotNull
private static OkHttpClient getNewClient() {
return new OkHttpClient().newBuilder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
}
}

View File

@ -0,0 +1,125 @@
//package dev.struchkov.bot.gitlab.core.utils;
//
//import com.fasterxml.jackson.databind.DeserializationFeature;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import dev.struchkov.haiti.utils.Inspector;
//import jakarta.validation.constraints.NotNull;
//import okhttp3.HttpUrl;
//import okhttp3.OkHttpClient;
//import okhttp3.Request;
//import okhttp3.Response;
//import okhttp3.ResponseBody;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.io.IOException;
//import java.util.Collections;
//import java.util.List;
//import java.util.Optional;
//import java.util.concurrent.TimeUnit;
//
//import static dev.struchkov.haiti.utils.Checker.checkNotNull;
//import static dev.struchkov.haiti.utils.Inspector.isNotNull;
//
///**
// * Утилитарный класс для работы с web.
// *
// * @author upagge 30.09.2020
// */
//public class HttpParse {
//
// private static final Logger log = LoggerFactory.getLogger(HttpParse.class);
//
// public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json");
//
// private static final ObjectMapper objectMapper;
//
// private final Request.Builder requestBuilder = new Request.Builder();
// private final HttpUrl.Builder httpUrlBuilder;
//
// static {
// objectMapper = new ObjectMapper();
// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// }
//
// public HttpParse(String url) {
// Inspector.isNotNull(url);
// httpUrlBuilder = HttpUrl.parse(url).newBuilder();
// }
//
// public static HttpParse request(String url) {
// Inspector.isNotNull(url);
// return new HttpParse(url);
// }
//
// public HttpParse header(String name, String value) {
// isNotNull(name);
// if (value != null) {
// requestBuilder.header(name, value);
// }
// return this;
// }
//
// public HttpParse header(HttpHeader header) {
// isNotNull(header);
// requestBuilder.header(header.getName(), header.getValue());
// return this;
// }
//
// public HttpParse getParameter(String name, String value) {
// isNotNull(name);
// if (value != null) {
// httpUrlBuilder.addQueryParameter(name, value);
// }
// return this;
// }
//
// public <T> Optional<T> execute(Class<T> classOfT) {
// isNotNull(classOfT);
// final HttpUrl url = httpUrlBuilder.build();
// final Request request = requestBuilder.url(url).build();
// log.trace("Выполняется okhttp3 запрос | {}", url);
// final OkHttpClient httpClient = getNewClient();
// try (final Response execute = httpClient.newCall(request).execute()) {
// log.trace("Запрос выполнен | {}", url);
// if (execute.isSuccessful() && checkNotNull(execute.body())) {
// final String string = execute.body().string();
// return Optional.ofNullable(objectMapper.readValue(string, classOfT));
// }
// } catch (IOException e) {
// log.error("Ошибка выполнения okhttp3", e);
// }
// return Optional.empty();
// }
//
// //TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate
// public <T> List<T> executeList(Class<T> classOfT) {
// isNotNull(classOfT);
// final HttpUrl url = httpUrlBuilder.build();
// final Request request = requestBuilder.url(url).build();
// log.trace("Выполняется okhttp3 запрос | {}", url);
// final OkHttpClient httpClient = getNewClient();
// try (Response execute = httpClient.newCall(request).execute()) {
// log.trace("Запрос выполнен | {}", url);
// ResponseBody body = execute.body();
// if (execute.isSuccessful() && checkNotNull(body)) {
// final String stringBody = body.string();
// final List<T> list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
// return (list == null || list.isEmpty()) ? Collections.emptyList() : list;
// }
// } catch (IOException e) {
// log.error("Ошибка выполнения okhttp3", e);
// }
// return Collections.emptyList();
// }
//
// @NotNull
// private static OkHttpClient getNewClient() {
// return new OkHttpClient().newBuilder()
// .connectTimeout(30, TimeUnit.SECONDS)
// .readTimeout(30, TimeUnit.SECONDS)
// .writeTimeout(30, TimeUnit.SECONDS)
// .build();
// }
//
//}

View File

@ -1,10 +1,12 @@
package dev.struchkov.bot.gitlab.config;
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.context.prop.AppProperty;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.ConversionService;
@ -13,6 +15,7 @@ import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.util.Arrays;
import java.util.concurrent.ForkJoinPool;
import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT;
import static dev.struchkov.haiti.context.exception.NotFoundException.notFoundException;
@ -36,6 +39,29 @@ public class AppConfig {
// return taskScheduler;
// }
@Bean
@ConfigurationProperties(prefix = "gitlab-bot")
public AppProperty appProperty() {
return new AppProperty();
}
@Bean
@ConfigurationProperties("gitlab-bot.gitlab")
public GitlabProperty gitlabProperty() {
return new GitlabProperty();
}
@Bean
@ConfigurationProperties(prefix = "gitlab-bot.person")
public PersonProperty personProperty() {
return new PersonProperty();
}
@Bean("parserPool")
public ForkJoinPool parserPool() {
return new ForkJoinPool(4);
}
@Bean
public ConversionService conversionService(Converter... converters) {
final DefaultConversionService defaultConversionService = new DefaultConversionService();

View File

@ -4,10 +4,10 @@ import dev.struchkov.bot.gitlab.context.service.AppSettingService;
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.context.service.PipelineService;
import dev.struchkov.bot.gitlab.core.service.parser.DiscussionParser;
import dev.struchkov.bot.gitlab.core.service.parser.MergeRequestParser;
import dev.struchkov.bot.gitlab.core.service.parser.PipelineParser;
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
import dev.struchkov.bot.gitlab.core.parser.DiscussionParser;
import dev.struchkov.bot.gitlab.core.parser.MergeRequestParser;
import dev.struchkov.bot.gitlab.core.parser.PipelineParser;
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;

View File

@ -1,6 +1,6 @@
package dev.struchkov.bot.gitlab.telegram.service;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.godfather.main.domain.content.Message;
import dev.struchkov.godfather.simple.context.service.ErrorHandler;
import dev.struchkov.godfather.simple.domain.BoxAnswer;

View File

@ -1,6 +1,6 @@
package dev.struchkov.bot.gitlab.telegram.service;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.godfather.simple.domain.BoxAnswer;
import dev.struchkov.godfather.simple.domain.action.PreSendProcessing;
import lombok.RequiredArgsConstructor;

View File

@ -1,9 +1,9 @@
package dev.struchkov.bot.gitlab.telegram.service;
import dev.struchkov.bot.gitlab.context.prop.AppProperty;
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
import dev.struchkov.bot.gitlab.context.utils.Icons;
import dev.struchkov.bot.gitlab.core.config.properties.AppProperty;
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
import dev.struchkov.godfather.simple.domain.BoxAnswer;
import dev.struchkov.godfather.telegram.domain.ClientBotCommand;
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;

View File

@ -3,13 +3,13 @@ package dev.struchkov.bot.gitlab.telegram.unit;
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.context.service.NoteService;
import dev.struchkov.bot.gitlab.context.service.ProjectService;
import dev.struchkov.bot.gitlab.context.utils.Icons;
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
import dev.struchkov.bot.gitlab.telegram.utils.UnitName;
import dev.struchkov.godfather.main.domain.annotation.Unit;
import dev.struchkov.godfather.main.domain.content.Mail;

View File

@ -7,10 +7,10 @@ import dev.struchkov.bot.gitlab.context.service.DiscussionService;
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
import dev.struchkov.bot.gitlab.context.service.PipelineService;
import dev.struchkov.bot.gitlab.context.service.ProjectService;
import dev.struchkov.bot.gitlab.core.service.parser.DiscussionParser;
import dev.struchkov.bot.gitlab.core.service.parser.MergeRequestParser;
import dev.struchkov.bot.gitlab.core.service.parser.PipelineParser;
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
import dev.struchkov.bot.gitlab.core.parser.DiscussionParser;
import dev.struchkov.bot.gitlab.core.parser.MergeRequestParser;
import dev.struchkov.bot.gitlab.core.parser.PipelineParser;
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
import dev.struchkov.godfather.main.domain.annotation.Unit;
import dev.struchkov.godfather.main.domain.content.Mail;
import dev.struchkov.godfather.main.domain.content.Message;