Files
tcg-server/tasks/tasks.model.js
chnxianyi 02b47f7ecf 更新
2025-09-30 17:39:59 +08:00

97 lines
2.6 KiB
JavaScript

const mongoose = require("mongoose");
const fs = require("fs");
const path = require("path");
const Schema = mongoose.Schema;
// Task data structure based on the documentation
const playerTaskSchema = new Schema({
taskId: { type: String, required: true },
assignedTime: { type: Date, required: true },
expireTime: { type: Date, required: true },
status: { type: Number, required: true, default: 0 }, // 0: Active, 1: Completed, 2: Expired, 3: Claimed
progress: { type: Number, required: true, default: 0 },
});
const playerTaskDataSchema = new Schema({
userId: { type: String, required: true, index: true },
tasks: [playerTaskSchema],
lastDailyTaskAssigned: { type: Date, default: null },
});
playerTaskDataSchema.methods.toObj = function () {
var elem = this.toObject();
delete elem.__v;
delete elem._id;
return elem;
};
const PlayerTaskData = mongoose.model("PlayerTaskData", playerTaskDataSchema);
exports.PlayerTaskData = PlayerTaskData;
// Task configuration storage
let taskConfigurations = [];
// Get all task configurations
exports.getAllTaskConfigs = async () => {
return taskConfigurations;
};
// Get task configuration by ID
exports.getTaskConfigById = async (taskId) => {
return taskConfigurations.find((task) => task.id === taskId);
};
// Get player tasks
exports.getPlayerTasks = async (userId) => {
try {
let playerTaskData = await PlayerTaskData.findOne({ userId: userId });
if (!playerTaskData) {
playerTaskData = new PlayerTaskData({
userId: userId,
tasks: [],
lastDailyTaskAssigned: null,
});
await playerTaskData.save();
}
return playerTaskData;
} catch (e) {
console.error("Error getting player tasks:", e);
return null;
}
};
// Save player tasks
exports.savePlayerTasks = async (playerTaskData) => {
try {
const updated = await PlayerTaskData.findOneAndUpdate(
{ userId: playerTaskData.userId },
playerTaskData,
{ new: true, upsert: true }
);
return updated;
} catch (e) {
console.error("Error saving player tasks:", e);
return null;
}
};
// Initialize task configurations from file
exports.initializeTaskConfig = (configPath) => {
try {
if (fs.existsSync(configPath)) {
const configFile = fs.readFileSync(configPath, "utf8");
taskConfigurations = JSON.parse(configFile);
console.log(`Loaded ${taskConfigurations.length} task configurations`);
} else {
console.log(
"Task configuration file not found, using empty configuration"
);
taskConfigurations = [];
}
} catch (e) {
console.error("Error initializing task configuration:", e);
taskConfigurations = [];
}
};