https://otus.ru/lessons/java-professional
Разработать сервис, позволяющий найти ближайший работающий банкомат с функцией выдачи денег.
Практическое применение: Найти гарантированно, к примеру, ночью, где можно снять наличные из банкомата.
Есть доступное API банкоматов https://api.alfabank.ru/node/237, где возможно выполнить запрос GET /atms/status, получив список банкоматов, используя ключ AvailableNow, фильтруем список работающих АТМ с функцией выдачи денег, далее при помощи Coordinates вычисляем ближайший банкомат по отношению к нашей позиции. Текущие координаты получаем из Telegram.
Приложение должно:
- Принимать запросы клиента из Telegram
- Находить ближайший работающий банкомат, в котором доступна выдача наличных денег
- Направлять клиенту ответ в Telegram, содержащий адрес ближайшего банкомата
Архитектура приложения:
- Три микросервиса: клиент для Telegram, клиент для ATM, сервис бизнес-логики
- Взаимодействие между мс по REST API (если время останется, Messaging)
- Хранение данных in-memory (если время будет, хранить историю запросов в локальной БД)
Цели проекта:
- Исследовать API Telegram
- Практика построения микросервисов
- Практика работы с REST, OpenAPI
Технологический стек:
- Spring Boot 2+
- REST, OpenAPI
- Heroku
- опционально PostgreSQL, RabbitMQ/Kafka
инструкция по созданию базового функционала для бота https://habr.com/ru/post/476306/
https://api.alfabank.ru/node/237 https://api.alfabank.ru/man_cert_rsa
Формула "гаверсинуса":
const double R=6371; // Earth's radius
double sin1=sin((lat1-lat2)/2);
double sin2=sin((lon1-lon2)/2);
return 2*R*asin(sqrt(sin1*sin1+sin2*sin2*cos(lat1)*cos(lat2)));
openssl pkcs12 -in apidevelopers.pfx -clcerts -nokeys -out apidevelopers.crt
openssl pkcs12 -export -in apidevelopers.crt -inkey apidevelopers.key -certfile apidevelopers.crt -out apidevelopers.p12
для просмотра SSL -Djavax.net.debug=all
- настройка CI/CD в github и деплой в heroku
- интеграция с Yandex картами, вычисление адреса по координатам
- настройка мониторинга приложения Prometheus/Grafana