Task.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import { CloudObject } from '../../lib/ncloud';
  2. import * as Parse from 'parse';
  3. export class Task extends CloudObject {
  4. protected override parseObject: Parse.Object;
  5. override id: string | null = null;
  6. title: string = '';
  7. content: string = '';
  8. startTime: string = new Date().toISOString();
  9. endTime: string = new Date().toISOString();
  10. completed: boolean = false;
  11. userId: string | null = null;
  12. constructor() {
  13. super('Task');
  14. this.parseObject = new Parse.Object('Task');
  15. }
  16. // 创建新任务
  17. static async create(data: any): Promise<Task> {
  18. try {
  19. const currentUser = Parse.User.current();
  20. if (!currentUser) {
  21. throw new Error('No user logged in');
  22. }
  23. const task = new Task();
  24. // 设置ACL
  25. const acl = new Parse.ACL();
  26. acl.setPublicReadAccess(false);
  27. acl.setPublicWriteAccess(false);
  28. acl.setReadAccess(currentUser.id, true);
  29. acl.setWriteAccess(currentUser.id, true);
  30. task.parseObject.setACL(acl);
  31. // 设置任务数据
  32. task.parseObject.set('title', data.title);
  33. task.parseObject.set('content', data.content || '');
  34. task.parseObject.set('startTime', data.startTime || new Date().toISOString());
  35. task.parseObject.set('endTime', data.endTime || new Date().toISOString());
  36. task.parseObject.set('completed', data.completed || false);
  37. task.parseObject.set('userId', currentUser.id);
  38. task.parseObject.set('user', currentUser);
  39. // 保存到数据库
  40. await task.parseObject.save();
  41. // 设置本地数据
  42. task.id = task.parseObject.id;
  43. task.title = data.title;
  44. task.content = data.content || '';
  45. task.startTime = data.startTime || new Date().toISOString();
  46. task.endTime = data.endTime || new Date().toISOString();
  47. task.completed = data.completed || false;
  48. task.userId = currentUser.id;
  49. return task;
  50. } catch (error) {
  51. console.error('Failed to create task:', error);
  52. throw error;
  53. }
  54. }
  55. // 获取用户的所有任务
  56. static async getUserTasks(userId: string): Promise<Task[]> {
  57. try {
  58. if (!userId) {
  59. throw new Error('userId is required');
  60. }
  61. const query = new Parse.Query('Task');
  62. query.equalTo('userId', userId);
  63. query.descending('createdAt');
  64. const results = await query.find();
  65. return results.map(result => {
  66. const task = new Task();
  67. task.parseObject = result;
  68. task.id = result.id;
  69. const data = result.toJSON();
  70. task.title = data['title'];
  71. task.content = data['content'];
  72. task.startTime = data['startTime'];
  73. task.endTime = data['endTime'];
  74. task.completed = data['completed'];
  75. task.userId = data['userId'];
  76. return task;
  77. });
  78. } catch (error) {
  79. console.error('Failed to get user tasks:', error);
  80. throw error;
  81. }
  82. }
  83. // 保存任务更新
  84. async saveTask(): Promise<void> {
  85. try {
  86. if (!this.id) {
  87. throw new Error('Task ID is required for update');
  88. }
  89. // 更新所有属性到 parseObject
  90. this.parseObject.set('title', this.title);
  91. this.parseObject.set('content', this.content);
  92. this.parseObject.set('startTime', this.startTime);
  93. this.parseObject.set('endTime', this.endTime);
  94. this.parseObject.set('completed', this.completed);
  95. await this.parseObject.save();
  96. } catch (error) {
  97. console.error('Failed to save task:', error);
  98. throw error;
  99. }
  100. }
  101. // 删除任务
  102. async delete(): Promise<void> {
  103. try {
  104. if (!this.id) {
  105. throw new Error('Task ID is required for deletion');
  106. }
  107. await this.parseObject.destroy();
  108. } catch (error) {
  109. console.error('Failed to delete task:', error);
  110. throw error;
  111. }
  112. }
  113. // 从 Parse.Object 创建 Task 实例
  114. static fromParseObject(parseObject: Parse.Object): Task {
  115. const task = new Task();
  116. task.parseObject = parseObject;
  117. task.id = parseObject.id;
  118. const data = parseObject.toJSON();
  119. task.title = data['title'];
  120. task.content = data['content'];
  121. task.startTime = data['startTime'];
  122. task.endTime = data['endTime'];
  123. task.completed = data['completed'];
  124. task.userId = data['userId'];
  125. return task;
  126. }
  127. }