76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
const TasksModel = require("./tasks.model.js");
|
|
const TasksTool = require("./tasks.tool.js");
|
|
|
|
// Get all task configurations
|
|
exports.getAllTasks = async (req, res) => {
|
|
try {
|
|
const tasks = await TasksModel.getAllTaskConfigs();
|
|
res.status(200).send(tasks);
|
|
} catch (error) {
|
|
res.status(500).send({ error: "Internal server error" });
|
|
}
|
|
};
|
|
|
|
// Get player tasks
|
|
exports.getPlayerTasks = async (req, res) => {
|
|
try {
|
|
const userId = req.params.userId;
|
|
if (!userId) {
|
|
return res.status(400).send({ error: "User ID is required" });
|
|
}
|
|
|
|
const playerTasks = await TasksModel.getPlayerTasks(userId);
|
|
if (!playerTasks) {
|
|
return res.status(404).send({ error: "Player tasks not found" });
|
|
}
|
|
|
|
res.status(200).send(playerTasks);
|
|
} catch (error) {
|
|
res.status(500).send({ error: "Internal server error" });
|
|
}
|
|
};
|
|
|
|
// Save player tasks
|
|
exports.savePlayerTasks = async (req, res) => {
|
|
try {
|
|
const userId = req.params.userId;
|
|
if (!userId) {
|
|
return res.status(400).send({ error: "User ID is required" });
|
|
}
|
|
|
|
const tasksData = req.body;
|
|
tasksData.userId = userId;
|
|
|
|
const historyTasks = await TasksModel.getPlayerTasks(userId);
|
|
|
|
const updatedTasks = await TasksModel.savePlayerTasks(tasksData);
|
|
if (!updatedTasks) {
|
|
return res.status(500).send({ error: "Failed to save player tasks" });
|
|
}
|
|
|
|
// Give reward for completing a task
|
|
for (let i = 0; i < req.body.tasks.length; i++) {
|
|
const task = req.body.tasks[i];
|
|
const historyTask = historyTasks.tasks.find(
|
|
(t) => t.taskId === task.taskId
|
|
);
|
|
if (historyTask) {
|
|
if (historyTask.status != task.status) {
|
|
if (
|
|
task.status === TasksTool.TASK_STATUS.CLAIMED &&
|
|
historyTask.status === TasksTool.TASK_STATUS.COMPLETED
|
|
) {
|
|
// 任务可以领取奖励 且 历史任务状态为完成
|
|
const taskConfig = await TasksModel.getTaskConfigById(task.taskId);
|
|
await TasksTool.giveTaskReward(userId, taskConfig);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
res.status(200).send({ success: true });
|
|
} catch (error) {
|
|
res.status(500).send({ error: "Internal server error" });
|
|
}
|
|
};
|