@NoFlame

Как создать модуль выполнения тасков и начисление опыта?

У меня есть проект, в котором я имею модель Юзера включает в себя следующие переменные:
имя, эмайл, хешпароль, автор, опыт и поинты,
и модель Тасков со следующими переменными:
тайтл, описание, поинты, опыт и закрепление айдишки, за юзером создавший таск.
У меня есть ЮзерКонтроллер:
в котором реализованы функции регистрации, логина, аутентификации, а также гетМи (для проверки токена) и ТаскКонтроллер:
который имеет функции получения всех тасков, поиск таска по его айде, создание, редактирование и удаление тасков, а также я добавил функцию завершения таска, которая выглядит так:
const completeTask = async(req, res) => {
   const { taskId } = req.params;
   const userId = req.userId;

   try {
     // Получить задачу по идентификатору
     const task = await Task.findById(taskId);

     if(!task) {
       res.status(404).json({ message: 'Task not found'});
       return;
     }

     // Получить пользователя по идентификатору
     const user = await UserModel.findById(userId);

     if(!user) {
       res.status(404).json({ message: 'User not found'});
       return;
     }

     // Проверить, выполнил ли пользователь эту задачу
     if (user.completedTasks.includes(taskId)) {
       res.status(400).json({ message: 'Task already completed by the user'});
       return;
     }

     // Обновить список выполненных задач пользователя
     user.completedTasks.push(taskId);
     await user.save();

     // Добавить очки и опыт пользователю
     user.points += task.points;
     user.experience += task.experience;
     await user.save();

     res.json({ message: 'Task completed successfully'});
   } catch (error) {
     res.status(500).json({ message: error.message });
   }
};

в главном файле у меня есть прописанные роуты для применения этих функций, а также реализованный на реакте фронт, в котором я уже могу создавать эти таски, просматривать их, редактировать и удалять, также работает логин, и регистрация, но я бы хотел узнать, как верно воплотить процесс выполнения тасков и получения опыта с поинтами юзеру, который это сделал, чтоб эти значения обновлялись. Потому что мне кажется, что код указанный выше не до конца выполняет поставленную мною задачку
Добавлю что проверяя через postman делая get запрос
http://localhost:4000/tasks/64734d717d8732f24d472f50
, я получаю в консоле инфу о таске, но таск не комплититься и поинты с опытом не начисляються юзеру который делает запрос
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Возможно, обновление опыта и поинтов после добавления задачи в список выполненных не работает, потому что вы делаете 2 последовательных вызова метода user.save(). Метод save() возвращает промис, который представляет собой будущий результат асинхронной операции. Попробуйте вместо двух вызовов save() объединить всё и сделать в одном.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы