|
|
@@ -46,4 +46,212 @@ export class CloudQuery {
|
|
|
throw error;
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+export class Task extends CloudObject {
|
|
|
+ objectId?: string;
|
|
|
+ title: string = '';
|
|
|
+ content: string = '';
|
|
|
+ userId: string = '';
|
|
|
+ completed: boolean = false;
|
|
|
+ startTime?: Date;
|
|
|
+ endTime?: Date;
|
|
|
+ createdAt?: Date;
|
|
|
+ updatedAt?: Date;
|
|
|
+
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ this.parseObject = new Parse.Object('Task');
|
|
|
+ }
|
|
|
+
|
|
|
+ static fromParseObject(parseObject: Parse.Object): Task {
|
|
|
+ const task = new Task();
|
|
|
+ task.setParseObject(parseObject);
|
|
|
+ task.objectId = parseObject.id;
|
|
|
+ task.title = parseObject.get('title');
|
|
|
+ task.content = parseObject.get('content');
|
|
|
+ task.userId = parseObject.get('userId');
|
|
|
+ task.completed = parseObject.get('completed');
|
|
|
+ task.startTime = parseObject.get('startTime');
|
|
|
+ task.endTime = parseObject.get('endTime');
|
|
|
+ task.createdAt = parseObject.get('createdAt');
|
|
|
+ task.updatedAt = parseObject.get('updatedAt');
|
|
|
+ return task;
|
|
|
+ }
|
|
|
+
|
|
|
+ override async save(): Promise<void> {
|
|
|
+ const currentUser = Parse.User.current();
|
|
|
+ if (!currentUser) {
|
|
|
+ throw new Error('User not logged in');
|
|
|
+ }
|
|
|
+
|
|
|
+ this.parseObject.set('title', this.title);
|
|
|
+ this.parseObject.set('content', this.content);
|
|
|
+ this.parseObject.set('userId', currentUser.id);
|
|
|
+ this.parseObject.set('completed', this.completed);
|
|
|
+ this.parseObject.set('startTime', this.startTime);
|
|
|
+ this.parseObject.set('endTime', this.endTime);
|
|
|
+
|
|
|
+ // 设置 ACL
|
|
|
+ const acl = new Parse.ACL(currentUser);
|
|
|
+ acl.setPublicReadAccess(false);
|
|
|
+ acl.setPublicWriteAccess(false);
|
|
|
+ this.parseObject.setACL(acl);
|
|
|
+
|
|
|
+ await super.save();
|
|
|
+ }
|
|
|
+
|
|
|
+ async destroy(): Promise<void> {
|
|
|
+ await this.parseObject.destroy();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export class FocusRecord extends CloudObject {
|
|
|
+ objectId?: string;
|
|
|
+ userId: string = '';
|
|
|
+ duration: number = 0;
|
|
|
+ category: string = '';
|
|
|
+ startTime?: Date;
|
|
|
+ endTime?: Date;
|
|
|
+ completed: boolean = false;
|
|
|
+ createdAt?: Date;
|
|
|
+ updatedAt?: Date;
|
|
|
+
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ this.parseObject = new Parse.Object('FocusRecord');
|
|
|
+ }
|
|
|
+
|
|
|
+ static fromParseObject(parseObject: Parse.Object): FocusRecord {
|
|
|
+ const record = new FocusRecord();
|
|
|
+ record.setParseObject(parseObject);
|
|
|
+ record.objectId = parseObject.id;
|
|
|
+ record.userId = parseObject.get('userId');
|
|
|
+ record.duration = parseObject.get('duration');
|
|
|
+ record.category = parseObject.get('category');
|
|
|
+ record.startTime = parseObject.get('startTime');
|
|
|
+ record.endTime = parseObject.get('endTime');
|
|
|
+ record.completed = parseObject.get('completed');
|
|
|
+ record.createdAt = parseObject.get('createdAt');
|
|
|
+ record.updatedAt = parseObject.get('updatedAt');
|
|
|
+ return record;
|
|
|
+ }
|
|
|
+
|
|
|
+ override async save(): Promise<void> {
|
|
|
+ const currentUser = Parse.User.current();
|
|
|
+ if (!currentUser) {
|
|
|
+ throw new Error('User not logged in');
|
|
|
+ }
|
|
|
+
|
|
|
+ this.parseObject.set('userId', currentUser.id);
|
|
|
+ this.parseObject.set('duration', this.duration);
|
|
|
+ this.parseObject.set('category', this.category);
|
|
|
+ this.parseObject.set('startTime', this.startTime);
|
|
|
+ this.parseObject.set('endTime', this.endTime);
|
|
|
+ this.parseObject.set('completed', this.completed);
|
|
|
+
|
|
|
+ // 设置 ACL
|
|
|
+ const acl = new Parse.ACL(currentUser);
|
|
|
+ acl.setPublicReadAccess(false);
|
|
|
+ acl.setPublicWriteAccess(false);
|
|
|
+ this.parseObject.setACL(acl);
|
|
|
+
|
|
|
+ await super.save();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export class FocusRecordService {
|
|
|
+ static async createRecord(data: {
|
|
|
+ duration: number;
|
|
|
+ category: string;
|
|
|
+ startTime: Date;
|
|
|
+ endTime: Date;
|
|
|
+ completed: boolean;
|
|
|
+ }): Promise<FocusRecord> {
|
|
|
+ try {
|
|
|
+ const record = new FocusRecord();
|
|
|
+ Object.assign(record, data);
|
|
|
+ await record.save();
|
|
|
+ return record;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('创建专注记录失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static async getRecords(): Promise<FocusRecord[]> {
|
|
|
+ try {
|
|
|
+ const query = new CloudQuery('FocusRecord');
|
|
|
+ query.equalTo('userId', Parse.User.current()?.id);
|
|
|
+ const results = await query.find();
|
|
|
+ return results.map(result => {
|
|
|
+ if (result instanceof Parse.Object) {
|
|
|
+ return FocusRecord.fromParseObject(result);
|
|
|
+ }
|
|
|
+ return result as FocusRecord;
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取专注记录失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export class TaskService {
|
|
|
+ static async getTasks(): Promise<Task[]> {
|
|
|
+ try {
|
|
|
+ const query = new CloudQuery('Task');
|
|
|
+ query.equalTo('user', Parse.User.current());
|
|
|
+ const results = await query.find();
|
|
|
+ return results.map(result => {
|
|
|
+ if (result instanceof Parse.Object) {
|
|
|
+ return Task.fromParseObject(result);
|
|
|
+ }
|
|
|
+ return result as Task;
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取任务失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static async createTask(taskData: {
|
|
|
+ title: string;
|
|
|
+ content: string;
|
|
|
+ completed: boolean;
|
|
|
+ startTime?: Date;
|
|
|
+ endTime?: Date;
|
|
|
+ }): Promise<Task> {
|
|
|
+ try {
|
|
|
+ const task = new Task();
|
|
|
+ task.title = taskData.title;
|
|
|
+ task.content = taskData.content;
|
|
|
+ task.completed = taskData.completed;
|
|
|
+ task.startTime = taskData.startTime;
|
|
|
+ task.endTime = taskData.endTime;
|
|
|
+ await task.save();
|
|
|
+ return task;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('创建任务失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static async updateTask(task: Task): Promise<void> {
|
|
|
+ try {
|
|
|
+ await task.save();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('更新任务失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static async deleteTask(task: Task): Promise<void> {
|
|
|
+ try {
|
|
|
+ await task.destroy();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('删除任务失败:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|