Task.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { CloudObject } from '../ncloud';
  2. import * as Parse from 'parse';
  3. export enum TaskStatus {
  4. InProgress = 'inProgress',
  5. Completed = 'completed',
  6. Overdue = 'overdue'
  7. }
  8. export class Task extends CloudObject {
  9. title: string = '';
  10. content: string = '';
  11. completed: boolean = false;
  12. startTime?: Date;
  13. endTime?: Date;
  14. userId?: string;
  15. constructor() {
  16. super('Task');
  17. }
  18. static async create(data: Partial<Task>): Promise<Task> {
  19. const task = new Task();
  20. Object.assign(task, data);
  21. await task.saveTask();
  22. return task;
  23. }
  24. static fromParseObject(parseObject: Parse.Object): Task {
  25. const task = new Task();
  26. task.setParseObject(parseObject);
  27. return task;
  28. }
  29. override setParseObject(parseObject: Parse.Object<Parse.Attributes>) {
  30. super.setParseObject(parseObject);
  31. this.title = parseObject.get('title') || '';
  32. this.content = parseObject.get('content') || '';
  33. this.completed = parseObject.get('completed') || false;
  34. this.startTime = parseObject.get('startTime');
  35. this.endTime = parseObject.get('endTime');
  36. this.userId = parseObject.get('userId');
  37. }
  38. async saveTask(): Promise<void> {
  39. await this.save();
  40. }
  41. async delete(): Promise<void> {
  42. await this.destroy();
  43. }
  44. getStatus(): TaskStatus {
  45. if (this.completed) {
  46. return TaskStatus.Completed;
  47. }
  48. if (this.endTime && new Date() > this.endTime) {
  49. return TaskStatus.Overdue;
  50. }
  51. return TaskStatus.InProgress;
  52. }
  53. }