diff --git a/README.md b/README.md new file mode 100644 index 0000000..9949e10 --- /dev/null +++ b/README.md @@ -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 + +``` + + org.sadtech.social + social-bot + 0.6.3-RELEASE + +``` + diff --git a/pom.xml b/pom.xml index 030d9ff..d99aeb0 100644 --- a/pom.xml +++ b/pom.xml @@ -9,22 +9,28 @@ 0.6.3-SNAPSHOT jar - - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - - - + Social Core + + Набор классов для реализации абстрактных проектов для социальных сетей и месенджеров, без привязки к конкретным + сервисам. + + https://github.com/uPagge/social-core + + + scm:git:https://github.com/uPagge/social-core.git + https://github.com/uPagge/social-core + scm:git:https://github.com/uPagge/social-core.git + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + 2.8.5 - 1.7.29 1.4 1.18.10 2.1.3.RELEASE @@ -39,12 +45,6 @@ ${gson.ver} - - org.slf4j - slf4j-api - ${slf4j.ver} - - javax.mail mail @@ -71,13 +71,93 @@ validation-api ${validation.api.ver} - - org.springframework.boot - spring-boot-autoconfigure - 2.1.3.RELEASE - + + + release + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://oss.sonatype.org/ + true + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + uPagge @@ -87,5 +167,4 @@ - \ No newline at end of file diff --git a/src/main/java/org/sadtech/social/core/config/SocialJpaSpringConfig.java b/src/main/java/org/sadtech/social/core/config/SocialJpaSpringConfig.java deleted file mode 100644 index ebf6709..0000000 --- a/src/main/java/org/sadtech/social/core/config/SocialJpaSpringConfig.java +++ /dev/null @@ -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 { - -} diff --git a/src/main/java/org/sadtech/social/core/domain/content/Comment.java b/src/main/java/org/sadtech/social/core/domain/content/Comment.java index db00e88..e614b63 100644 --- a/src/main/java/org/sadtech/social/core/domain/content/Comment.java +++ b/src/main/java/org/sadtech/social/core/domain/content/Comment.java @@ -1,7 +1,8 @@ package org.sadtech.social.core.domain.content; -import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; import org.sadtech.social.core.utils.Description; /** @@ -9,8 +10,9 @@ import org.sadtech.social.core.utils.Description; * * @author upagge [08/07/2019] */ +@Getter +@Setter @EqualsAndHashCode(callSuper = true) -@Data public abstract class Comment extends Message { @Description("Идентификатор контента, к которому ставлено сообщение") diff --git a/src/main/java/org/sadtech/social/core/domain/content/EmptyMessage.java b/src/main/java/org/sadtech/social/core/domain/content/EmptyMessage.java index d628827..d00c8fa 100644 --- a/src/main/java/org/sadtech/social/core/domain/content/EmptyMessage.java +++ b/src/main/java/org/sadtech/social/core/domain/content/EmptyMessage.java @@ -24,4 +24,5 @@ public class EmptyMessage extends Message { public void setText(String text) { throw new AppBotException("EmptyMessage no setText"); } + } diff --git a/src/main/java/org/sadtech/social/core/domain/content/Message.java b/src/main/java/org/sadtech/social/core/domain/content/Message.java index eb3a322..012b6d8 100644 --- a/src/main/java/org/sadtech/social/core/domain/content/Message.java +++ b/src/main/java/org/sadtech/social/core/domain/content/Message.java @@ -13,7 +13,7 @@ import javax.validation.constraints.NotNull; import java.time.LocalDateTime; /** - * Аьстрактная сущность - Сообщение от пользователя. + * Абстрактная сущность - Сообщение от пользователя. * * @author upagge [08/07/2019] */ diff --git a/src/main/java/org/sadtech/social/core/domain/content/attachment/AudioMessage.java b/src/main/java/org/sadtech/social/core/domain/content/attachment/AudioMessage.java index 419fe82..a2c3f18 100644 --- a/src/main/java/org/sadtech/social/core/domain/content/attachment/AudioMessage.java +++ b/src/main/java/org/sadtech/social/core/domain/content/attachment/AudioMessage.java @@ -26,4 +26,5 @@ public class AudioMessage extends Attachment { public AudioMessage() { type = AttachmentType.AUDIO_MESSAGE; } + } diff --git a/src/main/java/org/sadtech/social/core/domain/content/attachment/GeoCoordinate.java b/src/main/java/org/sadtech/social/core/domain/content/attachment/GeoCoordinate.java index afdfada..9c1c3b5 100644 --- a/src/main/java/org/sadtech/social/core/domain/content/attachment/GeoCoordinate.java +++ b/src/main/java/org/sadtech/social/core/domain/content/attachment/GeoCoordinate.java @@ -15,6 +15,7 @@ public class GeoCoordinate { @Description("Широта") private Float latitude; + @Description("Долгота") private Float longitude; diff --git a/src/main/java/org/sadtech/social/core/domain/keyboard/KeyBoardLine.java b/src/main/java/org/sadtech/social/core/domain/keyboard/KeyBoardLine.java index 6a0867f..85677fe 100644 --- a/src/main/java/org/sadtech/social/core/domain/keyboard/KeyBoardLine.java +++ b/src/main/java/org/sadtech/social/core/domain/keyboard/KeyBoardLine.java @@ -15,10 +15,10 @@ import java.util.List; * * @author upagge [08/07/2019] */ -@Builder @Getter -@EqualsAndHashCode +@Builder @ToString +@EqualsAndHashCode public class KeyBoardLine { @Description("Кнопки в строке") diff --git a/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonAccount.java b/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonAccount.java index bb784e2..221ea0a 100644 --- a/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonAccount.java +++ b/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonAccount.java @@ -14,8 +14,8 @@ import org.sadtech.social.core.utils.Description; * @author upagge [08/07/2019] */ @Getter -@EqualsAndHashCode(callSuper = true) @ToString +@EqualsAndHashCode(callSuper = true) public class KeyBoardButtonAccount extends KeyBoardButton { @Description("Сумма к оплате") @@ -34,4 +34,5 @@ public class KeyBoardButtonAccount extends KeyBoardButton { this.accountId = accountId; this.description = description; } + } diff --git a/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonText.java b/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonText.java index 3a0fb29..428cb3a 100644 --- a/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonText.java +++ b/src/main/java/org/sadtech/social/core/domain/keyboard/button/KeyBoardButtonText.java @@ -10,8 +10,8 @@ import org.sadtech.social.core.domain.keyboard.KeyBoardButton; import org.sadtech.social.core.utils.Description; @Getter -@EqualsAndHashCode(callSuper = true) @ToString +@EqualsAndHashCode(callSuper = true) public class KeyBoardButtonText extends KeyBoardButton { @Description("Надпись на кнопке") @@ -30,4 +30,5 @@ public class KeyBoardButtonText extends KeyBoardButton { public static KeyBoardButtonText of(String label) { return KeyBoardButtonText.builder().label(label).build(); } + } diff --git a/src/main/java/org/sadtech/social/core/exception/AccessException.java b/src/main/java/org/sadtech/social/core/exception/AccessException.java index ddf55ed..16f1515 100644 --- a/src/main/java/org/sadtech/social/core/exception/AccessException.java +++ b/src/main/java/org/sadtech/social/core/exception/AccessException.java @@ -6,7 +6,9 @@ package org.sadtech.social.core.exception; * @author upagge [08/07/2019] */ public class AccessException extends AppBotException { + public AccessException(String message) { super(message); } + } diff --git a/src/main/java/org/sadtech/social/core/exception/AppBotException.java b/src/main/java/org/sadtech/social/core/exception/AppBotException.java index 4e2bb04..93d04ba 100644 --- a/src/main/java/org/sadtech/social/core/exception/AppBotException.java +++ b/src/main/java/org/sadtech/social/core/exception/AppBotException.java @@ -11,17 +11,11 @@ public class AppBotException extends RuntimeException { private static final String TYPE = "ERROR"; private final LocalDateTime timeError = LocalDateTime.now(); - protected String description; public AppBotException(String message) { super(message); } - public AppBotException(String message, String description) { - super(message); - this.description = description; - } - public String getType() { return TYPE; } @@ -30,7 +24,4 @@ public class AppBotException extends RuntimeException { return timeError; } - public String getDescription() { - return description; - } } diff --git a/src/main/java/org/sadtech/social/core/exception/ConfigAppException.java b/src/main/java/org/sadtech/social/core/exception/ConfigAppException.java index e39e11c..bdd2cca 100644 --- a/src/main/java/org/sadtech/social/core/exception/ConfigAppException.java +++ b/src/main/java/org/sadtech/social/core/exception/ConfigAppException.java @@ -6,7 +6,9 @@ package org.sadtech.social.core.exception; * @author upagge [11/07/2019] */ public class ConfigAppException extends AppBotException { + public ConfigAppException(String message) { super(message); } + } diff --git a/src/main/java/org/sadtech/social/core/repository/AccountRepository.java b/src/main/java/org/sadtech/social/core/repository/AccountRepository.java index 68386ec..7da2cc9 100644 --- a/src/main/java/org/sadtech/social/core/repository/AccountRepository.java +++ b/src/main/java/org/sadtech/social/core/repository/AccountRepository.java @@ -1,7 +1,10 @@ package org.sadtech.social.core.repository; +import lombok.NonNull; import org.sadtech.social.core.domain.money.Account; +import java.util.Optional; + /** * Репозиторий для взаимодействия с хранилищем счетов {@link Account}. * @@ -9,10 +12,10 @@ import org.sadtech.social.core.domain.money.Account; */ public interface AccountRepository { - Integer add(Account account); + Account save(@NonNull Account account); - void edit(Integer accountId, Account account); + Optional findById(@NonNull Integer accountId); - Account findById(Integer accountId); + boolean existsById(Integer id); } diff --git a/src/main/java/org/sadtech/social/core/repository/ContentRepository.java b/src/main/java/org/sadtech/social/core/repository/ContentRepository.java index 1cfc585..636afb4 100644 --- a/src/main/java/org/sadtech/social/core/repository/ContentRepository.java +++ b/src/main/java/org/sadtech/social/core/repository/ContentRepository.java @@ -1,5 +1,6 @@ package org.sadtech.social.core.repository; +import lombok.NonNull; import org.sadtech.social.core.domain.content.Message; import java.time.LocalDateTime; @@ -18,17 +19,17 @@ public interface ContentRepository { * @param content Объект сообщени * @return Идентификатор сообщения в хранилище */ - T add(T content); + T add(@NonNull T content); /** * Получить все сообщения за определенный временной диапазон * - * @param timeFrom Начало временного диапазона - * @param timeTo Конец диапазона + * @param dateFrom Начало временного диапазона + * @param dateTo Конец диапазона * @return Список сообщений */ - List betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo); + List betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo); - List betweenByAddDateTime(LocalDateTime from, LocalDateTime to); + List betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo); } diff --git a/src/main/java/org/sadtech/social/core/repository/impl/jpa/AccountRepositoryJpaImpl.java b/src/main/java/org/sadtech/social/core/repository/impl/jpa/AccountRepositoryJpaImpl.java index e1fb171..1cae137 100644 --- a/src/main/java/org/sadtech/social/core/repository/impl/jpa/AccountRepositoryJpaImpl.java +++ b/src/main/java/org/sadtech/social/core/repository/impl/jpa/AccountRepositoryJpaImpl.java @@ -1,13 +1,14 @@ package org.sadtech.social.core.repository.impl.jpa; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.sadtech.social.core.domain.money.Account; import org.sadtech.social.core.repository.AccountRepository; import org.sadtech.social.core.repository.jpa.AccountRepositoryJpa; +import java.util.Optional; + /** - * TODO: Добавить описание класса. - * * @author upagge [27/07/2019] */ @RequiredArgsConstructor @@ -16,18 +17,18 @@ public class AccountRepositoryJpaImpl implements AccountRepository { private final AccountRepositoryJpa accountRepositoryJpa; @Override - public Integer add(Account account) { - return accountRepositoryJpa.saveAndFlush(account).getId(); + public Account save(@NonNull Account account) { + return accountRepositoryJpa.save(account); } @Override - public void edit(Integer accountId, Account account) { - account.setId(accountId); - accountRepositoryJpa.saveAndFlush(account); + public Optional findById(@NonNull Integer accountId) { + return accountRepositoryJpa.findById(accountId); } @Override - public Account findById(Integer accountId) { - return accountRepositoryJpa.getOne(accountId); + public boolean existsById(Integer id) { + return accountRepositoryJpa.existsById(id); } + } diff --git a/src/main/java/org/sadtech/social/core/repository/impl/jpa/MailRepositoryJpaImpl.java b/src/main/java/org/sadtech/social/core/repository/impl/jpa/MailRepositoryJpaImpl.java index 3379725..833751f 100644 --- a/src/main/java/org/sadtech/social/core/repository/impl/jpa/MailRepositoryJpaImpl.java +++ b/src/main/java/org/sadtech/social/core/repository/impl/jpa/MailRepositoryJpaImpl.java @@ -1,5 +1,6 @@ package org.sadtech.social.core.repository.impl.jpa; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.sadtech.social.core.domain.content.Mail; import org.sadtech.social.core.repository.ContentRepository; @@ -19,18 +20,18 @@ public class MailRepositoryJpaImpl implements ContentRepository { private final MailRepositoryJpa mailRepositoryJpa; @Override - public Mail add(Mail content) { + public Mail add(@NonNull Mail content) { return mailRepositoryJpa.saveAndFlush(content); } @Override - public List betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - return mailRepositoryJpa.findByCreateDateBetween(timeFrom, timeTo); + public List betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) { + return mailRepositoryJpa.findByCreateDateBetween(dateFrom, dateTo); } @Override - public List betweenByAddDateTime(LocalDateTime from, LocalDateTime to) { - return mailRepositoryJpa.findByAddDateBetween(from, to); + public List betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) { + return mailRepositoryJpa.findByAddDateBetween(dateFrom, dateTo); } } diff --git a/src/main/java/org/sadtech/social/core/repository/impl/local/AccountRepositoryMap.java b/src/main/java/org/sadtech/social/core/repository/impl/local/AccountRepositoryMap.java index d495aa6..3cabae2 100644 --- a/src/main/java/org/sadtech/social/core/repository/impl/local/AccountRepositoryMap.java +++ b/src/main/java/org/sadtech/social/core/repository/impl/local/AccountRepositoryMap.java @@ -1,9 +1,7 @@ package org.sadtech.social.core.repository.impl.local; +import lombok.NonNull; 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 java.util.HashMap; @@ -13,36 +11,25 @@ import java.util.Optional; public class AccountRepositoryMap implements AccountRepository { private final Map saveMap = new HashMap<>(); - private Integer id = 1; + private int id = 1; @Override - public Integer add(Account account) { - if (check(account.getId())) { + public Account save(@NonNull Account account) { + if (existsById(account.getId())) { account.setId(id); - saveMap.put(id, account); - return id++; + return saveMap.put(id++, account); } else { - throw new AccessException("Счет " + account.getId() + " уже существует"); - } - - } - - @Override - public void edit(Integer accountId, Account account) { - if (check(id)) { - account.setId(accountId); - saveMap.put(accountId, account); - } else { - throw new NotFoundException("Счет " + accountId + " не найден"); + return saveMap.put(id, account); } } @Override - public Account findById(Integer accountId) { - return Optional.ofNullable(saveMap.get(accountId)).orElseThrow(() -> new PaymentException("Счет " + accountId + " не найден")); + public Optional findById(@NonNull Integer accountId) { + return Optional.ofNullable(saveMap.get(accountId)); } - private boolean check(Integer id) { + public boolean existsById(Integer id) { return !saveMap.containsKey(id); } + } diff --git a/src/main/java/org/sadtech/social/core/repository/impl/local/BoardCommentRepositoryMap.java b/src/main/java/org/sadtech/social/core/repository/impl/local/BoardCommentRepositoryMap.java deleted file mode 100644 index 3a97de7..0000000 --- a/src/main/java/org/sadtech/social/core/repository/impl/local/BoardCommentRepositoryMap.java +++ /dev/null @@ -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 { - - private final Map 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 betweenByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - ArrayList 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 betweenByAddDateTime(LocalDateTime from, LocalDateTime to) { - ArrayList 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; - } - -} diff --git a/src/main/java/org/sadtech/social/core/repository/impl/local/MailRepositoryList.java b/src/main/java/org/sadtech/social/core/repository/impl/local/MailRepositoryList.java index b3aaf2f..3dd9d6f 100644 --- a/src/main/java/org/sadtech/social/core/repository/impl/local/MailRepositoryList.java +++ b/src/main/java/org/sadtech/social/core/repository/impl/local/MailRepositoryList.java @@ -1,5 +1,6 @@ package org.sadtech.social.core.repository.impl.local; +import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.sadtech.social.core.domain.content.Mail; import org.sadtech.social.core.repository.ContentRepository; @@ -27,13 +28,13 @@ public class MailRepositoryList implements ContentRepository { } @Override - public List betweenByCreateDateTime(LocalDateTime from, LocalDateTime to) { + public List betweenByCreateDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) { ArrayList rezultMails = new ArrayList<>(); for (int i = mails.size() - 1; i >= 0; i--) { Mail mail = mails.get(i); - if (isTimePeriod(from, to, mail.getAddDate())) { + if (isTimePeriod(dateFrom, dateTo, mail.getAddDate())) { rezultMails.add(mail); - } else if (mail.getCreateDate().isBefore(from)) { + } else if (mail.getCreateDate().isBefore(dateFrom)) { break; } } @@ -41,22 +42,22 @@ public class MailRepositoryList implements ContentRepository { } @Override - public List betweenByAddDateTime(LocalDateTime from, LocalDateTime to) { + public List betweenByAddDateTime(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo) { ArrayList rezultMails = new ArrayList<>(); for (int i = mails.size() - 1; i >= 0; i--) { Mail mail = mails.get(i); LocalDateTime addDate = mail.getAddDate(); - if (isTimePeriod(from, to, addDate)) { + if (isTimePeriod(dateFrom, dateTo, addDate)) { rezultMails.add(mail); - } else if (addDate.isBefore(from)) { + } else if (addDate.isBefore(dateFrom)) { break; } } return rezultMails; } - private boolean isTimePeriod(LocalDateTime from, LocalDateTime to, LocalDateTime dateTime) { - return from.isBefore(dateTime) && to.isAfter(dateTime); + private boolean isTimePeriod(@NonNull LocalDateTime dateFrom, @NonNull LocalDateTime dateTo, @NonNull LocalDateTime dateTime) { + return dateFrom.isBefore(dateTime) && dateTo.isAfter(dateTime); } diff --git a/src/main/java/org/sadtech/social/core/repository/jpa/AccountRepositoryJpa.java b/src/main/java/org/sadtech/social/core/repository/jpa/AccountRepositoryJpa.java index b1e08e2..919ea31 100644 --- a/src/main/java/org/sadtech/social/core/repository/jpa/AccountRepositoryJpa.java +++ b/src/main/java/org/sadtech/social/core/repository/jpa/AccountRepositoryJpa.java @@ -5,8 +5,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** - * TODO: Добавить описание интерфейса. - * * @author upagge [27/07/2019] */ @Repository diff --git a/src/main/java/org/sadtech/social/core/repository/jpa/MailRepositoryJpa.java b/src/main/java/org/sadtech/social/core/repository/jpa/MailRepositoryJpa.java index 57b6715..dc93f80 100644 --- a/src/main/java/org/sadtech/social/core/repository/jpa/MailRepositoryJpa.java +++ b/src/main/java/org/sadtech/social/core/repository/jpa/MailRepositoryJpa.java @@ -1,6 +1,7 @@ package org.sadtech.social.core.repository.jpa; 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.stereotype.Repository; @@ -9,7 +10,7 @@ import java.util.List; /** * Интерфейс JPA репозитория для сущности {@link Mail}. При этом сам не является репозиторием, а подставляется в - * {@link org.sadtech.social.core.repository.impl.jpa.MailRepositoryJpaImpl} + * {@link MailRepositoryJpaImpl} * * @author upagge [27/07/2019] */ diff --git a/src/main/java/org/sadtech/social/core/service/AccountService.java b/src/main/java/org/sadtech/social/core/service/AccountService.java index f6594de..f840405 100644 --- a/src/main/java/org/sadtech/social/core/service/AccountService.java +++ b/src/main/java/org/sadtech/social/core/service/AccountService.java @@ -1,5 +1,6 @@ package org.sadtech.social.core.service; +import lombok.NonNull; import org.sadtech.social.core.domain.money.Account; /** @@ -9,7 +10,7 @@ import org.sadtech.social.core.domain.money.Account; */ public interface AccountService { - Integer add(Account account); + Account add(@NonNull Account account); /** * Метод для оплаты счета @@ -19,7 +20,7 @@ public interface AccountService { * @param sum Сумма оплаты * @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 Идентификатор счета * @return true - если счет оплачен */ - Boolean paymentVerification(Integer accountId); + boolean paymentVerification(@NonNull Integer accountId); } diff --git a/src/main/java/org/sadtech/social/core/service/BoardCommentService.java b/src/main/java/org/sadtech/social/core/service/BoardCommentService.java deleted file mode 100644 index ad0800f..0000000 --- a/src/main/java/org/sadtech/social/core/service/BoardCommentService.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.sadtech.social.core.service; - -import org.sadtech.social.core.domain.content.BoardComment; - -public interface BoardCommentService extends MessageService { -} diff --git a/src/main/java/org/sadtech/social/core/service/MessageService.java b/src/main/java/org/sadtech/social/core/service/MessageService.java index faf5125..9ed2deb 100644 --- a/src/main/java/org/sadtech/social/core/service/MessageService.java +++ b/src/main/java/org/sadtech/social/core/service/MessageService.java @@ -1,18 +1,19 @@ package org.sadtech.social.core.service; +import lombok.NonNull; import org.sadtech.social.core.domain.content.Message; import java.time.LocalDateTime; import java.util.List; /** - * Интерфейс взаимодйствия с наследниками текстовых запросов пользователей. + * Интерфейс взаимодйствия с наследниками текстовых сообщений пользователей. * * @author upagge [08/07/2019] */ public interface MessageService { - void add(T event); + void add(@NonNull T event); /** * Получить список сообщений за заданный временной интервал @@ -21,7 +22,7 @@ public interface MessageService { * @param timeTo Конец интервала * @return Список сообщений */ - List getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo); + List getByAddDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo); /** * Получить список ПОСЛЕДНИХ сообщений для каждого пользователя за заданных временной интервал @@ -30,9 +31,9 @@ public interface MessageService { * @param timeTo Конец интервала * @return Список сообщений */ - List getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo); + List getLastEventByCreateDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo); - List getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo); + List getLastEventByAddDateTime(@NonNull LocalDateTime timeFrom, @NonNull LocalDateTime timeTo); /** * Возвращает новые сообщения от последнего запроса. diff --git a/src/main/java/org/sadtech/social/core/service/Modifiable.java b/src/main/java/org/sadtech/social/core/service/Modifiable.java index b60caec..dc52b10 100644 --- a/src/main/java/org/sadtech/social/core/service/Modifiable.java +++ b/src/main/java/org/sadtech/social/core/service/Modifiable.java @@ -1,5 +1,6 @@ package org.sadtech.social.core.service; +import lombok.NonNull; import org.sadtech.social.core.domain.content.Message; /** @@ -11,6 +12,6 @@ import org.sadtech.social.core.domain.content.Message; @FunctionalInterface public interface Modifiable { - void change(T content); + void change(@NonNull T content); } diff --git a/src/main/java/org/sadtech/social/core/service/impl/AccountServiceImpl.java b/src/main/java/org/sadtech/social/core/service/impl/AccountServiceImpl.java index 0789326..c291aae 100644 --- a/src/main/java/org/sadtech/social/core/service/impl/AccountServiceImpl.java +++ b/src/main/java/org/sadtech/social/core/service/impl/AccountServiceImpl.java @@ -1,8 +1,11 @@ package org.sadtech.social.core.service.impl; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.sadtech.social.core.domain.money.Account; 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.repository.AccountRepository; import org.sadtech.social.core.service.AccountService; @@ -13,22 +16,27 @@ public class AccountServiceImpl implements AccountService { private final AccountRepository accountRepository; @Override - public Integer add(Account account) { - account.setAccountStatus(AccountStatus.EXPOSED); - return accountRepository.add(account); + public Account add(@NonNull Account account) { + if (accountRepository.existsById(account.getId())) { + account.setAccountStatus(AccountStatus.EXPOSED); + return accountRepository.save(account); + } else { + throw new AccessException("Счет " + account.getId() + " уже присутствует в базе"); + } } @Override - public Boolean pay(Integer accountId, Integer extinguishedPersonId, Integer sum) { - Account account = accountRepository.findById(accountId); + public boolean pay(@NonNull Integer accountId, @NonNull Integer extinguishedPersonId, @NonNull Integer sum) { + Account account = accountRepository.findById(accountId) + .orElseThrow(() -> new NotFoundException("Счет " + accountId + " не найден")); if (validStatus(account.getAccountStatus())) { if (account.getTotalSum().equals(sum)) { account.setAccountStatus(AccountStatus.CLOSED); account.setExtinguishedPersonId(extinguishedPersonId); - accountRepository.edit(accountId, account); + accountRepository.save(account); } else { account.setAccountStatus(AccountStatus.EXCEPTION); - accountRepository.edit(accountId, account); + accountRepository.save(account); throw new PaymentException("Неверная сумма"); } } else { @@ -37,12 +45,17 @@ public class AccountServiceImpl implements AccountService { return true; } - private boolean validStatus(AccountStatus accountStatus) { + private boolean validStatus(@NonNull AccountStatus accountStatus) { return AccountStatus.EXCEPTION.equals(accountStatus) || AccountStatus.EXPOSED.equals(accountStatus); } @Override - public Boolean paymentVerification(Integer accountId) { - return AccountStatus.CLOSED.equals(accountRepository.findById(accountId).getAccountStatus()); + public boolean paymentVerification(@NonNull Integer accountId) { + return AccountStatus.CLOSED.equals( + accountRepository.findById(accountId) + .orElseThrow(() -> new NotFoundException("Счет " + accountId + " не найден")) + .getAccountStatus() + ); } + } diff --git a/src/main/java/org/sadtech/social/core/service/impl/BoardCommentServiceImpl.java b/src/main/java/org/sadtech/social/core/service/impl/BoardCommentServiceImpl.java index 1d98beb..cdede63 100644 --- a/src/main/java/org/sadtech/social/core/service/impl/BoardCommentServiceImpl.java +++ b/src/main/java/org/sadtech/social/core/service/impl/BoardCommentServiceImpl.java @@ -4,7 +4,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.sadtech.social.core.domain.content.BoardComment; 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.util.ArrayList; @@ -14,7 +14,7 @@ import java.util.Set; @Slf4j @RequiredArgsConstructor -public class BoardCommentServiceImpl implements BoardCommentService { +public class BoardCommentServiceImpl implements MessageService { private final ContentRepository commentRepository; @@ -25,26 +25,26 @@ public class BoardCommentServiceImpl implements BoardCommentService { @Override public List getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - return null; + throw new IllegalStateException("Не реализовано"); } @Override public List getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.info("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo); + log.trace("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo); List mails = commentRepository.betweenByCreateDateTime(timeFrom, timeTo); return getBoardComments(mails); } @Override public List getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.info("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo); + log.trace("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo); List mails = commentRepository.betweenByAddDateTime(timeFrom, timeTo); return getBoardComments(mails); } @Override public List getNewMessage() { - return null; + throw new IllegalStateException("Не реализовано"); } private List getBoardComments(List mails) { diff --git a/src/main/java/org/sadtech/social/core/service/impl/MailServiceImpl.java b/src/main/java/org/sadtech/social/core/service/impl/MailServiceImpl.java index 74ddf72..e62e4ee 100644 --- a/src/main/java/org/sadtech/social/core/service/impl/MailServiceImpl.java +++ b/src/main/java/org/sadtech/social/core/service/impl/MailServiceImpl.java @@ -27,18 +27,18 @@ public class MailServiceImpl implements MailService { public void add(Mail mail) { mailRepository.add(mail); newMessage = true; - log.info("Сообщение добавлено в репозиторий | {}", mail); + log.trace("Сообщение добавлено в репозиторий | {}", mail); } @Override public List getByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.debug("Запрошены все сообщения {} - {} ", timeFrom, timeTo); + log.trace("Запрошены все сообщения {} - {} ", timeFrom, timeTo); return mailRepository.betweenByAddDateTime(timeFrom, timeTo); } @Override public List getLastEventByCreateDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.debug("Запрошены последние сообщения {} - {} ", timeFrom, timeTo); + log.trace("Запрошены последние сообщения {} - {} ", timeFrom, timeTo); List mails = mailRepository.betweenByCreateDateTime(timeFrom, timeTo); if (mails != null && !mails.isEmpty()) { return getReturnMails(mails); @@ -49,7 +49,7 @@ public class MailServiceImpl implements MailService { @Override public List getLastEventByAddDateTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.debug("Запрошены последние сообщения {} - {} ", timeFrom, timeTo); + log.trace("Запрошены последние сообщения {} - {} ", timeFrom, timeTo); List mails = mailRepository.betweenByAddDateTime(timeFrom, timeTo); if (mails != null && !mails.isEmpty()) { return getReturnMails(mails); diff --git a/src/main/java/org/sadtech/social/core/service/sender/email/EmailSending.java b/src/main/java/org/sadtech/social/core/service/sender/email/EmailSending.java index 324dec2..94c2bc0 100644 --- a/src/main/java/org/sadtech/social/core/service/sender/email/EmailSending.java +++ b/src/main/java/org/sadtech/social/core/service/sender/email/EmailSending.java @@ -53,4 +53,5 @@ public class EmailSending implements Sending { public SendType getType() { return SendType.PUBLIC; } + } diff --git a/src/main/java/org/sadtech/social/core/utils/ExceptionMessages.java b/src/main/java/org/sadtech/social/core/utils/ExceptionMessages.java index c7d0f87..4e29891 100644 --- a/src/main/java/org/sadtech/social/core/utils/ExceptionMessages.java +++ b/src/main/java/org/sadtech/social/core/utils/ExceptionMessages.java @@ -7,9 +7,10 @@ package org.sadtech.social.core.utils; */ public class ExceptionMessages { - public final static String UTILITY_CLASS = "Класс утилита"; + public static final String UTILITY_CLASS = "Класс утилита"; private ExceptionMessages() { throw new IllegalStateException(UTILITY_CLASS); } + } diff --git a/src/main/java/org/sadtech/social/core/utils/InsertWords.java b/src/main/java/org/sadtech/social/core/utils/InsertWords.java index 35c8c87..7b8a954 100644 --- a/src/main/java/org/sadtech/social/core/utils/InsertWords.java +++ b/src/main/java/org/sadtech/social/core/utils/InsertWords.java @@ -1,11 +1,11 @@ package org.sadtech.social.core.utils; +import lombok.NonNull; + import java.util.List; import java.util.regex.Matcher; 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 InsertWords() { - throw new IllegalStateException(UTILITY_CLASS); + throw new IllegalStateException(ExceptionMessages.UTILITY_CLASS); } /** @@ -26,7 +26,7 @@ public class InsertWords { * @param words Список слов, которые необходимо поместить вместо шаблона * @return Модифицированная строка */ - public static String insert(String text, List words) { + public static String insert(@NonNull String text, List words) { Matcher m = pattern.matcher(text); StringBuffer result = new StringBuffer(); while (m.find()) { @@ -39,6 +39,7 @@ public class InsertWords { m.appendTail(result); return result.toString(); } + } diff --git a/src/main/java/org/sadtech/social/core/utils/MessageUtils.java b/src/main/java/org/sadtech/social/core/utils/MessageUtils.java index eacd1c7..fe02569 100644 --- a/src/main/java/org/sadtech/social/core/utils/MessageUtils.java +++ b/src/main/java/org/sadtech/social/core/utils/MessageUtils.java @@ -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.Message; -import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS; - /** * Класс для хранения объекта заглушки для {@link Message}. * @@ -12,11 +10,10 @@ import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS; */ public class MessageUtils { - private MessageUtils() { - throw new IllegalStateException(UTILITY_CLASS); - } - public static final EmptyMessage EMPTY_MESSAGE = new EmptyMessage(); + private MessageUtils() { + throw new IllegalStateException(ExceptionMessages.UTILITY_CLASS); + } } diff --git a/src/main/java/org/sadtech/social/core/utils/Sender.java b/src/main/java/org/sadtech/social/core/utils/Sender.java index 8d19c51..758888f 100644 --- a/src/main/java/org/sadtech/social/core/utils/Sender.java +++ b/src/main/java/org/sadtech/social/core/utils/Sender.java @@ -7,6 +7,11 @@ import org.sadtech.social.core.service.sender.Sending; import static org.sadtech.social.core.utils.ExceptionMessages.UTILITY_CLASS; +/** + * Используется для отправки сообщений определенного типа. + * + * @author upagge + */ public class Sender { private Sender() {