diff --git a/src/app/core/migrate/migrate.service.ts b/src/app/core/migrate/migrate.service.ts index dcf237d..133e2d1 100644 --- a/src/app/core/migrate/migrate.service.ts +++ b/src/app/core/migrate/migrate.service.ts @@ -15,6 +15,7 @@ import { initialTaskState } from '../../tasks/store/task.reducer'; import { EntityState } from '@ngrx/entity'; import { DEFAULT_TASK, Task } from '../../tasks/task.model'; import * as moment from 'moment'; +import { JiraIssue } from '../../issue/jira/jira-issue/jira-issue.model'; @Injectable({ providedIn: 'root' @@ -101,9 +102,61 @@ export class MigrateService { }); const doneTaskState = this._transformTasks(op.data.doneBacklogTasks); - await this._persistenceService.saveToTaskArchiveForProject(op.id, { - ...doneTaskState, - }); + await this._persistenceService.saveToTaskArchiveForProject(op.id, doneTaskState); + + const issueState = this._getJiraIssuesFromTasks(op.data.tasks.concat(op.data.backlogTasks, op.data.doneBacklogTasks)); + if (issueState) { + await this._persistenceService.saveIssuesForProject(op.id, 'JIRA', issueState); + } + } + + private _getJiraIssuesFromTasks(oldTasks: OldTask[]): EntityState | null { + const flatTasks = oldTasks + .filter(t => !!t) + .reduce((acc, t) => acc.concat(t.subTasks), []) + .filter(t => !!t); + const transformedIssues = flatTasks + .filter(t => t.orignalId && t.originalType === 'JIRA') + .map(this._transformJiraIssue); + + if (!transformedIssues || !transformedIssues.length) { + return null; + } + + return { + entities: transformedIssues.reduce((acc, issue) => { + return { + ...acc, + [issue.id]: issue + }; + }, {}), + ids: transformedIssues.map(issue => issue.id), + }; + } + + private _transformJiraIssue(ot: OldTask): JiraIssue { + return { + // copied data + key: ot.originalKey, + id: ot.originalId, + summary: ot.title, + timeestimate: ot.originalEstimate, + timespent: 0, + description: ot.notes, + updated: ot.originalUpdated, + url: ot.originalLink, + + // not enough data on old model + components: [], + status: null, + attachments: [], + assignee: null, + changelog: null, + + // new properties + comments: [], + wasUpdated: false, + }; } private _transformTasks(oldTasks: OldTask[]): EntityState { diff --git a/src/app/issue/jira/jira-issue/store/jira-issue.reducer.ts b/src/app/issue/jira/jira-issue/store/jira-issue.reducer.ts index 40c28fa..984cfc2 100644 --- a/src/app/issue/jira/jira-issue/store/jira-issue.reducer.ts +++ b/src/app/issue/jira/jira-issue/store/jira-issue.reducer.ts @@ -8,8 +8,6 @@ import { IssueProviderKey } from '../../../issue'; export const JIRA_ISSUE_FEATURE_NAME: IssueProviderKey = 'JIRA'; export interface JiraIssueState extends EntityState { - // additional entities state properties - currentJiraIssueId: string | null; } export const jiraIssueAdapter: EntityAdapter = createEntityAdapter(); @@ -27,14 +25,10 @@ export const selectAllJiraIssues = createSelector(selectJiraIssueFeatureState, s // select the total user count export const selectJiraIssueTotal = createSelector(selectJiraIssueFeatureState, selectTotal); -export const selectCurrentJiraIssue = createSelector(selectJiraIssueFeatureState, state => state.currentJiraIssueId); - // REDUCER // ------- -export const initialJiraIssueState: JiraIssueState = jiraIssueAdapter.getInitialState({ - currentJiraIssueId: null, -}); +export const initialJiraIssueState: JiraIssueState = jiraIssueAdapter.getInitialState({}); export function jiraIssueReducer( state: JiraIssueState = initialJiraIssueState,