diff --git a/src/app/core/migration/legacy-models.ts b/src/app/core/migration/legacy-models.ts index 9ddc670e2e..740fdd3fe9 100644 --- a/src/app/core/migration/legacy-models.ts +++ b/src/app/core/migration/legacy-models.ts @@ -4,14 +4,13 @@ import {TaskArchive, TaskState} from '../../features/tasks/task.model'; import {BookmarkState} from '../../features/bookmark/store/bookmark.reducer'; import {NoteState} from '../../features/note/store/note.reducer'; import {Reminder} from '../../features/reminder/reminder.model'; -import {ProjectArchive} from '../../features/project/project.model'; import {MetricState} from '../../features/metric/metric.model'; import {ImprovementState} from '../../features/metric/improvement/improvement.model'; import {ObstructionState} from '../../features/metric/obstruction/obstruction.model'; import {TaskRepeatCfgState} from '../../features/task-repeat-cfg/task-repeat-cfg.model'; import {EntityState} from '@ngrx/entity'; import {TaskAttachment} from '../../features/tasks/task-attachment/task-attachment.model'; -import {Action} from '@ngrx/store'; +import {ProjectArchive} from '../../features/project/project-archive.model'; export interface LegacyAppBaseData { @@ -59,14 +58,17 @@ export interface LegacyAppDataComplete extends LegacyAppBaseData, LegacyAppDataF export interface LegacyPersistenceBaseModel { appDataKey: keyof LegacyAppBaseData; + load(isSkipMigration?: boolean): Promise; + save(state: T, isForce?: boolean): Promise; } - export interface LegacyPersistenceForProjectModel { appDataKey: keyof LegacyAppDataForProjects; + load(projectId: string): Promise; + save(projectId: string, state: S, isForce?: boolean): Promise; } diff --git a/src/app/core/migration/legacy-persistence.sevice.ts b/src/app/core/migration/legacy-persistence.sevice.ts index c71d8f1777..2d9961db3d 100644 --- a/src/app/core/migration/legacy-persistence.sevice.ts +++ b/src/app/core/migration/legacy-persistence.sevice.ts @@ -44,7 +44,7 @@ import {Obstruction, ObstructionState} from '../../features/metric/obstruction/o import {SnackService} from '../snack/snack.service'; import {DatabaseService} from '../persistence/database.service'; import {CompressionService} from '../compression/compression.service'; -import {ExportedProject, ProjectArchive, ProjectArchivedRelatedData} from '../../features/project/project.model'; +import {ExportedProject, ProjectArchive, ProjectArchivedRelatedData} from '../../features/project/project-archive.model'; import {DEFAULT_PROJECT_ID} from '../../features/project/project.const'; import {Action} from '@ngrx/store'; import {Injectable} from '@angular/core'; diff --git a/src/app/core/persistence/persistence.service.ts b/src/app/core/persistence/persistence.service.ts index d67906633c..705ac39580 100644 --- a/src/app/core/persistence/persistence.service.ts +++ b/src/app/core/persistence/persistence.service.ts @@ -31,10 +31,10 @@ import {DatabaseService} from './database.service'; import {DEFAULT_PROJECT_ID} from '../../features/project/project.const'; import { ExportedProject, - Project, ProjectArchive, ProjectArchivedRelatedData -} from '../../features/project/project.model'; +} from '../../features/project/project-archive.model'; +import {Project} from '../../features/project/project.model'; import {CompressionService} from '../compression/compression.service'; import {PersistenceBaseEntityModel, PersistenceBaseModel, PersistenceForProjectModel} from './persistence.model'; import {Metric, MetricState} from '../../features/metric/metric.model'; diff --git a/src/app/features/project/project-archive.model.ts b/src/app/features/project/project-archive.model.ts new file mode 100644 index 0000000000..413d854b46 --- /dev/null +++ b/src/app/features/project/project-archive.model.ts @@ -0,0 +1,30 @@ +import {NoteState} from '../note/store/note.reducer'; +import {BookmarkState} from '../bookmark/store/bookmark.reducer'; +import {Task, TaskState} from '../tasks/task.model'; +import {EntityState} from '@ngrx/entity'; +import {TaskAttachment} from '../tasks/task-attachment/task-attachment.model'; +import {Tag} from '../tag/tag.model'; +import {MetricState} from '../metric/metric.model'; +import {ImprovementState} from '../metric/improvement/improvement.model'; +import {ObstructionState} from '../metric/obstruction/obstruction.model'; +import {Project} from './project.model'; + +export interface ProjectArchivedRelatedData { + note?: NoteState; + bookmark?: BookmarkState; + task?: TaskState; + taskArchive?: EntityState; + taskAttachment?: EntityState; + taskTag?: EntityState; + metric?: MetricState; + improvement?: ImprovementState; + obstruction?: ObstructionState; +} + +export interface ExportedProject extends Project { + relatedModels: ProjectArchivedRelatedData; +} + +export interface ProjectArchive { + [key: string]: string; +} diff --git a/src/app/features/project/project.model.ts b/src/app/features/project/project.model.ts index 776be84f53..99b0e0ba9a 100644 --- a/src/app/features/project/project.model.ts +++ b/src/app/features/project/project.model.ts @@ -1,13 +1,4 @@ import {IssueIntegrationCfgs, IssueProviderKey} from '../issue/issue.model'; -import {NoteState} from '../note/store/note.reducer'; -import {BookmarkState} from '../bookmark/store/bookmark.reducer'; -import {EntityState} from '@ngrx/entity'; -import {Task, TaskState} from '../tasks/task.model'; -import {TaskAttachment} from '../tasks/task-attachment/task-attachment.model'; -import {MetricState} from '../metric/metric.model'; -import {ImprovementState} from '../metric/improvement/improvement.model'; -import {ObstructionState} from '../metric/obstruction/obstruction.model'; -import {Tag} from '../tag/tag.model'; import {WorkContextAdvancedCfgKey, WorkContextCommon} from '../work-context/work-context.model'; export type RoundTimeOption = '5M' | 'QUARTER' | 'HALF' | 'HOUR'; @@ -35,26 +26,6 @@ export interface ProjectCopy extends ProjectBasicCfg, WorkContextCommon { export type Project = Readonly; -export interface ProjectArchivedRelatedData { - note?: NoteState; - bookmark?: BookmarkState; - task?: TaskState; - taskArchive?: EntityState; - taskAttachment?: EntityState; - taskTag?: EntityState; - metric?: MetricState; - improvement?: ImprovementState; - obstruction?: ObstructionState; -} - -export interface ExportedProject extends Project { - relatedModels: ProjectArchivedRelatedData; -} - -export interface ProjectArchive { - [key: string]: string; -} - export type ProjectCfgFormKey = WorkContextAdvancedCfgKey | IssueProviderKey | 'basic' | 'theme'; diff --git a/src/app/features/project/project.service.ts b/src/app/features/project/project.service.ts index 7198eadebd..2fe9e0e0ab 100644 --- a/src/app/features/project/project.service.ts +++ b/src/app/features/project/project.service.ts @@ -1,6 +1,6 @@ import {Injectable} from '@angular/core'; import {Observable, of} from 'rxjs'; -import {ExportedProject, Project} from './project.model'; +import {Project} from './project.model'; import {PersistenceService} from '../../core/persistence/persistence.service'; import {select, Store} from '@ngrx/store'; import {ProjectActionTypes, UpdateProjectOrder} from './store/project.actions'; @@ -28,6 +28,7 @@ import {BreakNr, BreakTime, WorkContextType} from '../work-context/work-context. import {WorkContextService} from '../work-context/work-context.service'; import {GITHUB_TYPE, GITLAB_TYPE, JIRA_TYPE} from '../issue/issue.const'; import {GitlabCfg} from '../issue/providers/gitlab/gitlab'; +import {ExportedProject} from './project-archive.model'; @Injectable({ providedIn: 'root', diff --git a/src/app/imex/sync/sync.model.ts b/src/app/imex/sync/sync.model.ts index 26a06aafa8..7407a9032f 100644 --- a/src/app/imex/sync/sync.model.ts +++ b/src/app/imex/sync/sync.model.ts @@ -4,7 +4,6 @@ import {TaskArchive, TaskState} from '../../features/tasks/task.model'; import {BookmarkState} from '../../features/bookmark/store/bookmark.reducer'; import {NoteState} from '../../features/note/store/note.reducer'; import {Reminder} from '../../features/reminder/reminder.model'; -import {ProjectArchive} from '../../features/project/project.model'; import {MetricState} from '../../features/metric/metric.model'; import {ImprovementState} from '../../features/metric/improvement/improvement.model'; import {ObstructionState} from '../../features/metric/obstruction/obstruction.model'; @@ -19,6 +18,7 @@ import {initialTagState} from '../../features/tag/store/tag.reducer'; import {initialSimpleCounterState} from '../../features/simple-counter/store/simple-counter.reducer'; import {createEmptyEntity} from '../../util/create-empty-entity'; import {initialTaskRepeatCfgState} from '../../features/task-repeat-cfg/store/task-repeat-cfg.reducer'; +import {ProjectArchive} from '../../features/project/project-archive.model'; /** @deprecated */ export interface TaskAttachmentState extends EntityState { diff --git a/src/app/pages/project-overview-page/project-overview-page.component.ts b/src/app/pages/project-overview-page/project-overview-page.component.ts index 4a5fe46c52..c896e3344d 100644 --- a/src/app/pages/project-overview-page/project-overview-page.component.ts +++ b/src/app/pages/project-overview-page/project-overview-page.component.ts @@ -6,7 +6,7 @@ import {DialogConfirmComponent} from '../../ui/dialog-confirm/dialog-confirm.com import {standardListAnimation} from '../../ui/animations/standard-list.ani'; import {Subscription} from 'rxjs'; import {DragulaService} from 'ng2-dragula'; -import {ExportedProject, Project} from '../../features/project/project.model'; +import {Project} from '../../features/project/project.model'; import {PersistenceService} from '../../core/persistence/persistence.service'; import {download} from '../../util/download'; import {SnackService} from '../../core/snack/snack.service'; @@ -14,6 +14,7 @@ import {T} from '../../t.const'; import {THEME_COLOR_MAP} from '../../app.constants'; import {WorkContextService} from '../../features/work-context/work-context.service'; import {withLatestFrom} from 'rxjs/operators'; +import {ExportedProject} from '../../features/project/project-archive.model'; @Component({ selector: 'project-page',