From 59e2c480b85382d5ebb4644c03d98f9c9fd3533d Mon Sep 17 00:00:00 2001 From: Beyza Erkan <76122007+beyzaerkan@users.noreply.github.com> Date: Thu, 21 Jul 2022 21:43:12 +0300 Subject: [PATCH] proxy added (#46) --- lib/ModelInstance.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/ModelInstance.ts b/lib/ModelInstance.ts index 8a254aa..262a528 100644 --- a/lib/ModelInstance.ts +++ b/lib/ModelInstance.ts @@ -1,5 +1,5 @@ import Model from './Model'; -import { safeWrite } from './Utilities'; +import { safeWrite, getKeyValue } from './Utilities'; export interface DataInfo { redisKey: String, @@ -9,6 +9,7 @@ interface ModelFields { _model: Model; _previousDataValues: any | Object; _dataInfo: DataInfo; + _changedValues: any | Object; } /** @@ -36,10 +37,20 @@ class ModelInstance { _model: model, _previousDataValues: data, _dataInfo: dataInfo, + _changedValues: {}, }; Object.entries(data).forEach(([key, defaultValue]) => { this[key] = defaultValue; }); + const handler = { + set: (target: Object, key: string, value: any)=>{ + this._Model._changedValues[`${key}`] = getKeyValue(key)(target); + target[key as keyof Object] = value; + return true; + } + } + let proxy: any = new Proxy(this, handler); + return proxy; } /** @@ -48,7 +59,12 @@ class ModelInstance { public async save(): Promise { const { _Model, ...data } = this; const { redisClient, flexSchema, schema } = _Model._model; - await safeWrite(data, _Model._dataInfo.redisKey, redisClient, schema, flexSchema); + const keys = Object.keys(_Model._changedValues); + const tempData: Object = {}; + keys.forEach((key) => { + tempData[key as keyof Object] = data[key]; + }); + await safeWrite(tempData, _Model._dataInfo.redisKey, redisClient, schema, flexSchema); } /**