You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
frontend/src/app/service/db/KeyValue.ts

74 lines
1.7 KiB

import {Model} from './Model';
export interface IKeyValue {
id?: number;
key: string;
value: string;
json: boolean;
offlineUpdatedAt?: string;
}
export class KeyValue extends Model<IKeyValue> implements IKeyValue {
id?: number;
key: string;
value: string;
json: boolean;
offlineUpdatedAt?: string;
public static getTableName() {
return 'keyValues';
}
public static getSchema() {
return '++id, key, value, json, offlineUpdatedAt';
}
constructor(key: string, value: string, json: boolean, offlineUpdatedAt?: string, id?: number) {
super();
this.key = key;
this.value = value;
this.json = json;
if ( typeof offlineUpdatedAt !== 'undefined' ) {
this.offlineUpdatedAt = offlineUpdatedAt;
}
if ( id ) {
this.id = id;
}
}
get data(): any {
if ( this.json ) {
return JSON.parse(this.value);
}
return this.value;
}
set data(val: any) {
if ( typeof val === 'string' ) {
this.json = false;
this.value = val;
} else {
this.json = true;
this.value = JSON.stringify(val);
}
}
public getSaveRecord(): any {
return {
...(this.id ? { id: this.id } : {}),
key: this.key,
value: this.value,
json: this.json,
...(typeof this.offlineUpdatedAt === 'undefined' ? {} : { offlineUpdatedAt: this.offlineUpdatedAt })
};
}
public getDatabase(): Dexie.Table<IKeyValue, number> {
return this.staticClass().dbService.table('keyValues') as Dexie.Table<IKeyValue, number>;
}
}