From e35fbd2513f71d97b9ced042ff7ce9a67074ba86 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Fri, 19 Jul 2024 17:47:03 +0200 Subject: [PATCH] add upgrader for compatibility with older data versions --- src/Upgrade/v1.ts | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/Upgrade/v1.ts diff --git a/src/Upgrade/v1.ts b/src/Upgrade/v1.ts new file mode 100644 index 00000000..31d1d548 --- /dev/null +++ b/src/Upgrade/v1.ts @@ -0,0 +1,101 @@ +import { + ChatMessage, + ChatObject, + MessageObjectContent, +} from "../Model/chatTypes"; + +// ChatMessage +export interface ChatMessageV1 { + channel: string; + sender: string; + body: string; + isoDate: string; + + messageObjectString?: string; +} + +export function upgradeMessageFromV1( + chatMessageV1: ChatMessageV1 +): ChatMessage { + const { channel, sender, body, isoDate, messageObjectString } = chatMessageV1; + return { + dataVersion: "v2", + + channel, + sender, + body, + dateSent: isoDate, + stringifiedObject: messageObjectString, + }; +} + +// MessageObject +export interface MessageObjectV1 { + id: string; + title: string; + contentVersions: { [key: string]: MessageObjectContentV1 }; +} + +export function upgradeMessageObjectFromV1( + messageObjectV1: MessageObjectV1 +): ChatObject { + const { id, title, contentVersions } = messageObjectV1; + + const upgradedContentVersions: { [key: string]: MessageObjectContent } = {}; + for (const entry of Object.entries(contentVersions)) { + const [id, object] = entry; + const upgraded = upgradeMessageObjectContentFromV1(object); + upgradedContentVersions[id] = upgraded; + } + + return { + dataVersion: "v2", + + id, + title, + + contentVersions: upgradedContentVersions, + }; +} + +// MessageObjectContent +export interface MessageObjectContentV1 { + isoDateVersionCreated: string; + id: string; + + noteContent?: string; + priority?: number; + categoryName?: string; + status?: string; + date?: string; + time?: string; +} + +export function upgradeMessageObjectContentFromV1( + messageObjectContentV1: MessageObjectContentV1 +): MessageObjectContent { + const { + isoDateVersionCreated, + id, + noteContent, + priority, + categoryName, + status, + date, + time, + } = messageObjectContentV1; + + return { + dataVersion: "v2", + + id, + creationDate: isoDateVersionCreated, + + noteText: noteContent, + priority, + category: categoryName, + status, + date, + time, + }; +}