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
+
+
+
+
+
+
+ 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;
+ }
+}