From b5a8680f09bab3cfd670717225494990fdf339f1 Mon Sep 17 00:00:00 2001 From: Mark Struchkov Date: Thu, 24 Jan 2019 22:20:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B1=D0=B8=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 60 +++++++++++++ .../java/org/sadtech/vkbot/core/VkApi.java | 31 +++++++ .../java/org/sadtech/vkbot/core/VkConfig.java | 83 ++++++++++++++++++ .../org/sadtech/vkbot/core/VkConnect.java | 58 +++++++++++++ .../org/sadtech/vkbot/core/entity/Mail.java | 70 +++++++++++++++ .../org/sadtech/vkbot/core/entity/Person.java | 81 ++++++++++++++++++ .../vkbot/core/entity/unit/SaveAnswer.java | 10 +++ .../entity/unit/TextAndKeyBoardAnswer.java | 16 ++++ .../vkbot/core/entity/unit/TextAnswer.java | 16 ++++ .../sadtech/vkbot/core/handlers/Handled.java | 13 +++ .../vkbot/core/handlers/ProcessableEvent.java | 12 +++ .../handlers/impl/DispatcherHandlerVk.java | 44 ++++++++++ .../core/handlers/impl/MailHandlerVk.java | 83 ++++++++++++++++++ .../vkbot/core/keyboard/ButtonKeyBoard.java | 74 ++++++++++++++++ .../vkbot/core/keyboard/ColorButton.java | 7 ++ .../sadtech/vkbot/core/keyboard/KeyBoard.java | 58 +++++++++++++ .../vkbot/core/keyboard/KeyBoardService.java | 31 +++++++ .../vkbot/core/keyboard/LineKeyBoard.java | 47 ++++++++++ .../vkbot/core/listener/EventListenable.java | 7 ++ .../core/listener/impl/EventListenerVk.java | 85 +++++++++++++++++++ .../core/repository/EventRepository.java | 17 ++++ .../vkbot/core/repository/MailRepository.java | 13 +++ .../core/repository/PersonRepository.java | 11 +++ .../repository/impl/EventRepositoryQueue.java | 31 +++++++ .../repository/impl/MailRepositoryList.java | 32 +++++++ .../repository/impl/PersonRepositoryMap.java | 22 +++++ .../unit/TextAndKeyBoardAnswerRepository.java | 24 ++++++ .../repository/unit/TextAnswerRepository.java | 35 ++++++++ .../vkbot/core/sender/MailSanderVk.java | 48 +++++++++++ .../vkbot/core/service/EventService.java | 20 +++++ .../vkbot/core/service/PersonService.java | 16 ++++ .../core/service/handlers/MailService.java | 9 ++ .../service/handlers/SortEventService.java | 13 +++ .../handlers/impl/MailServiceImpl.java | 67 +++++++++++++++ .../core/service/impl/EventServiceImpl.java | 46 ++++++++++ .../core/service/impl/PersonServiceImpl.java | 50 +++++++++++ 36 files changed, 1340 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/org/sadtech/vkbot/core/VkApi.java create mode 100644 src/main/java/org/sadtech/vkbot/core/VkConfig.java create mode 100644 src/main/java/org/sadtech/vkbot/core/VkConnect.java create mode 100644 src/main/java/org/sadtech/vkbot/core/entity/Mail.java create mode 100644 src/main/java/org/sadtech/vkbot/core/entity/Person.java create mode 100644 src/main/java/org/sadtech/vkbot/core/entity/unit/SaveAnswer.java create mode 100644 src/main/java/org/sadtech/vkbot/core/entity/unit/TextAndKeyBoardAnswer.java create mode 100644 src/main/java/org/sadtech/vkbot/core/entity/unit/TextAnswer.java create mode 100644 src/main/java/org/sadtech/vkbot/core/handlers/Handled.java create mode 100644 src/main/java/org/sadtech/vkbot/core/handlers/ProcessableEvent.java create mode 100644 src/main/java/org/sadtech/vkbot/core/handlers/impl/DispatcherHandlerVk.java create mode 100644 src/main/java/org/sadtech/vkbot/core/handlers/impl/MailHandlerVk.java create mode 100644 src/main/java/org/sadtech/vkbot/core/keyboard/ButtonKeyBoard.java create mode 100644 src/main/java/org/sadtech/vkbot/core/keyboard/ColorButton.java create mode 100644 src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoard.java create mode 100644 src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoardService.java create mode 100644 src/main/java/org/sadtech/vkbot/core/keyboard/LineKeyBoard.java create mode 100644 src/main/java/org/sadtech/vkbot/core/listener/EventListenable.java create mode 100644 src/main/java/org/sadtech/vkbot/core/listener/impl/EventListenerVk.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/EventRepository.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/MailRepository.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/PersonRepository.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/impl/EventRepositoryQueue.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/impl/MailRepositoryList.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/impl/PersonRepositoryMap.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/unit/TextAndKeyBoardAnswerRepository.java create mode 100644 src/main/java/org/sadtech/vkbot/core/repository/unit/TextAnswerRepository.java create mode 100644 src/main/java/org/sadtech/vkbot/core/sender/MailSanderVk.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/EventService.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/PersonService.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/handlers/MailService.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/handlers/SortEventService.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/handlers/impl/MailServiceImpl.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/impl/EventServiceImpl.java create mode 100644 src/main/java/org/sadtech/vkbot/core/service/impl/PersonServiceImpl.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e0a761b --- /dev/null +++ b/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.sadtech.vkbot + core + 0.3-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 7 + 7 + + + + + + + 2.8.5 + 0.5.13-SNAPSHOT + 1.2.17 + 20180813 + + + + + com.google.code.gson + gson + ${gson.ver} + + + com.vk.api + sdk + ${vksdk.ver} + + + log4j + log4j + ${log4j.ver} + + + org.json + json + ${json.ver} + + + org.sadtech.autoresponder + autoresponder + 1.1.2-SNAPHOT + compile + + + + + \ No newline at end of file diff --git a/src/main/java/org/sadtech/vkbot/core/VkApi.java b/src/main/java/org/sadtech/vkbot/core/VkApi.java new file mode 100644 index 0000000..b066905 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/VkApi.java @@ -0,0 +1,31 @@ +package org.sadtech.vkbot.core; + +import com.vk.api.sdk.client.VkApiClient; +import com.vk.api.sdk.client.actors.GroupActor; +import com.vk.api.sdk.exceptions.ApiException; +import com.vk.api.sdk.exceptions.ClientException; +import com.vk.api.sdk.objects.users.UserXtrCounters; + +import java.util.List; + +public class VkApi { + + private VkApiClient vk; + private GroupActor actor; + + public VkApi(VkConnect vkConnect) { + vk = vkConnect.getVkApiClient(); + actor = vkConnect.getGroupActor(); + } + + public UserXtrCounters getUserVk(Integer id) { + List temp = null; + try { + temp = vk.users().get(actor).userIds(String.valueOf(id)).execute(); + } catch (ApiException | ClientException e) { + e.printStackTrace(); + } + return temp.get(0); + } + +} diff --git a/src/main/java/org/sadtech/vkbot/core/VkConfig.java b/src/main/java/org/sadtech/vkbot/core/VkConfig.java new file mode 100644 index 0000000..4a5d8ae --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/VkConfig.java @@ -0,0 +1,83 @@ +package org.sadtech.vkbot.core; + +import java.util.Objects; + +public class VkConfig { + + private String groupToken; + private Integer groupId; + private String serviceToken; + private Integer appId; + private String groupSecretKey; + private String groupPublicKey; + + public VkConfig() { + + } + + public String getGroupToken() { + return groupToken; + } + + public void setGroupToken(String groupToken) { + this.groupToken = groupToken; + } + + public Integer getGroupId() { + return groupId; + } + + public void setGroupId(Integer groupId) { + this.groupId = groupId; + } + + public String getServiceToken() { + return serviceToken; + } + + public void setServiceToken(String serviceToken) { + this.serviceToken = serviceToken; + } + + public Integer getAppId() { + return appId; + } + + public void setAppId(Integer appId) { + this.appId = appId; + } + + public String getGroupSecretKey() { + return groupSecretKey; + } + + public void setGroupSecretKey(String groupSecretKey) { + this.groupSecretKey = groupSecretKey; + } + + public String getGroupPublicKey() { + return groupPublicKey; + } + + public void setGroupPublicKey(String groupPublicKey) { + this.groupPublicKey = groupPublicKey; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VkConfig vkConfig = (VkConfig) o; + return Objects.equals(groupToken, vkConfig.groupToken) && + Objects.equals(groupId, vkConfig.groupId) && + Objects.equals(serviceToken, vkConfig.serviceToken) && + Objects.equals(appId, vkConfig.appId) && + Objects.equals(groupSecretKey, vkConfig.groupSecretKey) && + Objects.equals(groupPublicKey, vkConfig.groupPublicKey); + } + + @Override + public int hashCode() { + return Objects.hash(groupToken, groupId, serviceToken, appId, groupSecretKey, groupPublicKey); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/VkConnect.java b/src/main/java/org/sadtech/vkbot/core/VkConnect.java new file mode 100644 index 0000000..c10e7bd --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/VkConnect.java @@ -0,0 +1,58 @@ +package org.sadtech.vkbot.core; + +import com.vk.api.sdk.client.VkApiClient; +import com.vk.api.sdk.client.actors.GroupActor; +import com.vk.api.sdk.client.actors.ServiceActor; +import com.vk.api.sdk.httpclient.HttpTransportClient; + +public class VkConnect { + + private VkConfig vkConfig; + + private VkApiClient vkApiClient; + private GroupActor groupActor; + private ServiceActor serviceActor; + + public VkConnect(VkConfig vkConfig) { + this.vkConfig = vkConfig; + } + + public VkApiClient getVkApiClient() { + if (vkApiClient != null) { + return vkApiClient; + } else { + initVkApiClient(); + return vkApiClient; + } + } + + public GroupActor getGroupActor() { + if (groupActor != null) { + return groupActor; + } else { + initGroupActor(); + return groupActor; + } + } + + public ServiceActor getServiceActor() { + if (serviceActor != null) { + return serviceActor; + } else { + initServiceActor(); + return serviceActor; + } + } + + private void initVkApiClient() { + vkApiClient = new VkApiClient(HttpTransportClient.getInstance()); + } + + private void initGroupActor() { + groupActor = new GroupActor(vkConfig.getGroupId(), vkConfig.getGroupToken()); + } + + private void initServiceActor() { + serviceActor = new ServiceActor(vkConfig.getAppId(), vkConfig.getServiceToken()); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/entity/Mail.java b/src/main/java/org/sadtech/vkbot/core/entity/Mail.java new file mode 100644 index 0000000..0f5dd73 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/Mail.java @@ -0,0 +1,70 @@ +package org.sadtech.vkbot.core.entity; + +import java.util.Objects; + +public class Mail { + + private Integer id; + private Integer date; + private Person person; + private String body; + + public Mail() { + + } + + public Mail(Integer id, Integer date, Person userId, String body) { + this.id = id; + this.date = date; + this.person = userId; + this.body = body; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getDate() { + return date; + } + + public void setDate(Integer date) { + this.date = date; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Mail mail = (Mail) o; + return Objects.equals(id, mail.id) && + Objects.equals(date, mail.date) && + Objects.equals(person, mail.person) && + Objects.equals(body, mail.body); + } + + @Override + public int hashCode() { + return Objects.hash(id, date, person, body); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/entity/Person.java b/src/main/java/org/sadtech/vkbot/core/entity/Person.java new file mode 100644 index 0000000..9040b63 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/Person.java @@ -0,0 +1,81 @@ +package org.sadtech.vkbot.core.entity; + +import java.util.Objects; + +public class Person { + + private Integer id; + private String firstName; + private String lastName; + private Integer sex; + private String city; + + public Person() { + + } + + public Person(Integer id, String firstName, String lastName, Integer sex, String city) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.sex = sex; + this.city = city; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Person person = (Person) o; + return Objects.equals(id, person.id) && + Objects.equals(firstName, person.firstName) && + Objects.equals(lastName, person.lastName) && + Objects.equals(sex, person.sex) && + Objects.equals(city, person.city); + } + + @Override + public int hashCode() { + return Objects.hash(id, firstName, lastName, sex, city); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/entity/unit/SaveAnswer.java b/src/main/java/org/sadtech/vkbot/core/entity/unit/SaveAnswer.java new file mode 100644 index 0000000..19f9f36 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/unit/SaveAnswer.java @@ -0,0 +1,10 @@ +package org.sadtech.vkbot.core.entity.unit; + +import org.sadtech.vkbot.autoresponder.DataService; + +public class SaveAnswer extends TextAnswer { + + private SaveAnswer prevSaveAnswer; + private DataService dataService; + +} diff --git a/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAndKeyBoardAnswer.java b/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAndKeyBoardAnswer.java new file mode 100644 index 0000000..708ca80 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAndKeyBoardAnswer.java @@ -0,0 +1,16 @@ +package org.sadtech.vkbot.core.entity.unit; + +import org.sadtech.vkbot.core.keyboard.KeyBoard; + +public class TextAndKeyBoardAnswer extends TextAnswer { + + KeyBoard keyBoard; + + public KeyBoard getKeyBoard() { + return keyBoard; + } + + public void setKeyBoard(KeyBoard keyBoard) { + this.keyBoard = keyBoard; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAnswer.java b/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAnswer.java new file mode 100644 index 0000000..ccd6800 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/entity/unit/TextAnswer.java @@ -0,0 +1,16 @@ +package org.sadtech.vkbot.core.entity.unit; + +import org.sadtech.autoresponder.entity.Unit; + +public class TextAnswer extends Unit { + + private String answer; + + public String getAnswer() { + return answer; + } + + public void setAnswer(String answer) { + this.answer = answer; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/handlers/Handled.java b/src/main/java/org/sadtech/vkbot/core/handlers/Handled.java new file mode 100644 index 0000000..65efdae --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/handlers/Handled.java @@ -0,0 +1,13 @@ +package org.sadtech.vkbot.core.handlers; + +import org.sadtech.vkbot.core.service.EventService; + +public interface Handled extends Runnable { + + void sortAndSend() throws Exception; + + void registerObserver(String key, ProcessableEvent o); + + EventService getResponsibleService(); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/handlers/ProcessableEvent.java b/src/main/java/org/sadtech/vkbot/core/handlers/ProcessableEvent.java new file mode 100644 index 0000000..e4e0d8c --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/handlers/ProcessableEvent.java @@ -0,0 +1,12 @@ +package org.sadtech.vkbot.core.handlers; + +import com.google.gson.JsonObject; +import org.sadtech.vkbot.core.service.handlers.SortEventService; + +public interface ProcessableEvent { + + void update(JsonObject object); + + SortEventService getServiceEventData(); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/handlers/impl/DispatcherHandlerVk.java b/src/main/java/org/sadtech/vkbot/core/handlers/impl/DispatcherHandlerVk.java new file mode 100644 index 0000000..6d33630 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/handlers/impl/DispatcherHandlerVk.java @@ -0,0 +1,44 @@ +package org.sadtech.vkbot.core.handlers.impl; + +import com.google.gson.JsonObject; +import org.sadtech.vkbot.core.handlers.Handled; +import org.sadtech.vkbot.core.handlers.ProcessableEvent; +import org.sadtech.vkbot.core.service.EventService; + +import java.util.HashMap; +import java.util.Map; + +public class DispatcherHandlerVk implements Handled, Runnable { + + private EventService responsibleService; + private Map processableEventMap = new HashMap<>(); + + public DispatcherHandlerVk(EventService responsibleService) { + this.responsibleService = responsibleService; + } + + @Override + public void sortAndSend() { + while (true) { + if (responsibleService.getJsonObjects().peek() != null) { + JsonObject event = responsibleService.getJsonObjects().poll(); + processableEventMap.get(event.get("type").toString()).update(event); + } + } + } + + @Override + public void registerObserver(String key, ProcessableEvent o) { + processableEventMap.put(key, o); + } + + @Override + public EventService getResponsibleService() { + return responsibleService; + } + + @Override + public void run() { + sortAndSend(); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/handlers/impl/MailHandlerVk.java b/src/main/java/org/sadtech/vkbot/core/handlers/impl/MailHandlerVk.java new file mode 100644 index 0000000..5954524 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/handlers/impl/MailHandlerVk.java @@ -0,0 +1,83 @@ +package org.sadtech.vkbot.core.handlers.impl; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.vk.api.sdk.objects.messages.Message; +import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.entity.Mail; +import org.sadtech.vkbot.core.entity.Person; +import org.sadtech.vkbot.core.handlers.Handled; +import org.sadtech.vkbot.core.handlers.ProcessableEvent; +import org.sadtech.vkbot.core.service.PersonService; +import org.sadtech.vkbot.core.service.handlers.MailService; +import org.sadtech.vkbot.core.service.handlers.SortEventService; +import org.sadtech.vkbot.core.service.handlers.impl.MailServiceImpl; +import org.sadtech.vkbot.core.service.impl.PersonServiceImpl; + +public class MailHandlerVk implements ProcessableEvent { + + public static final Logger log = Logger.getLogger(MailHandlerVk.class); + + private PersonService personService; + private MailService mailService; + + public MailHandlerVk(Handled dispatcherHandler) { + personService = new PersonServiceImpl(); + mailService = new MailServiceImpl(); + dispatcherHandler.registerObserver("\"message_new\"", this); + } + + public MailHandlerVk(Handled dispatcherHandler, PersonService personService, MailService mailService) { + this.personService = personService; + this.mailService = mailService; + dispatcherHandler.registerObserver("\"message_new\"", this); + } + + public PersonService getPersonService() { + return personService; + } + + public void setPersonService(PersonService personService) { + this.personService = personService; + } + + public MailService getMailService() { + return mailService; + } + + public void setMailService(MailService mailService) { + this.mailService = mailService; + } + + @Override + public void update(JsonObject object) { + Gson gson = new Gson(); + Message userMessage = gson.fromJson(object.getAsJsonObject("object"), Message.class); + if (!personService.checkPerson(userMessage.getUserId())) { + Person person = new Person(); + person.setId(userMessage.getUserId()); + log.info("Пользователь отправлен на добавление в репозиторий"); + personService.add(person); + } + log.info("Сообщение отправленно на добавление в репозиторий"); + mailService.add(createMail(userMessage)); + } + + private Mail createMail(Message message) { + Mail mail = new Mail(); + mail.setDate(message.getDate()); + mail.setBody(message.getBody()); + mail.setId(message.getId()); + if (personService.checkPerson(message.getUserId())) { + mail.setPerson(personService.get(message.getUserId())); + } else { + return null; + } + return mail; + } + + @Override + public SortEventService getServiceEventData() { + return mailService; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/keyboard/ButtonKeyBoard.java b/src/main/java/org/sadtech/vkbot/core/keyboard/ButtonKeyBoard.java new file mode 100644 index 0000000..350328e --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/keyboard/ButtonKeyBoard.java @@ -0,0 +1,74 @@ +package org.sadtech.vkbot.core.keyboard; + +import org.json.JSONObject; + +public class ButtonKeyBoard { + + private String type = "text"; + private String payload; + private String label; + private ColorButton color = ColorButton.DEFAULT; + + public ButtonKeyBoard() { + + } + + public ButtonKeyBoard(String type, String payload, String label, ColorButton color) { + this.type = type; + this.payload = payload; + this.label = label; + this.color = color; + } + + public JSONObject getButton() { + JSONObject newButton = new JSONObject(); + newButton.put("color", color.toString().toLowerCase()); + newButton.put("action", generateAction()); + return newButton; + } + + private JSONObject generateAction() { + JSONObject action = new JSONObject(); + action.put("type", type); + action.put("payload", payload); + action.put("label", label); + return action; + } + + public static Builder builder() { + return new ButtonKeyBoard().new Builder(); + } + + public class Builder { + + private Builder() { + + } + + public Builder setColor(ColorButton color) { + ButtonKeyBoard.this.color = color; + return this; + } + + public Builder setLabel(String label) { + ButtonKeyBoard.this.label = label; + return this; + } + + public Builder setPayload(String payload) { + ButtonKeyBoard.this.payload = payload; + return this; + } + + public Builder setType(String type) { + ButtonKeyBoard.this.type = type; + return this; + } + + public ButtonKeyBoard build() { + return ButtonKeyBoard.this; + } + + } + +} diff --git a/src/main/java/org/sadtech/vkbot/core/keyboard/ColorButton.java b/src/main/java/org/sadtech/vkbot/core/keyboard/ColorButton.java new file mode 100644 index 0000000..6eb856b --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/keyboard/ColorButton.java @@ -0,0 +1,7 @@ +package org.sadtech.vkbot.core.keyboard; + +public enum ColorButton { + + PRIMARY, DEFAULT, NEGATIVE, POSITIVE + +} diff --git a/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoard.java b/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoard.java new file mode 100644 index 0000000..9f9937e --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoard.java @@ -0,0 +1,58 @@ +package org.sadtech.vkbot.core.keyboard; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +public class KeyBoard { + + private List lineKeyBoards = new ArrayList<>(); + + public KeyBoard() { + + } + + public KeyBoard(List lineKeyBoards) { + this.lineKeyBoards = lineKeyBoards; + } + + public JSONObject getKeyboard(Boolean one_time) { + JSONObject keyboard = new JSONObject(); + keyboard.put("one_time", one_time); + + JSONArray menuLine = new JSONArray(); + for (LineKeyBoard lineKeyboard : lineKeyBoards) { + menuLine.put(lineKeyboard.getLine()); + } + + keyboard.put("buttons", menuLine); + return keyboard; + } + + public void addLine(LineKeyBoard lineKeyBoard) { + lineKeyBoards.add(lineKeyBoard); + } + + public static Builder builder() { + return new KeyBoard().new Builder(); + } + + public class Builder { + + private Builder() { + + } + + public Builder setLineKeyBoard(LineKeyBoard lineKeyBoard) { + KeyBoard.this.lineKeyBoards.add(lineKeyBoard); + return this; + } + + public KeyBoard build() { + return KeyBoard.this; + } + + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoardService.java b/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoardService.java new file mode 100644 index 0000000..81de780 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/keyboard/KeyBoardService.java @@ -0,0 +1,31 @@ +package org.sadtech.vkbot.core.keyboard; + +import org.json.JSONObject; + +import java.util.List; + +public class KeyBoardService { + + private JSONObject keyBoardYesNo = generateKeyBoardYesNo(); + + private JSONObject generateKeyBoardYesNo() { + ButtonKeyBoard yesButton = ButtonKeyBoard.builder().setColor(ColorButton.POSITIVE).setLabel("Да").setPayload("{\"button\": \"yes\"}").build(); + ButtonKeyBoard noButton = ButtonKeyBoard.builder().setColor(ColorButton.NEGATIVE).setLabel("Нет").setPayload("{\"button\": \"no\"}").build(); + LineKeyBoard lineKeyBoard = LineKeyBoard.builder().setButtonKeyBoard(yesButton).setButtonKeyBoard(noButton).build(); + KeyBoard keyBoard = KeyBoard.builder().setLineKeyBoard(lineKeyBoard).build(); + return keyBoard.getKeyboard(true); + } + + public static JSONObject verticalMenu(List labelButtons) { + KeyBoard keyBoard = new KeyBoard(); + for (String labelButton : labelButtons) { + ButtonKeyBoard buttonKeyBoard = ButtonKeyBoard.builder().setLabel(labelButton).setType("text").setPayload("{\"button\": \"" + labelButton + "\"}").build(); + keyBoard.addLine(LineKeyBoard.builder().setButtonKeyBoard(buttonKeyBoard).build()); + } + return keyBoard.getKeyboard(true); + } + + public JSONObject getKeyBoardYesNo() { + return keyBoardYesNo; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/keyboard/LineKeyBoard.java b/src/main/java/org/sadtech/vkbot/core/keyboard/LineKeyBoard.java new file mode 100644 index 0000000..0f8cdc1 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/keyboard/LineKeyBoard.java @@ -0,0 +1,47 @@ +package org.sadtech.vkbot.core.keyboard; + +import org.json.JSONArray; + +import java.util.ArrayList; +import java.util.List; + +public class LineKeyBoard { + + private List buttonKeyBoards = new ArrayList<>(); + + public LineKeyBoard() { + + } + + public LineKeyBoard(List buttonKeyBoards) { + this.buttonKeyBoards = buttonKeyBoards; + } + + public JSONArray getLine() { + JSONArray line = new JSONArray(); + for (ButtonKeyBoard buttonKeyBoard : buttonKeyBoards) { + line.put(buttonKeyBoard.getButton()); + } + return line; + } + + public static Builder builder() { + return new LineKeyBoard().new Builder(); + } + + public class Builder { + + private Builder() { + + } + + public Builder setButtonKeyBoard(ButtonKeyBoard buttonKeyBoard) { + LineKeyBoard.this.buttonKeyBoards.add(buttonKeyBoard); + return this; + } + + public LineKeyBoard build() { + return LineKeyBoard.this; + } + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/listener/EventListenable.java b/src/main/java/org/sadtech/vkbot/core/listener/EventListenable.java new file mode 100644 index 0000000..ff854f0 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/listener/EventListenable.java @@ -0,0 +1,7 @@ +package org.sadtech.vkbot.core.listener; + +public interface EventListenable extends Runnable { + + void listen() throws Exception; + +} diff --git a/src/main/java/org/sadtech/vkbot/core/listener/impl/EventListenerVk.java b/src/main/java/org/sadtech/vkbot/core/listener/impl/EventListenerVk.java new file mode 100644 index 0000000..5fc99c1 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/listener/impl/EventListenerVk.java @@ -0,0 +1,85 @@ +package org.sadtech.vkbot.core.listener.impl; + +import com.google.gson.JsonObject; +import com.vk.api.sdk.actions.LongPoll; +import com.vk.api.sdk.callback.longpoll.queries.GetLongPollEventsQuery; +import com.vk.api.sdk.callback.longpoll.responses.GetLongPollEventsResponse; +import com.vk.api.sdk.client.VkApiClient; +import com.vk.api.sdk.client.actors.GroupActor; +import com.vk.api.sdk.exceptions.ApiException; +import com.vk.api.sdk.exceptions.ClientException; +import com.vk.api.sdk.objects.groups.responses.GetLongPollServerResponse; +import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.VkConnect; +import org.sadtech.vkbot.core.repository.EventRepository; +import org.sadtech.vkbot.core.repository.impl.EventRepositoryQueue; +import org.sadtech.vkbot.core.service.EventService; +import org.sadtech.vkbot.core.service.impl.EventServiceImpl; +import org.sadtech.vkbot.core.listener.EventListenable; + +public class EventListenerVk implements EventListenable, Runnable { + + public static final Logger log = Logger.getLogger(EventListenerVk.class); + + private VkApiClient vk; + private GroupActor actor; + + private EventService eventService; + + private GetLongPollEventsQuery longPollEventsQuery; + private LongPoll longPoll; + private GetLongPollServerResponse server; + + public EventListenerVk(VkConnect vkConnect) { + vk = vkConnect.getVkApiClient(); + actor = vkConnect.getGroupActor(); + eventService = new EventServiceImpl(new EventRepositoryQueue()); + longPoll = new LongPoll(vk); + } + + public EventListenerVk(VkConnect vkConnect, EventRepository eventRepository) { + this.vk = vkConnect.getVkApiClient(); + this.actor = vkConnect.getGroupActor(); + this.eventService = new EventServiceImpl(eventRepository); + longPoll = new LongPoll(vk); + } + + public EventService getEventService() { + return eventService; + } + + public void listen() throws ClientException, ApiException { + initServer(); + log.info("LongPollServer инициализирован"); + do { + GetLongPollEventsResponse eventsResponse; + eventsResponse = longPollEventsQuery.execute(); + if (eventsResponse.getUpdates().toArray().length != 0) { + log.info("Полученно событие от ВК"); + log.info(eventsResponse.getUpdates()); + for (JsonObject update : eventsResponse.getUpdates()) { + eventService.add(update); + } + } + longPollEventsQuery = longPoll.getEvents(server.getServer(), server.getKey(), eventsResponse.getTs()).waitTime(20); + } while (true); + } + + private void initServer() throws ClientException, ApiException { + server = vk.groups().getLongPollServer(actor).execute(); + String key = server.getKey(); + String serverUrl = server.getServer(); + Integer ts = server.getTs(); + longPoll = new LongPoll(vk); + longPollEventsQuery = longPoll.getEvents(serverUrl, key, ts).waitTime(20); + } + + @Override + public void run() { + try { + listen(); + } catch (ClientException | ApiException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/EventRepository.java b/src/main/java/org/sadtech/vkbot/core/repository/EventRepository.java new file mode 100644 index 0000000..d725028 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/EventRepository.java @@ -0,0 +1,17 @@ +package org.sadtech.vkbot.core.repository; + +import com.google.gson.JsonObject; + +import java.util.Queue; + +public interface EventRepository { + + void add(JsonObject jsonObject); + + void remove(int id); + + void cleanAll(); + + Queue getJsonObjects(); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/MailRepository.java b/src/main/java/org/sadtech/vkbot/core/repository/MailRepository.java new file mode 100644 index 0000000..0f263f8 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/MailRepository.java @@ -0,0 +1,13 @@ +package org.sadtech.vkbot.core.repository; + +import org.sadtech.vkbot.core.entity.Mail; + +import java.util.List; + +public interface MailRepository { + + void add(Mail message); + + List getMailByTime(Integer timeFrom, Integer timeTo); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/PersonRepository.java b/src/main/java/org/sadtech/vkbot/core/repository/PersonRepository.java new file mode 100644 index 0000000..f8bac8f --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/PersonRepository.java @@ -0,0 +1,11 @@ +package org.sadtech.vkbot.core.repository; + +import org.sadtech.vkbot.core.entity.Person; + +public interface PersonRepository { + + void add(Person person); + + Person get(Integer id); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/impl/EventRepositoryQueue.java b/src/main/java/org/sadtech/vkbot/core/repository/impl/EventRepositoryQueue.java new file mode 100644 index 0000000..54d6d65 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/impl/EventRepositoryQueue.java @@ -0,0 +1,31 @@ +package org.sadtech.vkbot.core.repository.impl; + +import com.google.gson.JsonObject; +import org.sadtech.vkbot.core.repository.EventRepository; + +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +public class EventRepositoryQueue implements EventRepository { + + private Queue jsonObjects = new ConcurrentLinkedQueue<>(); + + @Override + public void add(JsonObject jsonObject) { + jsonObjects.offer(jsonObject); + } + + @Override + public void remove(int id) { + jsonObjects.remove(id); + } + + @Override + public void cleanAll() { + jsonObjects.clear(); + } + + public Queue getJsonObjects() { + return jsonObjects; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/impl/MailRepositoryList.java b/src/main/java/org/sadtech/vkbot/core/repository/impl/MailRepositoryList.java new file mode 100644 index 0000000..522fa58 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/impl/MailRepositoryList.java @@ -0,0 +1,32 @@ +package org.sadtech.vkbot.core.repository.impl; + +import org.sadtech.vkbot.core.entity.Mail; +import org.sadtech.vkbot.core.repository.MailRepository; + +import java.util.ArrayList; +import java.util.List; + +public class MailRepositoryList implements MailRepository { + + private List messages = new ArrayList<>(); + + @Override + public void add(Mail mail) { + messages.add(mail); + } + + @Override + public List getMailByTime(Integer timeFrom, Integer timeTo) { + ArrayList mails = new ArrayList<>(); + for (int i = messages.size() - 1; i >= 0; i--) { + if (messages.get(i).getDate() >= timeFrom && messages.get(i).getDate() < timeTo) { + mails.add(messages.get(i)); + } else if (messages.get(i).getDate() < timeFrom) { + break; + } + } + return mails; + } + + +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/impl/PersonRepositoryMap.java b/src/main/java/org/sadtech/vkbot/core/repository/impl/PersonRepositoryMap.java new file mode 100644 index 0000000..b076236 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/impl/PersonRepositoryMap.java @@ -0,0 +1,22 @@ +package org.sadtech.vkbot.core.repository.impl; + +import org.sadtech.vkbot.core.entity.Person; +import org.sadtech.vkbot.core.repository.PersonRepository; + +import java.util.HashMap; +import java.util.Map; + +public class PersonRepositoryMap implements PersonRepository { + + private Map personMap = new HashMap<>(); + + @Override + public void add(Person person) { + personMap.put(person.getId(), person); + } + + @Override + public Person get(Integer id) { + return personMap.get(id); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAndKeyBoardAnswerRepository.java b/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAndKeyBoardAnswerRepository.java new file mode 100644 index 0000000..cd17c90 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAndKeyBoardAnswerRepository.java @@ -0,0 +1,24 @@ +package org.sadtech.vkbot.core.repository.unit; + +import org.sadtech.vkbot.core.entity.unit.TextAndKeyBoardAnswer; +import org.sadtech.autoresponder.repository.UnitRepository; + +import java.util.List; + +public class TextAndKeyBoardAnswerRepository implements UnitRepository { + + @Override + public void addUnit(TextAndKeyBoardAnswer unit) { + + } + + @Override + public void addUnits(List units) { + + } + + @Override + public List menuUnits() { + return null; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAnswerRepository.java b/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAnswerRepository.java new file mode 100644 index 0000000..acaf94c --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/repository/unit/TextAnswerRepository.java @@ -0,0 +1,35 @@ +package org.sadtech.vkbot.core.repository.unit; + +import org.sadtech.vkbot.core.entity.unit.TextAnswer; +import org.sadtech.autoresponder.repository.UnitRepository; + +import java.util.ArrayList; +import java.util.List; + +public class TextAnswerRepository implements UnitRepository { + + private List textAnswers; + + public TextAnswerRepository() { + textAnswers = new ArrayList<>(); + } + + public TextAnswerRepository(List textAnswers) { + this.textAnswers = textAnswers; + } + + @Override + public void addUnit(TextAnswer unit) { + textAnswers.add(unit); + } + + @Override + public void addUnits(List units) { + textAnswers.addAll(units); + } + + @Override + public List menuUnits() { + return textAnswers; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/sender/MailSanderVk.java b/src/main/java/org/sadtech/vkbot/core/sender/MailSanderVk.java new file mode 100644 index 0000000..bc8bf4a --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/sender/MailSanderVk.java @@ -0,0 +1,48 @@ +package org.sadtech.vkbot.core.sender; + +import com.vk.api.sdk.client.VkApiClient; +import com.vk.api.sdk.client.actors.GroupActor; +import com.vk.api.sdk.exceptions.ApiException; +import com.vk.api.sdk.exceptions.ClientException; +import org.sadtech.vkbot.core.VkConnect; +import org.sadtech.vkbot.core.entity.Person; +import org.sadtech.vkbot.core.keyboard.KeyBoard; + +public class MailSanderVk { + + private Person person; + private VkApiClient vkApiClient; + private GroupActor groupActor; + + public MailSanderVk(VkConnect vkConnect) { + this.vkApiClient = vkConnect.getVkApiClient(); + this.groupActor = vkConnect.getGroupActor(); + } + + public MailSanderVk(Person person, VkConnect vkConnect) { + this.person = person; + this.vkApiClient = vkConnect.getVkApiClient(); + this.groupActor = vkConnect.getGroupActor(); + } + + public void setPerson(Person person) { + this.person = person; + } + + public void sendText(String messageText) { + try { + vkApiClient.messages().send(groupActor).userId(person.getId()).message(messageText).execute(); + } catch (ApiException | ClientException e) { + e.printStackTrace(); + } + } + + public void sendTextandKeyBoard(String message, KeyBoard keyBoard) { + try { + vkApiClient.messages().send(groupActor).userId(person.getId()).message(message).keyboard(keyBoard.getKeyboard(true).toString()).execute(); + } catch (ApiException | ClientException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/EventService.java b/src/main/java/org/sadtech/vkbot/core/service/EventService.java new file mode 100644 index 0000000..18c2925 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/EventService.java @@ -0,0 +1,20 @@ +package org.sadtech.vkbot.core.service; + +import com.google.gson.JsonObject; +import org.sadtech.vkbot.core.repository.EventRepository; + +import java.util.Queue; + +public interface EventService { + + void cleanAll(); + + void add(JsonObject jsonObject); + + Queue getJsonObjects(); + + EventRepository getEventRepository(); + + void replacementEventRepository(EventRepository eventRepository); + +} \ No newline at end of file diff --git a/src/main/java/org/sadtech/vkbot/core/service/PersonService.java b/src/main/java/org/sadtech/vkbot/core/service/PersonService.java new file mode 100644 index 0000000..d5d9777 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/PersonService.java @@ -0,0 +1,16 @@ +package org.sadtech.vkbot.core.service; + +import com.vk.api.sdk.objects.users.User; +import org.sadtech.vkbot.core.entity.Person; + +public interface PersonService { + + void add(User person); + + void add(Person person); + + Person get(Integer id); + + boolean checkPerson(Integer idPerson); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/handlers/MailService.java b/src/main/java/org/sadtech/vkbot/core/service/handlers/MailService.java new file mode 100644 index 0000000..a78bf27 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/handlers/MailService.java @@ -0,0 +1,9 @@ +package org.sadtech.vkbot.core.service.handlers; + +import org.sadtech.vkbot.core.entity.Mail; + +public interface MailService extends SortEventService { + + void add(Mail mail); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/handlers/SortEventService.java b/src/main/java/org/sadtech/vkbot/core/service/handlers/SortEventService.java new file mode 100644 index 0000000..9979287 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/handlers/SortEventService.java @@ -0,0 +1,13 @@ +package org.sadtech.vkbot.core.service.handlers; + +import java.util.List; + +public interface SortEventService { + + List getEvent(Integer timeFrom, Integer timeTo); + + List getFirstMailByTime(Integer timeFrom, Integer timeTo); + + List getLastMailByTime(Integer timeFrom, Integer timeTo); + +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/handlers/impl/MailServiceImpl.java b/src/main/java/org/sadtech/vkbot/core/service/handlers/impl/MailServiceImpl.java new file mode 100644 index 0000000..cd3ccea --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/handlers/impl/MailServiceImpl.java @@ -0,0 +1,67 @@ +package org.sadtech.vkbot.core.service.handlers.impl; + +import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.entity.Mail; +import org.sadtech.vkbot.core.entity.Person; +import org.sadtech.vkbot.core.repository.MailRepository; +import org.sadtech.vkbot.core.repository.impl.MailRepositoryList; +import org.sadtech.vkbot.core.service.handlers.MailService; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class MailServiceImpl implements MailService { + + public static final Logger log = Logger.getLogger(MailServiceImpl.class); + + private MailRepository messageRepository; + + public MailServiceImpl() { + this.messageRepository = new MailRepositoryList(); + } + + public MailServiceImpl(MailRepository messageRepository) { + this.messageRepository = messageRepository; + } + + @Override + public void add(Mail mail) { + messageRepository.add(mail); + } + + @Override + public List getFirstMailByTime(Integer timeFrom, Integer timeTo) { + List mails = messageRepository.getMailByTime(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).getPerson())) { + returnMails.add(mails.get(i)); + people.add(mails.get(i).getPerson()); + } + } + return returnMails; + } + + @Override + public List getLastMailByTime(Integer timeFrom, Integer timeTo) { + List mails = messageRepository.getMailByTime(timeFrom, timeTo); + Set people = new HashSet<>(); + List returnMails = new ArrayList<>(); + for (Mail mail : mails) { + if (!people.contains(mail.getPerson())) { + returnMails.add(mail); + people.add(mail.getPerson()); + } + } + return returnMails; + } + + @Override + public List getEvent(Integer timeFrom, Integer timeTo) { + log.info("Запрос на получение сообщений в интервале от " + timeFrom + " до " + timeTo); + return messageRepository.getMailByTime(timeFrom, timeTo); + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/impl/EventServiceImpl.java b/src/main/java/org/sadtech/vkbot/core/service/impl/EventServiceImpl.java new file mode 100644 index 0000000..9e686f0 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/impl/EventServiceImpl.java @@ -0,0 +1,46 @@ +package org.sadtech.vkbot.core.service.impl; + +import com.google.gson.JsonObject; +import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.repository.EventRepository; +import org.sadtech.vkbot.core.service.EventService; + +import java.util.Queue; + +public class EventServiceImpl implements EventService { + + public static final Logger log = Logger.getLogger(EventServiceImpl.class); + + private EventRepository eventRepository; + + public EventServiceImpl(EventRepository eventRepository) { + this.eventRepository = eventRepository; + } + + @Override + public void cleanAll() { + eventRepository.cleanAll(); + log.info("Репозиторий событий очищен"); + } + + @Override + public void add(JsonObject jsonObject) { + eventRepository.add(jsonObject); + log.info("Событие отправленно в репозиторий"); + } + + @Override + public Queue getJsonObjects() { + return eventRepository.getJsonObjects(); + } + + @Override + public EventRepository getEventRepository() { + return eventRepository; + } + + @Override + public void replacementEventRepository(EventRepository eventRepository) { + this.eventRepository = eventRepository; + } +} diff --git a/src/main/java/org/sadtech/vkbot/core/service/impl/PersonServiceImpl.java b/src/main/java/org/sadtech/vkbot/core/service/impl/PersonServiceImpl.java new file mode 100644 index 0000000..5a695a8 --- /dev/null +++ b/src/main/java/org/sadtech/vkbot/core/service/impl/PersonServiceImpl.java @@ -0,0 +1,50 @@ +package org.sadtech.vkbot.core.service.impl; + +import com.vk.api.sdk.objects.users.User; +import org.apache.log4j.Logger; +import org.sadtech.vkbot.core.entity.Person; +import org.sadtech.vkbot.core.repository.PersonRepository; +import org.sadtech.vkbot.core.repository.impl.PersonRepositoryMap; +import org.sadtech.vkbot.core.service.PersonService; + +public class PersonServiceImpl implements PersonService { + + public static final Logger log = Logger.getLogger(PersonServiceImpl.class); + + private PersonRepository personRepository; + + public PersonServiceImpl() { + this.personRepository = new PersonRepositoryMap(); + } + + public PersonServiceImpl(PersonRepository personRepository) { + this.personRepository = personRepository; + } + + @Override + public void add(User user) { + Person person = new Person(); + person.setId(user.getId()); + person.setLastName(user.getLastName()); + person.setFirstName(user.getFirstName()); + personRepository.add(person); + log.info("Пользователь добавлен в репозиторий"); + } + + @Override + public void add(Person person) { + personRepository.add(person); + log.info("Пользователь добавлен в репозиторий"); + } + + @Override + public Person get(Integer id) { + return personRepository.get(id); + } + + @Override + public boolean checkPerson(Integer idPerson) { + log.info("Проверка наличия пользователя в репозитории"); + return get(idPerson) != null; + } +}