diff --git a/pom.xml b/pom.xml index 60d7819..bc9a476 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.sadtech.bot bot-core - 0.6.1-RELEASE + 0.6.2-SNAPSHOT jar diff --git a/src/main/java/org/sadtech/bot/core/domain/content/BoardComment.java b/src/main/java/org/sadtech/bot/core/domain/content/BoardComment.java new file mode 100644 index 0000000..123619a --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/domain/content/BoardComment.java @@ -0,0 +1,41 @@ +package org.sadtech.bot.core.domain.content; + +import java.util.Objects; + +public class BoardComment extends Content { + + private Integer topicId; + + public BoardComment() { + type = ContentType.BOARD_COMMENT; + } + + public Integer getTopicId() { + return topicId; + } + + public void setTopicId(Integer topicId) { + this.topicId = topicId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof BoardComment)) return false; + if (!super.equals(o)) return false; + BoardComment that = (BoardComment) o; + return Objects.equals(topicId, that.topicId); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), topicId); + } + + @Override + public String toString() { + return "BoardComment{" + + "topicId=" + topicId + + "} " + super.toString(); + } +} diff --git a/src/main/java/org/sadtech/bot/core/domain/content/Content.java b/src/main/java/org/sadtech/bot/core/domain/content/Content.java index 5e0c5b3..0ca99f2 100644 --- a/src/main/java/org/sadtech/bot/core/domain/content/Content.java +++ b/src/main/java/org/sadtech/bot/core/domain/content/Content.java @@ -1,9 +1,13 @@ package org.sadtech.bot.core.domain.content; +import java.time.LocalDateTime; import java.util.Objects; public abstract class Content { + private Integer id; + protected ContentType type; + private LocalDateTime createDate; private Integer personId; private String message; @@ -14,6 +18,9 @@ public abstract class Content { public Content(Content source) { this.personId = source.getPersonId(); this.message = source.getMessage(); + this.createDate = source.getCreateDate(); + this.id = source.getPersonId(); + this.type = source.getType(); } public Integer getPersonId() { @@ -32,17 +39,55 @@ public abstract class Content { this.message = message; } + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public LocalDateTime getCreateDate() { + return createDate; + } + + public void setCreateDate(LocalDateTime createDate) { + this.createDate = createDate; + } + + public ContentType getType() { + return type; + } + + public void setType(ContentType type) { + this.type = type; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Content)) return false; Content content = (Content) o; - return Objects.equals(personId, content.personId) && + return Objects.equals(id, content.id) && + type == content.type && + Objects.equals(createDate, content.createDate) && + Objects.equals(personId, content.personId) && Objects.equals(message, content.message); } @Override public int hashCode() { - return Objects.hash(personId, message); + return Objects.hash(id, type, createDate, personId, message); + } + + @Override + public String toString() { + return "Content{" + + "id=" + id + + ", type=" + type + + ", createDate=" + createDate + + ", personId=" + personId + + ", message='" + message + '\'' + + '}'; } } diff --git a/src/main/java/org/sadtech/bot/core/domain/content/ContentType.java b/src/main/java/org/sadtech/bot/core/domain/content/ContentType.java new file mode 100644 index 0000000..e6a9443 --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/domain/content/ContentType.java @@ -0,0 +1,7 @@ +package org.sadtech.bot.core.domain.content; + +public enum ContentType { + + MAIL, BOARD_COMMENT + +} diff --git a/src/main/java/org/sadtech/bot/core/domain/content/Mail.java b/src/main/java/org/sadtech/bot/core/domain/content/Mail.java index 0e4e720..6fa86d1 100644 --- a/src/main/java/org/sadtech/bot/core/domain/content/Mail.java +++ b/src/main/java/org/sadtech/bot/core/domain/content/Mail.java @@ -2,40 +2,21 @@ package org.sadtech.bot.core.domain.content; import org.sadtech.bot.core.domain.content.attachment.Attachment; -import java.time.LocalDateTime; import java.util.List; import java.util.Objects; public class Mail extends Content { - private Integer id; - private LocalDateTime date; private List attachments; - public Mail() { + public Mail() { + type = ContentType.MAIL; } public Mail(Mail source) { super(source); - this.id = source.getId(); - this.date = source.getDate(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public LocalDateTime getDate() { - return date; - } - - public void setDate(LocalDateTime date) { - this.date = date; + this.attachments = source.getAttachments(); } @@ -57,22 +38,18 @@ public class Mail extends Content { if (!(o instanceof Mail)) return false; if (!super.equals(o)) return false; Mail mail = (Mail) o; - return Objects.equals(id, mail.id) && - Objects.equals(date, mail.date) && - Objects.equals(attachments, mail.attachments); + return Objects.equals(attachments, mail.attachments); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), id, date, attachments); + return Objects.hash(super.hashCode(), attachments); } @Override public String toString() { return "Mail{" + - "id=" + id + - ", date=" + date + - ", attachments=" + attachments + - '}'; + "attachments=" + attachments + + "} " + super.toString(); } } diff --git a/src/main/java/org/sadtech/bot/core/repository/ContentRepository.java b/src/main/java/org/sadtech/bot/core/repository/ContentRepository.java new file mode 100644 index 0000000..91a800a --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/repository/ContentRepository.java @@ -0,0 +1,14 @@ +package org.sadtech.bot.core.repository; + +import org.sadtech.bot.core.domain.content.Content; + +import java.time.LocalDateTime; +import java.util.List; + +public interface ContentRepository { + + Integer add(T content); + + List findByTime(LocalDateTime timeFrom, LocalDateTime timeTo); + +} diff --git a/src/main/java/org/sadtech/bot/core/repository/MailRepository.java b/src/main/java/org/sadtech/bot/core/repository/MailRepository.java deleted file mode 100644 index f68576b..0000000 --- a/src/main/java/org/sadtech/bot/core/repository/MailRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.sadtech.bot.core.repository; - -import org.sadtech.bot.core.domain.content.Mail; - -import java.time.LocalDateTime; -import java.util.List; - -public interface MailRepository { - - void add(Mail mail); - - List getMailByTime(LocalDateTime timeFrom, LocalDateTime timeTo); - -} diff --git a/src/main/java/org/sadtech/bot/core/repository/impl/BoardCommentRepositoryMap.java b/src/main/java/org/sadtech/bot/core/repository/impl/BoardCommentRepositoryMap.java new file mode 100644 index 0000000..f3e443c --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/repository/impl/BoardCommentRepositoryMap.java @@ -0,0 +1,36 @@ +package org.sadtech.bot.core.repository.impl; + +import org.sadtech.bot.core.domain.content.BoardComment; +import org.sadtech.bot.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 Integer count = 0; + + @Override + public Integer add(BoardComment comment) { + comment.setId(count); + saveMap.put(count, comment); + return count++; + } + + @Override + public List findByTime(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; + } +} diff --git a/src/main/java/org/sadtech/bot/core/repository/impl/MailRepositoryList.java b/src/main/java/org/sadtech/bot/core/repository/impl/MailRepositoryList.java index d0247d4..480aa83 100644 --- a/src/main/java/org/sadtech/bot/core/repository/impl/MailRepositoryList.java +++ b/src/main/java/org/sadtech/bot/core/repository/impl/MailRepositoryList.java @@ -1,40 +1,30 @@ package org.sadtech.bot.core.repository.impl; import org.sadtech.bot.core.domain.content.Mail; -import org.sadtech.bot.core.repository.EventRepository; -import org.sadtech.bot.core.repository.MailRepository; +import org.sadtech.bot.core.repository.ContentRepository; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; -public class MailRepositoryList implements EventRepository, MailRepository { +public class MailRepositoryList implements ContentRepository { private final List mails = new ArrayList<>(); @Override - public void add(Mail mail) { + public Integer add(Mail mail) { mails.add(mail); + return mails.size() - 1; } + @Override - public void cleanAll() { - mails.clear(); - } - - @Override - public Queue getEventQueue() { - return new ConcurrentLinkedQueue<>(mails); - } - - public List getMailByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { + public List findByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { ArrayList rezultMails = new ArrayList<>(); for (int i = mails.size() - 1; i >= 0; i--) { - if (!(mails.get(i).getDate().isBefore(timeFrom) || mails.get(i).getDate().isAfter(timeTo)) && mails.get(i).getDate().equals(timeFrom)) { + if (!(mails.get(i).getCreateDate().isBefore(timeFrom) || mails.get(i).getCreateDate().isAfter(timeTo)) && mails.get(i).getCreateDate().equals(timeFrom)) { rezultMails.add(this.mails.get(i)); - } else if (mails.get(i).getDate().isBefore(timeFrom)) { + } else if (mails.get(i).getCreateDate().isBefore(timeFrom)) { break; } } diff --git a/src/main/java/org/sadtech/bot/core/service/BoardCommentService.java b/src/main/java/org/sadtech/bot/core/service/BoardCommentService.java new file mode 100644 index 0000000..7383614 --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/service/BoardCommentService.java @@ -0,0 +1,6 @@ +package org.sadtech.bot.core.service; + +import org.sadtech.bot.core.domain.content.BoardComment; + +public interface BoardCommentService extends ContentService { +} diff --git a/src/main/java/org/sadtech/bot/core/service/EventService.java b/src/main/java/org/sadtech/bot/core/service/ContentService.java similarity index 56% rename from src/main/java/org/sadtech/bot/core/service/EventService.java rename to src/main/java/org/sadtech/bot/core/service/ContentService.java index 9527c4e..92ccab9 100644 --- a/src/main/java/org/sadtech/bot/core/service/EventService.java +++ b/src/main/java/org/sadtech/bot/core/service/ContentService.java @@ -5,13 +5,11 @@ import org.sadtech.bot.core.domain.content.Content; import java.time.LocalDateTime; import java.util.List; -public interface EventService { +public interface ContentService { void add(T event); - List getEvent(LocalDateTime timeFrom, LocalDateTime timeTo); - - List getFirstEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo); + List getByTime(LocalDateTime timeFrom, LocalDateTime timeTo); List getLastEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo); diff --git a/src/main/java/org/sadtech/bot/core/service/MailService.java b/src/main/java/org/sadtech/bot/core/service/MailService.java index c461d2f..4a4fbf1 100644 --- a/src/main/java/org/sadtech/bot/core/service/MailService.java +++ b/src/main/java/org/sadtech/bot/core/service/MailService.java @@ -2,6 +2,6 @@ package org.sadtech.bot.core.service; import org.sadtech.bot.core.domain.content.Mail; -public interface MailService extends EventService { +public interface MailService extends ContentService { } diff --git a/src/main/java/org/sadtech/bot/core/service/impl/BoardCommentServiceImpl.java b/src/main/java/org/sadtech/bot/core/service/impl/BoardCommentServiceImpl.java new file mode 100644 index 0000000..d4b7d3d --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/service/impl/BoardCommentServiceImpl.java @@ -0,0 +1,49 @@ +package org.sadtech.bot.core.service.impl; + +import org.sadtech.bot.core.domain.content.BoardComment; +import org.sadtech.bot.core.repository.ContentRepository; +import org.sadtech.bot.core.service.BoardCommentService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class BoardCommentServiceImpl implements BoardCommentService { + + private static final Logger log = LoggerFactory.getLogger(BoardCommentServiceImpl.class); + + private final ContentRepository commentRepository; + + public BoardCommentServiceImpl(ContentRepository commentRepository) { + this.commentRepository = commentRepository; + } + + @Override + public void add(BoardComment event) { + commentRepository.add(event); + } + + @Override + public List getByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { + return null; + } + + @Override + public List getLastEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { + log.info("Запрошены последние комментарии к обсуждению {} - {} ", timeFrom, timeTo); + List mails = commentRepository.findByTime(timeFrom, timeTo); + Set people = new HashSet<>(); + List returnMails = new ArrayList<>(); + for (int i = mails.size() - 1; i >= 0; i--) { + if (!people.contains(mails.get(i).getPersonId())) { + returnMails.add(mails.get(i)); + people.add(mails.get(i).getPersonId()); + } + } + return returnMails; + } +} diff --git a/src/main/java/org/sadtech/bot/core/service/impl/MailServiceImpl.java b/src/main/java/org/sadtech/bot/core/service/impl/MailServiceImpl.java index cbc20c2..18554b4 100644 --- a/src/main/java/org/sadtech/bot/core/service/impl/MailServiceImpl.java +++ b/src/main/java/org/sadtech/bot/core/service/impl/MailServiceImpl.java @@ -1,7 +1,7 @@ package org.sadtech.bot.core.service.impl; import org.sadtech.bot.core.domain.content.Mail; -import org.sadtech.bot.core.repository.MailRepository; +import org.sadtech.bot.core.repository.ContentRepository; import org.sadtech.bot.core.service.MailService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,9 +16,9 @@ public class MailServiceImpl implements MailService { private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class); - private final MailRepository mailRepository; + private final ContentRepository mailRepository; - public MailServiceImpl(MailRepository mailRepository) { + public MailServiceImpl(ContentRepository mailRepository) { this.mailRepository = mailRepository; } @@ -29,9 +29,9 @@ public class MailServiceImpl implements MailService { } @Override - public List getFirstEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.info("Запрошены сообщения {} - {} ", timeFrom, timeTo); - List mails = mailRepository.getMailByTime(timeFrom, timeTo); + public List getLastEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { + log.info("Запрошены последние сообщения {} - {} ", timeFrom, timeTo); + List mails = mailRepository.findByTime(timeFrom, timeTo); Set people = new HashSet<>(); List returnMails = new ArrayList<>(); for (int i = mails.size() - 1; i >= 0; i--) { @@ -44,23 +44,9 @@ public class MailServiceImpl implements MailService { } @Override - public List getLastEventByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { - List mails = mailRepository.getMailByTime(timeFrom, timeTo); - Set people = new HashSet<>(); - List returnMails = new ArrayList<>(); - for (Mail mail : mails) { - if (!people.contains(mail.getPersonId())) { - returnMails.add(mail); - people.add(mail.getPersonId()); - } - } - return returnMails; - } - - @Override - public List getEvent(LocalDateTime timeFrom, LocalDateTime timeTo) { - log.info("Запрошены сообщения {} - {} ", timeFrom, timeTo); - return mailRepository.getMailByTime(timeFrom, timeTo); + public List getByTime(LocalDateTime timeFrom, LocalDateTime timeTo) { + log.info("Запрошены все сообщения {} - {} ", timeFrom, timeTo); + return mailRepository.findByTime(timeFrom, timeTo); } } diff --git a/src/main/java/org/sadtech/bot/core/service/sender/SenderBox.java b/src/main/java/org/sadtech/bot/core/service/sender/SenderBox.java new file mode 100644 index 0000000..a5a9769 --- /dev/null +++ b/src/main/java/org/sadtech/bot/core/service/sender/SenderBox.java @@ -0,0 +1,27 @@ +package org.sadtech.bot.core.service.sender; + +import org.sadtech.bot.core.domain.BoxAnswer; +import org.sadtech.bot.core.domain.content.BoardComment; +import org.sadtech.bot.core.domain.content.Content; +import org.sadtech.bot.core.exception.MailSendException; + +public class SenderBox { + + private SenderBox() { + throw new IllegalStateException("Utility Class"); + } + + public static void sent(Sent sent, Content content, BoxAnswer boxAnswer) { + switch (content.getType()) { + case MAIL: + sent.send(content.getPersonId(), boxAnswer); + break; + case BOARD_COMMENT: + sent.send(((BoardComment) content).getTopicId(), content.getPersonId(), boxAnswer); + break; + default: + throw new MailSendException(); + } + } + +} diff --git a/src/main/java/org/sadtech/bot/core/service/sender/Sent.java b/src/main/java/org/sadtech/bot/core/service/sender/Sent.java index afab375..2f7a266 100644 --- a/src/main/java/org/sadtech/bot/core/service/sender/Sent.java +++ b/src/main/java/org/sadtech/bot/core/service/sender/Sent.java @@ -4,8 +4,8 @@ import org.sadtech.bot.core.domain.BoxAnswer; public interface Sent { - void send(Integer personId, String message); - void send(Integer personId, BoxAnswer boxAnswer); + void send(Integer contentId, Integer personId, BoxAnswer boxAnswer); + } diff --git a/src/main/java/org/sadtech/bot/core/service/sender/email/EmailSent.java b/src/main/java/org/sadtech/bot/core/service/sender/email/EmailSent.java index c04d580..eaf026d 100644 --- a/src/main/java/org/sadtech/bot/core/service/sender/email/EmailSent.java +++ b/src/main/java/org/sadtech/bot/core/service/sender/email/EmailSent.java @@ -21,7 +21,7 @@ public class EmailSent implements Sent { } @Override - public void send(Integer personId, String htmlText) { + public void send(Integer personId, BoxAnswer boxAnswer) { Session session = Session.getDefaultInstance(emailConfig.getProps(), new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { @@ -33,7 +33,7 @@ public class EmailSent implements Sent { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(emailConfig.getUsername())); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailConfig.getUsername())); - message.setContent(htmlText, "text/html; charset=utf-8"); + message.setContent(boxAnswer.getMessage(), "text/html; charset=utf-8"); Transport.send(message); } catch (MessagingException e) { log.error(e.getMessage()); @@ -42,7 +42,7 @@ public class EmailSent implements Sent { } @Override - public void send(Integer personId, BoxAnswer boxAnswer) { + public void send(Integer contentId, Integer personId, BoxAnswer boxAnswer) { throw new MailSendException(); } }