У меня есть приложение для викторины с интерфейсом Laravel и интерфейсом Vue. Я работаю над разработкой API для этого приложения. Однако проблема, с которой я столкнулся, заключается в том, что мне нужна конечная точка API, которая: возвращает вопрос из таблицы вопросов, но для этого необходимо:
- Возвращать вопрос в случайном порядке каждый раз, когда вызывается метод
- Не быть вопросом, который пользователь уже видел (если не были просмотрены все вопросы)
До сих пор я рандомизировал коллекцию вопросов, используя метод случайного выбора и полагаясь на сеансы для хранения идентификаторов невидимых вопросов.
Однако, поскольку вызовы API не сохраняют состояние, сеансы работать не будут. Мне было интересно, каким образом я мог обойти это?
public function random(Module $module, $category){
// Get question ids in randomised order (for a given module + category)
$questions = Question::CategoryForModule(1, $module->id)->shuffle()->pluck('id');
// Name and Get unseenQuestions
$sessionName = 'unseenQuestions_' . $category . strval($module->id); //unseenQuestions_anatomy_2
if (session()->has($sessionName)) {
$unseenQuestions = session()->get($sessionName);
} else {
$unseenQuestions = collect($questions);
}
// Pop new Question
$newQuestionID = $unseenQuestions->shift();;
// Store unseenQuestions OR remove unseenQuestions (if it has no items);
if ($unseenQuestions->count() == 0) {
session()->forget($sessionName);
} else {
session()->put($sessionName, $unseenQuestions);
}
return new QuestionResource(Question::find($newQuestionID));
}