Не понятно для чего тут целая портянка кода. Не указали где храните данные (БД, Redis, etc.). Какие проблемы с текущим кодом?
Я вижу схему в БД такой:
1) Таблица пользователей - id, first_name, etc.;
2) Таблица постов - id, title, body, etc.;
3) Таблица голосов - id, user_id, post_id.
Для получения оценок на посте - запрос в таблицу №3 (where id = postid)
с API ботов TG не знаком, но предположу, что после отправки сообщения клиенту код сразу идет дальше, а не дожидается ответа от пользователя, для этого и сделаны callback'и, думаю, что CallbackQuery должен быть заполнен после нажатия кнопки, которое вызывается отдельным событием (возможно даже на простом получении сообщения от пользователя)
Георгий Кузнецов, примера нет. Создаете интерфейс сервиса, реализуете его. Регистрируете созданный сервис в контейнере, запрашиваете свой сервис там, где хотите открывать окна (ViewModels).