import { CloudObject } from '../../lib/ncloud'; import * as Parse from 'parse'; export class Task extends CloudObject { protected override parseObject: Parse.Object; override id: string | null = null; title: string = ''; content: string = ''; startTime: string = new Date().toISOString(); endTime: string = new Date().toISOString(); completed: boolean = false; userId: string | null = null; constructor() { super('Task'); this.parseObject = new Parse.Object('Task'); } // 创建新任务 static async create(data: any): Promise { try { const currentUser = Parse.User.current(); if (!currentUser) { throw new Error('No user logged in'); } const task = new Task(); // 设置ACL const acl = new Parse.ACL(); acl.setPublicReadAccess(false); acl.setPublicWriteAccess(false); acl.setReadAccess(currentUser.id, true); acl.setWriteAccess(currentUser.id, true); task.parseObject.setACL(acl); // 设置任务数据 task.parseObject.set('title', data.title); task.parseObject.set('content', data.content || ''); task.parseObject.set('startTime', data.startTime || new Date().toISOString()); task.parseObject.set('endTime', data.endTime || new Date().toISOString()); task.parseObject.set('completed', data.completed || false); task.parseObject.set('userId', currentUser.id); task.parseObject.set('user', currentUser); // 保存到数据库 await task.parseObject.save(); // 设置本地数据 task.id = task.parseObject.id; task.title = data.title; task.content = data.content || ''; task.startTime = data.startTime || new Date().toISOString(); task.endTime = data.endTime || new Date().toISOString(); task.completed = data.completed || false; task.userId = currentUser.id; return task; } catch (error) { console.error('Failed to create task:', error); throw error; } } // 获取用户的所有任务 static async getUserTasks(userId: string): Promise { try { if (!userId) { throw new Error('userId is required'); } const query = new Parse.Query('Task'); query.equalTo('userId', userId); query.descending('createdAt'); const results = await query.find(); return results.map(result => { const task = new Task(); task.parseObject = result; task.id = result.id; const data = result.toJSON(); task.title = data['title']; task.content = data['content']; task.startTime = data['startTime']; task.endTime = data['endTime']; task.completed = data['completed']; task.userId = data['userId']; return task; }); } catch (error) { console.error('Failed to get user tasks:', error); throw error; } } // 保存任务更新 async saveTask(): Promise { try { if (!this.id) { throw new Error('Task ID is required for update'); } // 更新所有属性到 parseObject this.parseObject.set('title', this.title); this.parseObject.set('content', this.content); this.parseObject.set('startTime', this.startTime); this.parseObject.set('endTime', this.endTime); this.parseObject.set('completed', this.completed); await this.parseObject.save(); } catch (error) { console.error('Failed to save task:', error); throw error; } } // 删除任务 async delete(): Promise { try { if (!this.id) { throw new Error('Task ID is required for deletion'); } await this.parseObject.destroy(); } catch (error) { console.error('Failed to delete task:', error); throw error; } } // 从 Parse.Object 创建 Task 实例 static fromParseObject(parseObject: Parse.Object): Task { const task = new Task(); task.parseObject = parseObject; task.id = parseObject.id; const data = parseObject.toJSON(); task.title = data['title']; task.content = data['content']; task.startTime = data['startTime']; task.endTime = data['endTime']; task.completed = data['completed']; task.userId = data['userId']; return task; } }