Архитектура микросервисная.
Backend.
Бэк опрашивает группы раз в 5 минут, новые посты анализирует, находит GEO из текста, кладет в базу. Существующие посты обновляются, если имело место редактирование. Сейчас работа ведется только с одной группой, добавить еще - дело 5 минут.
Для обработки текста используется https://www.pullenti.ru/ Для получения координат по адресу Google Geo API БД: mongo
API
- для получения N штук из базы /api/posts
- для получения новых, чтобы отправить всем подписчикам оповещение /api/posts&onlyNew=true
- служебное API
В api можно задать:
- геолокацию пользователя - строкой [geo]
- количество [count] - по умолчанию: 5
- [distance] - параметр, от которого зависит, насколько рядом нужно искать точки раздачи еды. Задается в метрах. По умолчанию 3000.
Параметр distance имеет ограничения применения. Например "город Санкт-Петербург" определится где-то в центре (широта/долгота),а если человек будет искать на окраине, то ему оповещалки не придут. Точность системы полностью зависит пользователей: насколько корректно они напишут адрес.
Для запуска приложения нужно создать файл .env и определить переменные: VK_APP_ID VK_APP_SECRET VK_APP_TOKEN SESSION_SECRET GOOGLE_API_KEY PORT=80 (используется в docker container) HOST=0.0.0.0 (специально для docker container)
Запуск: docker-compose up [-d] web
Для улучшения работы получения адреса из текста нужно разобраться с TerminCollection в pullenti Но в ближайшее время ожидаеся обновление: будут добавлены станции метро РФ и другие мелкие фиксы.
Бот
https://github.com/AnastasiaKolev/telegrambot-foodsharing Опрашивает бэк (в дальнейшем - бэк сам будет отправлять эвенты) на предмет новых сообщений. Хранение юзеров реализуется на стороне бота, но в дальнейшем необходимо сделать отдельный user service.
P.S.:
Разработанный проект является прототипом, который нельзя использовать на постоянное основе "как есть" без внедрения систем безопасности.