общий рефакторинг
This commit is contained in:
parent
b33dcd79d2
commit
af6acee675
47
README.md
Normal file
47
README.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Social Core
|
||||||
|
|
||||||
|
Набор классов для реализации абстрактных проектов для социальных сетей и месенджеров, без привязки к конкретным реализациям.
|
||||||
|
|
||||||
|
## Общая информация
|
||||||
|
|
||||||
|
Возьмем класс `Mail`, которые отвечает за сообщение. Это одновременно конкретный и абстрактный класс. Конкретный он,
|
||||||
|
потому что у него есть определенные поля и не предполагается его дальнешее расширение разработчиком, который использует
|
||||||
|
данную библиотеку. А абстрактный он, потому что не предполагает привязки к какой-либо социальной сети.
|
||||||
|
|
||||||
|
Это может быть сообщение во ВКонтакте или Telegram, на данном уровне абстракции это не важно. Из таких обобщенных
|
||||||
|
сущностей, а так же сервисов и репозиториев к ним и состоит библиотека.
|
||||||
|
|
||||||
|
Все сущности имеют свой сервис и репозиторий для сохранения. Так же реализована JPA версия репозиториев.
|
||||||
|
|
||||||
|
## Примеры использований
|
||||||
|
|
||||||
|
1. [Social Bot](https://github.com/uPagge/social-bot) - Абстрактный SDK для бота под любую социальную сеть и мессенджер.
|
||||||
|
|
||||||
|
## Пакеты проекта
|
||||||
|
|
||||||
|
- domain - доменные сущности проекта. Например, сообщение пользователя, комментарий к фотографии, сообщение в беседе.
|
||||||
|
- content
|
||||||
|
- attachment - вложения к сообщениям пользователя. Прикрепленная фотография, или аудио, или голосовое сообщение.
|
||||||
|
- keyboard - сущности для реализации клавиаутры
|
||||||
|
- button - кнопки клавиатуры разных типов
|
||||||
|
- exception - классы для объектов исключений
|
||||||
|
- repository - интерфейсы репозиториев для доменных сущностей
|
||||||
|
- impl - реализации интерфейсов
|
||||||
|
- local - Реализация на какой-либо колекции Java (Map, List и т.к.)
|
||||||
|
- jpa - Реализация для сохранения в БД.
|
||||||
|
- jpa - Интерфейсы для работы с Spring Jpa
|
||||||
|
- service - интерфейсы сервисов для доменных сущностей
|
||||||
|
- impl - реализации интерфейсов
|
||||||
|
- sender - реализации интерфейса `Sending`
|
||||||
|
- utils - прочие классы утилиты
|
||||||
|
|
||||||
|
## Dependency
|
||||||
|
|
||||||
|
```
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.sadtech.social</groupId>
|
||||||
|
<artifactId>social-bot</artifactId>
|
||||||
|
<version>0.6.3-RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
```
|
||||||
|
|
129
pom.xml
129
pom.xml
@ -9,22 +9,28 @@
|
|||||||
<version>0.6.3-SNAPSHOT</version>
|
<version>0.6.3-SNAPSHOT</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<build>
|
<name>Social Core</name>
|
||||||
<plugins>
|
<description>
|
||||||
<plugin>
|
Набор классов для реализации абстрактных проектов для социальных сетей и месенджеров, без привязки к конкретным
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
сервисам.
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
</description>
|
||||||
<configuration>
|
<url>https://github.com/uPagge/social-core</url>
|
||||||
<source>8</source>
|
|
||||||
<target>8</target>
|
<scm>
|
||||||
</configuration>
|
<connection>scm:git:https://github.com/uPagge/social-core.git</connection>
|
||||||
</plugin>
|
<url>https://github.com/uPagge/social-core</url>
|
||||||
</plugins>
|
<developerConnection>scm:git:https://github.com/uPagge/social-core.git</developerConnection>
|
||||||
</build>
|
</scm>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<snapshotRepository>
|
||||||
|
<id>ossrh</id>
|
||||||
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
|
</snapshotRepository>
|
||||||
|
</distributionManagement>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<gson.ver>2.8.5</gson.ver>
|
<gson.ver>2.8.5</gson.ver>
|
||||||
<slf4j.ver>1.7.29</slf4j.ver>
|
|
||||||
<mail.ver>1.4</mail.ver>
|
<mail.ver>1.4</mail.ver>
|
||||||
<lombok.ver>1.18.10</lombok.ver>
|
<lombok.ver>1.18.10</lombok.ver>
|
||||||
<spring.data.jpa.ver>2.1.3.RELEASE</spring.data.jpa.ver>
|
<spring.data.jpa.ver>2.1.3.RELEASE</spring.data.jpa.ver>
|
||||||
@ -39,12 +45,6 @@
|
|||||||
<version>${gson.ver}</version>
|
<version>${gson.ver}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-api</artifactId>
|
|
||||||
<version>${slf4j.ver}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.mail</groupId>
|
<groupId>javax.mail</groupId>
|
||||||
<artifactId>mail</artifactId>
|
<artifactId>mail</artifactId>
|
||||||
@ -71,13 +71,93 @@
|
|||||||
<artifactId>validation-api</artifactId>
|
<artifactId>validation-api</artifactId>
|
||||||
<version>${validation.api.ver}</version>
|
<version>${validation.api.ver}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
|
||||||
<version>2.1.3.RELEASE</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>release</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.sonatype.plugins</groupId>
|
||||||
|
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||||
|
<version>1.6.7</version>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<serverId>ossrh</serverId>
|
||||||
|
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
||||||
|
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<version>2.2.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar-no-fork</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>2.9.1</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-javadocs</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-gpg-plugin</artifactId>
|
||||||
|
<version>1.5</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>sign-artifacts</id>
|
||||||
|
<phase>verify</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>sign</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.sonatype.plugins</groupId>
|
||||||
|
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||||
|
<version>1.6.7</version>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<serverId>ossrh</serverId>
|
||||||
|
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
||||||
|
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>8</source>
|
||||||
|
<target>8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
<developer>
|
<developer>
|
||||||
<id>uPagge</id>
|
<id>uPagge</id>
|
||||||
@ -87,5 +167,4 @@
|
|||||||
</developer>
|
</developer>
|
||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -1,15 +0,0 @@
|
|||||||
package org.sadtech.social.core.config;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
|
||||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Конфигуратор для использования в {@link org.springframework.context.annotation.Import}.
|
|
||||||
*
|
|
||||||
* @author upagge [28/07/2019]
|
|
||||||
*/
|
|
||||||
@EnableJpaRepositories(basePackages = "org.sadtech.social.core.repository.jpa")
|
|
||||||
@EntityScan(basePackages = "org.sadtech.social.core.domain")
|
|
||||||
public class SocialJpaSpringConfig {
|
|
||||||
|
|
||||||
}
|
|
@ -1,7 +1,8 @@
|
|||||||
package org.sadtech.social.core.domain.content;
|
package org.sadtech.social.core.domain.content;
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import org.sadtech.social.core.utils.Description;
|
import org.sadtech.social.core.utils.Description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -9,8 +10,9 @@ import org.sadtech.social.core.utils.Description;
|
|||||||
*
|
*
|
||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
|
||||||
public abstract class Comment extends Message {
|
public abstract class Comment extends Message {
|
||||||
|
|
||||||
@Description("Идентификатор контента, к которому ставлено сообщение")
|
@Description("Идентификатор контента, к которому ставлено сообщение")
|
||||||
|
@ -24,4 +24,5 @@ public class EmptyMessage extends Message {
|
|||||||
public void setText(String text) {
|
public void setText(String text) {
|
||||||
throw new AppBotException("EmptyMessage no setText");
|
throw new AppBotException("EmptyMessage no setText");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Аьстрактная сущность - Сообщение от пользователя.
|
* Абстрактная сущность - Сообщение от пользователя.
|
||||||
*
|
*
|
||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
|
@ -26,4 +26,5 @@ public class AudioMessage extends Attachment {
|
|||||||
public AudioMessage() {
|
public AudioMessage() {
|
||||||
type = AttachmentType.AUDIO_MESSAGE;
|
type = AttachmentType.AUDIO_MESSAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ public class GeoCoordinate {
|
|||||||
|
|
||||||
@Description("Широта")
|
@Description("Широта")
|
||||||
private Float latitude;
|
private Float latitude;
|
||||||
|
|
||||||
@Description("Долгота")
|
@Description("Долгота")
|
||||||
private Float longitude;
|
private Float longitude;
|
||||||
|
|
||||||
|
@ -15,10 +15,10 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
@Builder
|
|
||||||
@Getter
|
@Getter
|
||||||
@EqualsAndHashCode
|
@Builder
|
||||||
@ToString
|
@ToString
|
||||||
|
@EqualsAndHashCode
|
||||||
public class KeyBoardLine {
|
public class KeyBoardLine {
|
||||||
|
|
||||||
@Description("Кнопки в строке")
|
@Description("Кнопки в строке")
|
||||||
|
@ -14,8 +14,8 @@ import org.sadtech.social.core.utils.Description;
|
|||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString
|
@ToString
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class KeyBoardButtonAccount extends KeyBoardButton {
|
public class KeyBoardButtonAccount extends KeyBoardButton {
|
||||||
|
|
||||||
@Description("Сумма к оплате")
|
@Description("Сумма к оплате")
|
||||||
@ -34,4 +34,5 @@ public class KeyBoardButtonAccount extends KeyBoardButton {
|
|||||||
this.accountId = accountId;
|
this.accountId = accountId;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ import org.sadtech.social.core.domain.keyboard.KeyBoardButton;
|
|||||||
import org.sadtech.social.core.utils.Description;
|
import org.sadtech.social.core.utils.Description;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString
|
@ToString
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class KeyBoardButtonText extends KeyBoardButton {
|
public class KeyBoardButtonText extends KeyBoardButton {
|
||||||
|
|
||||||
@Description("Надпись на кнопке")
|
@Description("Надпись на кнопке")
|
||||||
@ -30,4 +30,5 @@ public class KeyBoardButtonText extends KeyBoardButton {
|
|||||||
public static KeyBoardButtonText of(String label) {
|
public static KeyBoardButtonText of(String label) {
|
||||||
return KeyBoardButtonText.builder().label(label).build();
|
return KeyBoardButtonText.builder().label(label).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ package org.sadtech.social.core.exception;
|
|||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
public class AccessException extends AppBotException {
|
public class AccessException extends AppBotException {
|
||||||
|
|
||||||
public AccessException(String message) {
|
public AccessException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,17 +11,11 @@ public class AppBotException extends RuntimeException {
|
|||||||
|
|
||||||
private static final String TYPE = "ERROR";
|
private static final String TYPE = "ERROR";
|
||||||
private final LocalDateTime timeError = LocalDateTime.now();
|
private final LocalDateTime timeError = LocalDateTime.now();
|
||||||
protected String description;
|
|
||||||
|
|
||||||
public AppBotException(String message) {
|
public AppBotException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AppBotException(String message, String description) {
|
|
||||||
super(message);
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
@ -30,7 +24,4 @@ public class AppBotException extends RuntimeException {
|
|||||||
return timeError;
|
return timeError;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ package org.sadtech.social.core.exception;
|
|||||||
* @author upagge [11/07/2019]
|
* @author upagge [11/07/2019]
|
||||||
*/
|
*/
|
||||||
public class ConfigAppException extends AppBotException {
|
public class ConfigAppException extends AppBotException {
|
||||||
|
|
||||||
public ConfigAppException(String message) {
|
public ConfigAppException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package org.sadtech.social.core.repository;
|
package org.sadtech.social.core.repository;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.money.Account;
|
import org.sadtech.social.core.domain.money.Account;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Репозиторий для взаимодействия с хранилищем счетов {@link Account}.
|
* Репозиторий для взаимодействия с хранилищем счетов {@link Account}.
|
||||||
*
|
*
|
||||||
@ -9,10 +12,10 @@ import org.sadtech.social.core.domain.money.Account;
|
|||||||
*/
|
*/
|
||||||
public interface AccountRepository {
|
public interface AccountRepository {
|
||||||
|
|
||||||
Integer add(Account account);
|
Account save(@NonNull Account account);
|
||||||
|
|
||||||
void edit(Integer accountId, Account account);
|
Optional<Account> findById(@NonNull Integer accountId);
|
||||||
|
|
||||||
Account findById(Integer accountId);
|
boolean existsById(Integer id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.sadtech.social.core.repository;
|
package org.sadtech.social.core.repository;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.content.Message;
|
import org.sadtech.social.core.domain.content.Message;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -18,17 +19,17 @@ public interface ContentRepository<T extends Message> {
|
|||||||
* @param content Объект сообщени
|
* @param content Объект сообщени
|
||||||
* @return Идентификатор сообщения в хранилище
|
* @return Идентификатор сообщения в хранилище
|
||||||
*/
|
*/
|
||||||
T add(T content);
|
T add(@NonNull T content);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получить все сообщения за определенный временной диапазон
|
* Получить все сообщения за определенный временной диапазон
|
||||||
*
|
*
|
||||||
* @param timeFrom Начало временного диапазона
|
* @param dateFrom Начало временного диапазона
|
||||||
* @param timeTo Конец диапазона
|
* @param dateTo Конец диапазона
|
||||||
* @return Список сообщений
|
* @return Список сообщений
|
||||||
*/
|
*/
|
||||||
List<T> betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo);
|
List<T> betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo);
|
||||||
|
|
||||||
List<T> betweenByAddDateTime(LocalDateTime from, LocalDateTime to);
|
List<T> betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
package org.sadtech.social.core.repository.impl.jpa;
|
package org.sadtech.social.core.repository.impl.jpa;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.social.core.domain.money.Account;
|
import org.sadtech.social.core.domain.money.Account;
|
||||||
import org.sadtech.social.core.repository.AccountRepository;
|
import org.sadtech.social.core.repository.AccountRepository;
|
||||||
import org.sadtech.social.core.repository.jpa.AccountRepositoryJpa;
|
import org.sadtech.social.core.repository.jpa.AccountRepositoryJpa;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание класса.
|
|
||||||
*
|
|
||||||
* @author upagge [27/07/2019]
|
* @author upagge [27/07/2019]
|
||||||
*/
|
*/
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -16,18 +17,18 @@ public class AccountRepositoryJpaImpl implements AccountRepository {
|
|||||||
private final AccountRepositoryJpa accountRepositoryJpa;
|
private final AccountRepositoryJpa accountRepositoryJpa;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer add(Account account) {
|
public Account save(@NonNull Account account) {
|
||||||
return accountRepositoryJpa.saveAndFlush(account).getId();
|
return accountRepositoryJpa.save(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void edit(Integer accountId, Account account) {
|
public Optional<Account> findById(@NonNull Integer accountId) {
|
||||||
account.setId(accountId);
|
return accountRepositoryJpa.findById(accountId);
|
||||||
accountRepositoryJpa.saveAndFlush(account);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Account findById(Integer accountId) {
|
public boolean existsById(Integer id) {
|
||||||
return accountRepositoryJpa.getOne(accountId);
|
return accountRepositoryJpa.existsById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.sadtech.social.core.repository.impl.jpa;
|
package org.sadtech.social.core.repository.impl.jpa;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.social.core.domain.content.Mail;
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
import org.sadtech.social.core.repository.ContentRepository;
|
import org.sadtech.social.core.repository.ContentRepository;
|
||||||
@ -19,18 +20,18 @@ public class MailRepositoryJpaImpl implements ContentRepository<Mail> {
|
|||||||
private final MailRepositoryJpa mailRepositoryJpa;
|
private final MailRepositoryJpa mailRepositoryJpa;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mail add(Mail content) {
|
public Mail add(@NonNull Mail content) {
|
||||||
return mailRepositoryJpa.saveAndFlush(content);
|
return mailRepositoryJpa.saveAndFlush(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<Mail> betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) {
|
||||||
return mailRepositoryJpa.findByCreateDateBetween(timeFrom, timeTo);
|
return mailRepositoryJpa.findByCreateDateBetween(dateFrom, dateTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> betweenByAddDateTime(LocalDateTime from, LocalDateTime to) {
|
public List<Mail> betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) {
|
||||||
return mailRepositoryJpa.findByAddDateBetween(from, to);
|
return mailRepositoryJpa.findByAddDateBetween(dateFrom, dateTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package org.sadtech.social.core.repository.impl.local;
|
package org.sadtech.social.core.repository.impl.local;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.money.Account;
|
import org.sadtech.social.core.domain.money.Account;
|
||||||
import org.sadtech.social.core.exception.AccessException;
|
|
||||||
import org.sadtech.social.core.exception.NotFoundException;
|
|
||||||
import org.sadtech.social.core.exception.PaymentException;
|
|
||||||
import org.sadtech.social.core.repository.AccountRepository;
|
import org.sadtech.social.core.repository.AccountRepository;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -13,36 +11,25 @@ import java.util.Optional;
|
|||||||
public class AccountRepositoryMap implements AccountRepository {
|
public class AccountRepositoryMap implements AccountRepository {
|
||||||
|
|
||||||
private final Map<Integer, Account> saveMap = new HashMap<>();
|
private final Map<Integer, Account> saveMap = new HashMap<>();
|
||||||
private Integer id = 1;
|
private int id = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer add(Account account) {
|
public Account save(@NonNull Account account) {
|
||||||
if (check(account.getId())) {
|
if (existsById(account.getId())) {
|
||||||
account.setId(id);
|
account.setId(id);
|
||||||
saveMap.put(id, account);
|
return saveMap.put(id++, account);
|
||||||
return id++;
|
|
||||||
} else {
|
} else {
|
||||||
throw new AccessException("Счет " + account.getId() + " уже существует");
|
return saveMap.put(id, account);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void edit(Integer accountId, Account account) {
|
|
||||||
if (check(id)) {
|
|
||||||
account.setId(accountId);
|
|
||||||
saveMap.put(accountId, account);
|
|
||||||
} else {
|
|
||||||
throw new NotFoundException("Счет " + accountId + " не найден");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Account findById(Integer accountId) {
|
public Optional<Account> findById(@NonNull Integer accountId) {
|
||||||
return Optional.ofNullable(saveMap.get(accountId)).orElseThrow(() -> new PaymentException("Счет " + accountId + " не найден"));
|
return Optional.ofNullable(saveMap.get(accountId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean check(Integer id) {
|
public boolean existsById(Integer id) {
|
||||||
return !saveMap.containsKey(id);
|
return !saveMap.containsKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
package org.sadtech.social.core.repository.impl.local;
|
|
||||||
|
|
||||||
import org.sadtech.social.core.domain.content.BoardComment;
|
|
||||||
import org.sadtech.social.core.repository.ContentRepository;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class BoardCommentRepositoryMap implements ContentRepository<BoardComment> {
|
|
||||||
|
|
||||||
private final Map<Long, BoardComment> saveMap = new HashMap<>();
|
|
||||||
private Long count = 0L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BoardComment add(BoardComment comment) {
|
|
||||||
comment.setId(count);
|
|
||||||
saveMap.put(count++, comment);
|
|
||||||
return comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<BoardComment> betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
|
||||||
ArrayList<BoardComment> rezultMails = new ArrayList<>();
|
|
||||||
for (int i = saveMap.size() - 1; i >= 0; i--) {
|
|
||||||
if (!(saveMap.get(i).getCreateDate().isBefore(timeFrom) || saveMap.get(i).getCreateDate().isAfter(timeTo)) && saveMap.get(i).getCreateDate().equals(timeFrom)) {
|
|
||||||
rezultMails.add(this.saveMap.get(i));
|
|
||||||
} else if (saveMap.get(i).getCreateDate().isBefore(timeFrom)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rezultMails;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<BoardComment> betweenByAddDateTime(LocalDateTime from, LocalDateTime to) {
|
|
||||||
ArrayList<BoardComment> rezultMails = new ArrayList<>();
|
|
||||||
for (int i = saveMap.size() - 1; i >= 0; i--) {
|
|
||||||
if (!(saveMap.get(i).getAddDate().isBefore(from) || saveMap.get(i).getAddDate().isAfter(to)) && saveMap.get(i).getAddDate().equals(from)) {
|
|
||||||
rezultMails.add(this.saveMap.get(i));
|
|
||||||
} else if (saveMap.get(i).getCreateDate().isBefore(to)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rezultMails;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +1,6 @@
|
|||||||
package org.sadtech.social.core.repository.impl.local;
|
package org.sadtech.social.core.repository.impl.local;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.sadtech.social.core.domain.content.Mail;
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
import org.sadtech.social.core.repository.ContentRepository;
|
import org.sadtech.social.core.repository.ContentRepository;
|
||||||
@ -27,13 +28,13 @@ public class MailRepositoryList implements ContentRepository<Mail> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> betweenByCreateDateTime(LocalDateTime from, LocalDateTime to) {
|
public List<Mail> betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) {
|
||||||
ArrayList<Mail> rezultMails = new ArrayList<>();
|
ArrayList<Mail> rezultMails = new ArrayList<>();
|
||||||
for (int i = mails.size() - 1; i >= 0; i--) {
|
for (int i = mails.size() - 1; i >= 0; i--) {
|
||||||
Mail mail = mails.get(i);
|
Mail mail = mails.get(i);
|
||||||
if (isTimePeriod(from, to, mail.getAddDate())) {
|
if (isTimePeriod(dateFrom, dateTo, mail.getAddDate())) {
|
||||||
rezultMails.add(mail);
|
rezultMails.add(mail);
|
||||||
} else if (mail.getCreateDate().isBefore(from)) {
|
} else if (mail.getCreateDate().isBefore(dateFrom)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -41,22 +42,22 @@ public class MailRepositoryList implements ContentRepository<Mail> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> betweenByAddDateTime(LocalDateTime from, LocalDateTime to) {
|
public List<Mail> betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) {
|
||||||
ArrayList<Mail> rezultMails = new ArrayList<>();
|
ArrayList<Mail> rezultMails = new ArrayList<>();
|
||||||
for (int i = mails.size() - 1; i >= 0; i--) {
|
for (int i = mails.size() - 1; i >= 0; i--) {
|
||||||
Mail mail = mails.get(i);
|
Mail mail = mails.get(i);
|
||||||
LocalDateTime addDate = mail.getAddDate();
|
LocalDateTime addDate = mail.getAddDate();
|
||||||
if (isTimePeriod(from, to, addDate)) {
|
if (isTimePeriod(dateFrom, dateTo, addDate)) {
|
||||||
rezultMails.add(mail);
|
rezultMails.add(mail);
|
||||||
} else if (addDate.isBefore(from)) {
|
} else if (addDate.isBefore(dateFrom)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rezultMails;
|
return rezultMails;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isTimePeriod(LocalDateTime from, LocalDateTime to, LocalDateTime dateTime) {
|
private boolean isTimePeriod(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo, @NonNull LocalDateTime dateTime) {
|
||||||
return from.isBefore(dateTime) && to.isAfter(dateTime);
|
return dateFrom.isBefore(dateTime) && dateTo.isAfter(dateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +5,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Добавить описание интерфейса.
|
|
||||||
*
|
|
||||||
* @author upagge [27/07/2019]
|
* @author upagge [27/07/2019]
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.sadtech.social.core.repository.jpa;
|
package org.sadtech.social.core.repository.jpa;
|
||||||
|
|
||||||
import org.sadtech.social.core.domain.content.Mail;
|
import org.sadtech.social.core.domain.content.Mail;
|
||||||
|
import org.sadtech.social.core.repository.impl.jpa.MailRepositoryJpaImpl;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Интерфейс JPA репозитория для сущности {@link Mail}. При этом сам не является репозиторием, а подставляется в
|
* Интерфейс JPA репозитория для сущности {@link Mail}. При этом сам не является репозиторием, а подставляется в
|
||||||
* {@link org.sadtech.social.core.repository.impl.jpa.MailRepositoryJpaImpl}
|
* {@link MailRepositoryJpaImpl}
|
||||||
*
|
*
|
||||||
* @author upagge [27/07/2019]
|
* @author upagge [27/07/2019]
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.sadtech.social.core.service;
|
package org.sadtech.social.core.service;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.money.Account;
|
import org.sadtech.social.core.domain.money.Account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -9,7 +10,7 @@ import org.sadtech.social.core.domain.money.Account;
|
|||||||
*/
|
*/
|
||||||
public interface AccountService {
|
public interface AccountService {
|
||||||
|
|
||||||
Integer add(Account account);
|
Account add(@NonNull Account account);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Метод для оплаты счета
|
* Метод для оплаты счета
|
||||||
@ -19,7 +20,7 @@ public interface AccountService {
|
|||||||
* @param sum Сумма оплаты
|
* @param sum Сумма оплаты
|
||||||
* @return true - в случае успешной оплаты
|
* @return true - в случае успешной оплаты
|
||||||
*/
|
*/
|
||||||
Boolean pay(Integer accountId, Integer extinguishedPersonId, Integer sum);
|
boolean pay(@NonNull Integer accountId, @NonNull Integer extinguishedPersonId, @NonNull Integer sum);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка оплаты счета
|
* Проверка оплаты счета
|
||||||
@ -27,6 +28,6 @@ public interface AccountService {
|
|||||||
* @param accountId Идентификатор счета
|
* @param accountId Идентификатор счета
|
||||||
* @return true - если счет оплачен
|
* @return true - если счет оплачен
|
||||||
*/
|
*/
|
||||||
Boolean paymentVerification(Integer accountId);
|
boolean paymentVerification(@NonNull Integer accountId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
package org.sadtech.social.core.service;
|
|
||||||
|
|
||||||
import org.sadtech.social.core.domain.content.BoardComment;
|
|
||||||
|
|
||||||
public interface BoardCommentService extends MessageService<BoardComment> {
|
|
||||||
}
|
|
@ -1,18 +1,19 @@
|
|||||||
package org.sadtech.social.core.service;
|
package org.sadtech.social.core.service;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.content.Message;
|
import org.sadtech.social.core.domain.content.Message;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Интерфейс взаимодйствия с наследниками текстовых запросов пользователей.
|
* Интерфейс взаимодйствия с наследниками текстовых сообщений пользователей.
|
||||||
*
|
*
|
||||||
* @author upagge [08/07/2019]
|
* @author upagge [08/07/2019]
|
||||||
*/
|
*/
|
||||||
public interface MessageService<T extends Message> {
|
public interface MessageService<T extends Message> {
|
||||||
|
|
||||||
void add(T event);
|
void add(@NonNull T event);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получить список сообщений за заданный временной интервал
|
* Получить список сообщений за заданный временной интервал
|
||||||
@ -21,7 +22,7 @@ public interface MessageService<T extends Message> {
|
|||||||
* @param timeTo Конец интервала
|
* @param timeTo Конец интервала
|
||||||
* @return Список сообщений
|
* @return Список сообщений
|
||||||
*/
|
*/
|
||||||
List<T> getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo);
|
List<T> getByAddDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получить список ПОСЛЕДНИХ сообщений для каждого пользователя за заданных временной интервал
|
* Получить список ПОСЛЕДНИХ сообщений для каждого пользователя за заданных временной интервал
|
||||||
@ -30,9 +31,9 @@ public interface MessageService<T extends Message> {
|
|||||||
* @param timeTo Конец интервала
|
* @param timeTo Конец интервала
|
||||||
* @return Список сообщений
|
* @return Список сообщений
|
||||||
*/
|
*/
|
||||||
List<T> getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo);
|
List<T> getLastEventByCreateDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo);
|
||||||
|
|
||||||
List<T> getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo);
|
List<T> getLastEventByAddDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает новые сообщения от последнего запроса.
|
* Возвращает новые сообщения от последнего запроса.
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.sadtech.social.core.service;
|
package org.sadtech.social.core.service;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import org.sadtech.social.core.domain.content.Message;
|
import org.sadtech.social.core.domain.content.Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11,6 +12,6 @@ import org.sadtech.social.core.domain.content.Message;
|
|||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface Modifiable<T extends Message> {
|
public interface Modifiable<T extends Message> {
|
||||||
|
|
||||||
void change(T content);
|
void change(@NonNull T content);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package org.sadtech.social.core.service.impl;
|
package org.sadtech.social.core.service.impl;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.sadtech.social.core.domain.money.Account;
|
import org.sadtech.social.core.domain.money.Account;
|
||||||
import org.sadtech.social.core.domain.money.AccountStatus;
|
import org.sadtech.social.core.domain.money.AccountStatus;
|
||||||
|
import org.sadtech.social.core.exception.AccessException;
|
||||||
|
import org.sadtech.social.core.exception.NotFoundException;
|
||||||
import org.sadtech.social.core.exception.PaymentException;
|
import org.sadtech.social.core.exception.PaymentException;
|
||||||
import org.sadtech.social.core.repository.AccountRepository;
|
import org.sadtech.social.core.repository.AccountRepository;
|
||||||
import org.sadtech.social.core.service.AccountService;
|
import org.sadtech.social.core.service.AccountService;
|
||||||
@ -13,22 +16,27 @@ public class AccountServiceImpl implements AccountService {
|
|||||||
private final AccountRepository accountRepository;
|
private final AccountRepository accountRepository;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer add(Account account) {
|
public Account add(@NonNull Account account) {
|
||||||
|
if (accountRepository.existsById(account.getId())) {
|
||||||
account.setAccountStatus(AccountStatus.EXPOSED);
|
account.setAccountStatus(AccountStatus.EXPOSED);
|
||||||
return accountRepository.add(account);
|
return accountRepository.save(account);
|
||||||
|
} else {
|
||||||
|
throw new AccessException("Счет " + account.getId() + " уже присутствует в базе");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean pay(Integer accountId, Integer extinguishedPersonId, Integer sum) {
|
public boolean pay(@NonNull Integer accountId, @NonNull Integer extinguishedPersonId, @NonNull Integer sum) {
|
||||||
Account account = accountRepository.findById(accountId);
|
Account account = accountRepository.findById(accountId)
|
||||||
|
.orElseThrow(() -> new NotFoundException("Счет " + accountId + " не найден"));
|
||||||
if (validStatus(account.getAccountStatus())) {
|
if (validStatus(account.getAccountStatus())) {
|
||||||
if (account.getTotalSum().equals(sum)) {
|
if (account.getTotalSum().equals(sum)) {
|
||||||
account.setAccountStatus(AccountStatus.CLOSED);
|
account.setAccountStatus(AccountStatus.CLOSED);
|
||||||
account.setExtinguishedPersonId(extinguishedPersonId);
|
account.setExtinguishedPersonId(extinguishedPersonId);
|
||||||
accountRepository.edit(accountId, account);
|
accountRepository.save(account);
|
||||||
} else {
|
} else {
|
||||||
account.setAccountStatus(AccountStatus.EXCEPTION);
|
account.setAccountStatus(AccountStatus.EXCEPTION);
|
||||||
accountRepository.edit(accountId, account);
|
accountRepository.save(account);
|
||||||
throw new PaymentException("Неверная сумма");
|
throw new PaymentException("Неверная сумма");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -37,12 +45,17 @@ public class AccountServiceImpl implements AccountService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validStatus(AccountStatus accountStatus) {
|
private boolean validStatus(@NonNull AccountStatus accountStatus) {
|
||||||
return AccountStatus.EXCEPTION.equals(accountStatus) || AccountStatus.EXPOSED.equals(accountStatus);
|
return AccountStatus.EXCEPTION.equals(accountStatus) || AccountStatus.EXPOSED.equals(accountStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean paymentVerification(Integer accountId) {
|
public boolean paymentVerification(@NonNull Integer accountId) {
|
||||||
return AccountStatus.CLOSED.equals(accountRepository.findById(accountId).getAccountStatus());
|
return AccountStatus.CLOSED.equals(
|
||||||
|
accountRepository.findById(accountId)
|
||||||
|
.orElseThrow(() -> new NotFoundException("Счет " + accountId + " не найден"))
|
||||||
|
.getAccountStatus()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.sadtech.social.core.domain.content.BoardComment;
|
import org.sadtech.social.core.domain.content.BoardComment;
|
||||||
import org.sadtech.social.core.repository.ContentRepository;
|
import org.sadtech.social.core.repository.ContentRepository;
|
||||||
import org.sadtech.social.core.service.BoardCommentService;
|
import org.sadtech.social.core.service.MessageService;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -14,7 +14,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class BoardCommentServiceImpl implements BoardCommentService {
|
public class BoardCommentServiceImpl implements MessageService<BoardComment> {
|
||||||
|
|
||||||
private final ContentRepository<BoardComment> commentRepository;
|
private final ContentRepository<BoardComment> commentRepository;
|
||||||
|
|
||||||
@ -25,26 +25,26 @@ public class BoardCommentServiceImpl implements BoardCommentService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BoardComment> getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<BoardComment> getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
return null;
|
throw new IllegalStateException("Не реализовано");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BoardComment> getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<BoardComment> getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
log.info("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo);
|
log.trace("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo);
|
||||||
List<BoardComment> mails = commentRepository.betweenByCreateDateTime(timeFrom, timeTo);
|
List<BoardComment> mails = commentRepository.betweenByCreateDateTime(timeFrom, timeTo);
|
||||||
return getBoardComments(mails);
|
return getBoardComments(mails);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BoardComment> getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<BoardComment> getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
log.info("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo);
|
log.trace("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo);
|
||||||
List<BoardComment> mails = commentRepository.betweenByAddDateTime(timeFrom, timeTo);
|
List<BoardComment> mails = commentRepository.betweenByAddDateTime(timeFrom, timeTo);
|
||||||
return getBoardComments(mails);
|
return getBoardComments(mails);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BoardComment> getNewMessage() {
|
public List<BoardComment> getNewMessage() {
|
||||||
return null;
|
throw new IllegalStateException("Не реализовано");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<BoardComment> getBoardComments(List<BoardComment> mails) {
|
private List<BoardComment> getBoardComments(List<BoardComment> mails) {
|
||||||
|
@ -27,18 +27,18 @@ public class MailServiceImpl implements MailService {
|
|||||||
public void add(Mail mail) {
|
public void add(Mail mail) {
|
||||||
mailRepository.add(mail);
|
mailRepository.add(mail);
|
||||||
newMessage = true;
|
newMessage = true;
|
||||||
log.info("Сообщение добавлено в репозиторий | {}", mail);
|
log.trace("Сообщение добавлено в репозиторий | {}", mail);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<Mail> getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
log.debug("Запрошены все сообщения {} - {} ", timeFrom, timeTo);
|
log.trace("Запрошены все сообщения {} - {} ", timeFrom, timeTo);
|
||||||
return mailRepository.betweenByAddDateTime(timeFrom, timeTo);
|
return mailRepository.betweenByAddDateTime(timeFrom, timeTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<Mail> getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
log.debug("Запрошены последние сообщения {} - {} ", timeFrom, timeTo);
|
log.trace("Запрошены последние сообщения {} - {} ", timeFrom, timeTo);
|
||||||
List<Mail> mails = mailRepository.betweenByCreateDateTime(timeFrom, timeTo);
|
List<Mail> mails = mailRepository.betweenByCreateDateTime(timeFrom, timeTo);
|
||||||
if (mails != null && !mails.isEmpty()) {
|
if (mails != null && !mails.isEmpty()) {
|
||||||
return getReturnMails(mails);
|
return getReturnMails(mails);
|
||||||
@ -49,7 +49,7 @@ public class MailServiceImpl implements MailService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Mail> getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
public List<Mail> getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) {
|
||||||
log.debug("Запрошены последние сообщения {} - {} ", timeFrom, timeTo);
|
log.trace("Запрошены последние сообщения {} - {} ", timeFrom, timeTo);
|
||||||
List<Mail> mails = mailRepository.betweenByAddDateTime(timeFrom, timeTo);
|
List<Mail> mails = mailRepository.betweenByAddDateTime(timeFrom, timeTo);
|
||||||
if (mails != null && !mails.isEmpty()) {
|
if (mails != null && !mails.isEmpty()) {
|
||||||
return getReturnMails(mails);
|
return getReturnMails(mails);
|
||||||
|
@ -53,4 +53,5 @@ public class EmailSending implements Sending {
|
|||||||
public SendType getType() {
|
public SendType getType() {
|
||||||
return SendType.PUBLIC;
|
return SendType.PUBLIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,10 @@ package org.sadtech.social.core.utils;
|
|||||||
*/
|
*/
|
||||||
public class ExceptionMessages {
|
public class ExceptionMessages {
|
||||||
|
|
||||||
public final static String UTILITY_CLASS = "Класс утилита";
|
public static final String UTILITY_CLASS = "Класс утилита";
|
||||||
|
|
||||||
private ExceptionMessages() {
|
private ExceptionMessages() {
|
||||||
throw new IllegalStateException(UTILITY_CLASS);
|
throw new IllegalStateException(UTILITY_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package org.sadtech.social.core.utils;
|
package org.sadtech.social.core.utils;
|
||||||
|
|
||||||
|
import lombok.NonNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для вставки слов в текстовую строку вместо подстрок - шаблонов маркеров.
|
* Класс для вставки слов в текстовую строку вместо подстрок - шаблонов маркеров.
|
||||||
*
|
*
|
||||||
@ -16,7 +16,7 @@ public class InsertWords {
|
|||||||
private static final Pattern pattern = Pattern.compile("\\{(\\d+)}");
|
private static final Pattern pattern = Pattern.compile("\\{(\\d+)}");
|
||||||
|
|
||||||
private InsertWords() {
|
private InsertWords() {
|
||||||
throw new IllegalStateException(UTILITY_CLASS);
|
throw new IllegalStateException(ExceptionMessages.UTILITY_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,7 +26,7 @@ public class InsertWords {
|
|||||||
* @param words Список слов, которые необходимо поместить вместо шаблона
|
* @param words Список слов, которые необходимо поместить вместо шаблона
|
||||||
* @return Модифицированная строка
|
* @return Модифицированная строка
|
||||||
*/
|
*/
|
||||||
public static String insert(String text, List<String> words) {
|
public static String insert(@NonNull String text, List<String> words) {
|
||||||
Matcher m = pattern.matcher(text);
|
Matcher m = pattern.matcher(text);
|
||||||
StringBuffer result = new StringBuffer();
|
StringBuffer result = new StringBuffer();
|
||||||
while (m.find()) {
|
while (m.find()) {
|
||||||
@ -39,6 +39,7 @@ public class InsertWords {
|
|||||||
m.appendTail(result);
|
m.appendTail(result);
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ package org.sadtech.social.core.utils;
|
|||||||
import org.sadtech.social.core.domain.content.EmptyMessage;
|
import org.sadtech.social.core.domain.content.EmptyMessage;
|
||||||
import org.sadtech.social.core.domain.content.Message;
|
import org.sadtech.social.core.domain.content.Message;
|
||||||
|
|
||||||
import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для хранения объекта заглушки для {@link Message}.
|
* Класс для хранения объекта заглушки для {@link Message}.
|
||||||
*
|
*
|
||||||
@ -12,11 +10,10 @@ import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS;
|
|||||||
*/
|
*/
|
||||||
public class MessageUtils {
|
public class MessageUtils {
|
||||||
|
|
||||||
private MessageUtils() {
|
|
||||||
throw new IllegalStateException(UTILITY_CLASS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final EmptyMessage EMPTY_MESSAGE = new EmptyMessage();
|
public static final EmptyMessage EMPTY_MESSAGE = new EmptyMessage();
|
||||||
|
|
||||||
|
private MessageUtils() {
|
||||||
|
throw new IllegalStateException(ExceptionMessages.UTILITY_CLASS);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,11 @@ import org.sadtech.social.core.service.sender.Sending;
|
|||||||
|
|
||||||
import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS;
|
import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Используется для отправки сообщений определенного типа.
|
||||||
|
*
|
||||||
|
* @author upagge
|
||||||
|
*/
|
||||||
public class Sender {
|
public class Sender {
|
||||||
|
|
||||||
private Sender() {
|
private Sender() {
|
||||||
|
Loading…
Reference in New Issue
Block a user