Новая возможность: Теперь юнит для ответа ищется не просто по пересечению слов в тексте и юните, а по процентному соотношению найденых слов в тексте к словам и установленному порогу в юните.
Теперь автоответчик возвращает не строку, а любой объект, который является наследником unit. Для этого:
* Перенес поиск следующего юнита в основной класс
* Добавил компоратор для сортировки юнитов по приоритету
* Юнит теперь абстрактный класс
* Удален репозиторий юнита
* У юнита удалено поле id
* ЮнитСервис теперь хранит в себе все ЮнитРепозитории
Первый релиз. Возможности
1) Автоматический ответ на выбор по ключевым словам пользователя
2) Вставка слов в ответ от пользоваетля
3) Добавление пользователя, если его не было
4) Формирование меню
* В Api внедрил проверку существования юзера и его добавление
* В Unit добавленно новое поле для формирвоания меню
* Исправления методов доступа
* Настроена логика формирования меню
* Добавлен новый метод проверки существования Person
* Продолжаю покрытие тестами Api
* Добавил класс, который вставляет слова в шаблонную строку Unit
* Добавил тесты проверки этого класса
* Добавил новый класс Person, который сохраняет текущий Unit
* Добавлен новый слой логики приложения. Модуль обращается к этому слою, и только этот слой может обращаться к БД
* Начал связывать таблицы
* Переместил классы
* Добавлен кастомный SQL метод возвращающий сообщения из БД новее запрошеной даты
* Добавлен глобальный обработчик сообщений
* Исрпавлены конфигурации spring, которые приводили к ошибкам в создании бинов
* Добавлен статический класс с методами вк апи
Заменил ArrayList собираемых данных с poll сервера на потокобезопасную Queue, что позволило запустить паралельно с слушателем событий обработчик событий, при этом не теряя сообщения
Научил программу работать в двух потоках. Первый поток слушает все сообещния от сервера и записывает их в отдельный класс. Другой поток раз в какое-то время обращается к этому классу и что-то делает