123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- class CloudObject {
- id: string ;
- className: string;
- data: Record<string, any> = {};
- createdAt: string | null = null; // 添加 createdAt 属性
- updatedAt: string | null = null; // 添加 updatedAt 属性
- constructor(className: string) {
- this.className = className;
- }
- toPointer(): { __type: string, className: string, objectId: string } {
- return { "__type": "Pointer", "className": this.className, "objectId": this.id };
- }
- set(json: Record<string, any>): void {
- Object.keys(json).forEach(key => {
- if (["objectId", "id", "createdAt", "updatedAt", "ACL"].indexOf(key) > -1) {
- return;
- }
- this.data[key] = json[key];
- });
- }
- get(key: string): any {
- return this.data[key] || null;
- }
- async save(): Promise<this> {
- let method: string = "POST";
- let url: string = `http://dev.fmode.cn:1337/parse/classes/${this.className}`;
- // 更新
- if (this.id) {
- url += `/${this.id}`;
- method = "PUT";
- }
- let body: string = JSON.stringify(this.data);
- let response: Response = await fetch(url, {
- "headers": {
- "content-type": "application/json;charset=UTF-8",
- "x-parse-application-id": "dev"
- },
- "body": body,
- "method": method,
- "mode": "cors",
- "credentials": "omit"
- });
- let result: any = await response.json();
- if (result.error) {
- console.error(result.error);
- }
- if (result.objectId) {
- this.id = result.objectId;
- }
- return this;
- }
- async destroy(): Promise<boolean> {
- if (!this.id) return false;
- let response: Response = await fetch(`http://dev.fmode.cn:1337/parse/classes/Doctor/${this.id}`, {
- "headers": {
- "x-parse-application-id": "dev"
- },
- "body": null,
- "method": "DELETE",
- "mode": "cors",
- "credentials": "omit"
- });
- let result: any = await response.json();
- if (result) {
- // this.id = null;
- }
- return true;
- }
- }
- class CloudQuery {
- className: string;
- whereOptions: Record<string, any> = {};
- constructor(className: string) {
- this.className = className;
- }
- greaterThan(key: string, value: any): void {
- if (!this.whereOptions[key]) this.whereOptions[key] = {};
- this.whereOptions[key]["$gt"] = value;
- }
- greaterThanAndEqualTo(key: string, value: any): void {
- if (!this.whereOptions[key]) this.whereOptions[key] = {};
- this.whereOptions[key]["$gte"] = value;
- }
- lessThan(key: string, value: any): void {
- if (!this.whereOptions[key]) this.whereOptions[key] = {};
- this.whereOptions[key]["$lt"] = value;
- }
- lessThanAndEqualTo(key: string, value: any): void {
- if (!this.whereOptions[key]) this.whereOptions[key] = {};
- this.whereOptions[key]["$lte"] = value;
- }
- equalTo(key: string, value: any): void {
- this.whereOptions[key] = value;
- }
- async get(id: string): Promise<Record<string, any>> {
- let url: string = `http://dev.fmode.cn:1337/parse/classes/${this.className}/${id}?`;
- let response: Response = await fetch(url, {
- "headers": {
- "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
- "x-parse-application-id": "dev"
- },
- "body": null,
- "method": "GET",
- "mode": "cors",
- "credentials": "omit"
- });
- let json: any = await response.json();
- return json || {};
- }
- async fetchData(url: string): Promise<any> {
- try {
- let response: Response = await fetch(url, {
- "headers": {
- "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
- "x-parse-application-id": "dev"
- },
- "body": null,
- "method": "GET",
- "mode": "cors",
- "credentials": "omit"
- });
- return await response.json();
- } catch (error) {
- console.error("Fetch error:", error);
- return null;
- }
- }
- async find(): Promise<Record<string, any>[]> {
- let url: string = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`;
- if (Object.keys(this.whereOptions).length) {
- let whereStr: string = JSON.stringify(this.whereOptions);
- url += `where=${whereStr}`;
- }
- let json: any = await this.fetchData(url);
- return json?.results || [];
- }
- async first(): Promise<CloudObject | null> {
- let url: string = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`;
- if (Object.keys(this.whereOptions).length) {
- let whereStr: string = JSON.stringify(this.whereOptions);
- url += `where=${whereStr}`;
- }
- let json: any = await this.fetchData(url);
- let exists: Record<string, any> | null = json?.results?.[0] || null;
- if (exists) {
- let existsObject: CloudObject = new CloudObject(this.className);
- existsObject.set(exists);
- existsObject.id = exists.objectId;
- existsObject.createdAt = exists.createdAt;
- existsObject.updatedAt = exists.updatedAt;
- return existsObject;
- }
- return null;
- }
- }
- export { CloudObject, CloudQuery };
|