Конструирование сервиса пользовательских опросов

Разделите управление опросами и приём голосов. Храните Poll, Option и Vote, проверяя принадлежность варианта опросу и правила повторного голосования.

Короткий ответ

Что ответить на собеседовании

Разделите управление опросами и приём голосов. Храните Poll, Option и Vote, проверяя принадлежность варианта опросу и правила повторного голосования.

Подробный разбор

Ответ с пояснениями

Условие

Разработайте сервис для проведения опросов среди пользователей системы. Каждый опрос состоит из вопроса и набора вариантов ответов, при этом должна быть возможность динамически добавлять новые опросы. Опишите архитектурную схему решения, указав ключевые компоненты для хранения данных, обработки логики опросов и взаимодействия с клиентскими приложениями.

Ответ

Разделите управление опросами и приём голосов. Храните Poll, Option и Vote, проверяя принадлежность варианта опросу и правила повторного голосования.

Poll содержит вопрос, статус и период доступности; Option — текст и ссылку на опрос; Vote — пользователя, опрос, вариант и время. При одном голосе на пользователя установите уникальность (poll_id, user_id). Анонимным опросам нужен отдельный договорённый способ ограничения повторов.

Административное API создаёт черновики и публикует новые опросы без изменения кода. Клиентское API получает активный опрос и отправляет выбор. Сервер проверяет статус и option, затем сохраняет голос транзакционно. Итоги вычисляются агрегацией или обновляемым кешем. После начала голосования варианты нельзя произвольно переиспользовать: потребуется версия или запрет смысловых правок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее