From 1012edbd42f8bb99217437843e8a455d7b729dfb Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Fri, 2 Oct 2020 14:15:37 +0200 Subject: [PATCH] feat: improve data repair handling #552 --- src/app/core/data-repair/data-repair.service.ts | 10 +++------- src/app/core/data-repair/data-repair.util.ts | 5 +++++ .../core/data-repair/is-data-repair-possible.util.ts | 7 +++++++ 3 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 src/app/core/data-repair/is-data-repair-possible.util.ts diff --git a/src/app/core/data-repair/data-repair.service.ts b/src/app/core/data-repair/data-repair.service.ts index 6cd306bf3a..0f27ed53a8 100644 --- a/src/app/core/data-repair/data-repair.service.ts +++ b/src/app/core/data-repair/data-repair.service.ts @@ -3,6 +3,7 @@ import { AppDataComplete } from '../../imex/sync/sync.model'; import { T } from '../../t.const'; import { TranslateService } from '@ngx-translate/core'; import { dataRepair } from './data-repair.util'; +import { isDataRepairPossible } from './is-data-repair-possible.util'; @Injectable({ providedIn: 'root' @@ -19,13 +20,8 @@ export class DataRepairService { } isRepairPossibleAndConfirmed(dataIn: AppDataComplete): boolean { - const isDataRepairPossible: boolean = - typeof dataIn === 'object' && dataIn !== null - && typeof dataIn.task === 'object' && dataIn.task !== null - && typeof dataIn.project === 'object' && dataIn.project !== null - - if (!isDataRepairPossible) { - alert('Data damaged, repair not possible.') + if (!isDataRepairPossible(dataIn)) { + alert('Data damaged, repair not possible.'); return false; } return confirm(this._translateService.instant(T.CONFIRM.AUTO_FIX)); diff --git a/src/app/core/data-repair/data-repair.util.ts b/src/app/core/data-repair/data-repair.util.ts index c003bd8b5d..2d601f629c 100644 --- a/src/app/core/data-repair/data-repair.util.ts +++ b/src/app/core/data-repair/data-repair.util.ts @@ -1,10 +1,15 @@ import { AppBaseDataEntityLikeStates, AppDataComplete } from '../../imex/sync/sync.model'; import { TagCopy } from '../../features/tag/tag.model'; import { ProjectCopy } from '../../features/project/project.model'; +import { isDataRepairPossible } from './is-data-repair-possible.util'; const ENTITY_STATE_KEYS: (keyof AppDataComplete)[] = ['task', 'taskArchive', 'taskRepeatCfg', 'tag', 'project', 'simpleCounter']; export const dataRepair = (data: AppDataComplete): AppDataComplete => { + if (!isDataRepairPossible(data)) { + throw new Error('Data repair attempted but not possible'); + } + // console.time('dataRepair'); let dataOut: AppDataComplete = data; // let dataOut: AppDataComplete = dirtyDeepCopy(data); diff --git a/src/app/core/data-repair/is-data-repair-possible.util.ts b/src/app/core/data-repair/is-data-repair-possible.util.ts new file mode 100644 index 0000000000..d4062364a6 --- /dev/null +++ b/src/app/core/data-repair/is-data-repair-possible.util.ts @@ -0,0 +1,7 @@ +import { AppDataComplete } from '../../imex/sync/sync.model'; + +export const isDataRepairPossible = (data: AppDataComplete): boolean => { + return typeof data === 'object' && data !== null + && typeof data.task === 'object' && data.task !== null + && typeof data.project === 'object' && data.project !== null; +};