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 = []; } };