From e2de49ec978bf5a5bb92dbbc1a0299b804dadf4a Mon Sep 17 00:00:00 2001 From: Kristina Date: Mon, 23 Dec 2024 16:38:49 +0400 Subject: [PATCH] Update types & db schema (#3) * Update types & db schema --- bun.lockb | Bin 56152 -> 56600 bytes package.json | 2 + packages/cockroach/migrations/01_message.sql | 24 +++++++++ packages/cockroach/migrations/02_patch.sql | 13 +++++ .../migrations/03_attachment.sql} | 5 +- packages/cockroach/migrations/04_reaction.sql | 12 +++++ .../migrations/05_notificationContext.sql | 15 ++++++ .../cockroach/migrations/06_notification.sql | 9 ++++ packages/{postgres => cockroach}/package.json | 4 +- .../{postgres => cockroach}/tsconfig.json | 0 packages/types/package.json | 3 +- packages/types/src/index.ts | 1 + packages/types/src/message.ts | 12 +++-- packages/types/src/notification.ts | 20 ++++++-- packages/types/src/query.ts | 47 ++++++++++++++++++ 15 files changed, 154 insertions(+), 13 deletions(-) create mode 100644 packages/cockroach/migrations/01_message.sql create mode 100644 packages/cockroach/migrations/02_patch.sql rename packages/{postgres/migrations/02_attachment.sql => cockroach/migrations/03_attachment.sql} (62%) create mode 100644 packages/cockroach/migrations/04_reaction.sql create mode 100644 packages/cockroach/migrations/05_notificationContext.sql create mode 100644 packages/cockroach/migrations/06_notification.sql rename packages/{postgres => cockroach}/package.json (80%) rename packages/{postgres => cockroach}/tsconfig.json (100%) create mode 100644 packages/types/src/query.ts diff --git a/bun.lockb b/bun.lockb index cb32c781b3eb1499f9d4a358807220d00e2e0ac6..22de1295d3aa3489aa57d4f6cf58200747fc3dcd 100755 GIT binary patch delta 8498 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 P_vm8|!$XX}dB6Pcrv6&S diff --git a/package.json b/package.json index e29626ced9..034075fe14 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ }, "devDependencies": { "@eslint/js": "^9.15.0", + "@types/bun": "^1.1.14", + "bun-types": "^1.1.38", "eslint": "^9.15.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", diff --git a/packages/cockroach/migrations/01_message.sql b/packages/cockroach/migrations/01_message.sql new file mode 100644 index 0000000000..1236df5ae2 --- /dev/null +++ b/packages/cockroach/migrations/01_message.sql @@ -0,0 +1,24 @@ +CREATE TABLE IF NOT EXISTS message +( + id UUID NOT NULL DEFAULT gen_random_uuid(), + content TEXT NOT NULL, + creator VARCHAR(255) NOT NULL, + created TIMESTAMPTZ NOT NULL, + + PRIMARY KEY (id) +); + +CREATE TABLE IF NOT EXISTS message_place +( + workspace_id UUID NOT NULL, + card_id UUID NOT NULL, + message_id UUID NOT NULL, + + PRIMARY KEY (workspace_id, card_id, message_id), + FOREIGN KEY (message_id) REFERENCES message (id) ON DELETE CASCADE +); + + + +CREATE INDEX idx_message_place_workspace_card ON message_place (workspace_id, card_id); +CREATE INDEX idx_message_place_message_id ON message_place (message_id); diff --git a/packages/cockroach/migrations/02_patch.sql b/packages/cockroach/migrations/02_patch.sql new file mode 100644 index 0000000000..0f3baa5731 --- /dev/null +++ b/packages/cockroach/migrations/02_patch.sql @@ -0,0 +1,13 @@ +CREATE TABLE IF NOT EXISTS patch +( + id INT8 NOT NULL DEFAULT unique_rowid(), + message_id UUID NOT NULL, + content TEXT NOT NULL, + creator VARCHAR(255) NOT NULL, + created TIMESTAMPTZ NOT NULL, + + PRIMARY KEY (id), + FOREIGN KEY (message_id) REFERENCES message (id) ON DELETE CASCADE +); + +CREATE INDEX idx_patch_message_id ON patch (message_id); \ No newline at end of file diff --git a/packages/postgres/migrations/02_attachment.sql b/packages/cockroach/migrations/03_attachment.sql similarity index 62% rename from packages/postgres/migrations/02_attachment.sql rename to packages/cockroach/migrations/03_attachment.sql index b74d0ec0ed..6f73204548 100644 --- a/packages/postgres/migrations/02_attachment.sql +++ b/packages/cockroach/migrations/03_attachment.sql @@ -1,11 +1,12 @@ CREATE TABLE IF NOT EXISTS attachment ( - message_id INT8 NOT NULL, + message_id UUID NOT NULL, card_id UUID NOT NULL, creator VARCHAR(255) NOT NULL, created TIMESTAMPTZ NOT NULL DEFAULT now(), - PRIMARY KEY (message_id, card_id) + PRIMARY KEY (message_id, card_id), + FOREIGN KEY (message_id) REFERENCES message (id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS attachment_message_idx ON attachment (message_id); diff --git a/packages/cockroach/migrations/04_reaction.sql b/packages/cockroach/migrations/04_reaction.sql new file mode 100644 index 0000000000..3d3af2c087 --- /dev/null +++ b/packages/cockroach/migrations/04_reaction.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS reaction +( + message_id UUID NOT NULL, + reaction VARCHAR(100) NOT NULL, + creator VARCHAR(255) NOT NULL, + created TIMESTAMPTZ NOT NULL DEFAULT now(), + + PRIMARY KEY (message_id, creator, reaction), + FOREIGN KEY (message_id) REFERENCES message (id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS reaction_message_idx ON reaction (message_id); diff --git a/packages/cockroach/migrations/05_notificationContext.sql b/packages/cockroach/migrations/05_notificationContext.sql new file mode 100644 index 0000000000..b461c45fc5 --- /dev/null +++ b/packages/cockroach/migrations/05_notificationContext.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS notification_context +( + id UUID NOT NULL DEFAULT gen_random_uuid(), + workspace_id UUID NOT NULL, + card_id UUID NOT NULL, + + person_workspace UUID NOT NULL, + + archived_from TIMESTAMPTZ, + last_view TIMESTAMPTZ, + last_update TIMESTAMPTZ, + + PRIMARY KEY (id), + UNIQUE (workspace_id, card_id, person_workspace) +); diff --git a/packages/cockroach/migrations/06_notification.sql b/packages/cockroach/migrations/06_notification.sql new file mode 100644 index 0000000000..df4bcce202 --- /dev/null +++ b/packages/cockroach/migrations/06_notification.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS notification +( + message_id UUID NOT NULL, + context UUID NOT NULL, + + PRIMARY KEY (message_id, context), + FOREIGN KEY (message_id) REFERENCES message (id) ON DELETE CASCADE, + FOREIGN KEY (context) REFERENCES notification_context (id) ON DELETE CASCADE +); diff --git a/packages/postgres/package.json b/packages/cockroach/package.json similarity index 80% rename from packages/postgres/package.json rename to packages/cockroach/package.json index 3a7faecac7..ac6244f46b 100644 --- a/packages/postgres/package.json +++ b/packages/cockroach/package.json @@ -1,10 +1,10 @@ { - "name": "@communication/postgres", + "name": "@communication/cockroach", "version": "0.1.0", "module": "src/index.ts", "type": "module", "devDependencies": { - "@types/bun": "^1.1.13" + "@types/bun": "^1.1.14" }, "dependencies": { "@communication/types": "workspace:*", diff --git a/packages/postgres/tsconfig.json b/packages/cockroach/tsconfig.json similarity index 100% rename from packages/postgres/tsconfig.json rename to packages/cockroach/tsconfig.json diff --git a/packages/types/package.json b/packages/types/package.json index b13a82c8f1..9c80d98093 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,10 +1,11 @@ { "name": "@communication/types", "version": "0.1.0", + "main": "src/index.ts", "module": "src/index.ts", "type": "module", "devDependencies": { - "@types/bun": "^1.1.13" + "@types/bun": "^1.1.14" }, "peerDependencies": { "typescript": "^5.6.3" diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 7a82e8d8a0..0d1134f9e2 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,2 +1,3 @@ export * from './message.ts' export * from './notification.ts' +export * from './query.ts' diff --git a/packages/types/src/message.ts b/packages/types/src/message.ts index e9b7fe9736..5641439e2e 100644 --- a/packages/types/src/message.ts +++ b/packages/types/src/message.ts @@ -1,9 +1,8 @@ -//TODO: Import from @platform export type CardID = string export type SocialID = string export type RichText = string -export type ID = bigint +export type ID = string export type MessageID = ID & { message: true } interface Object { @@ -14,14 +13,19 @@ interface Object { export interface Message extends Object { id: MessageID content: RichText - version: number + edited: Date reactions: Reaction[] attachments: Attachment[] } +export interface Patch extends Object { + message: MessageID + content: RichText +} + export interface Reaction extends Object { message: MessageID - reaction: number + reaction: string } export interface Attachment extends Object { diff --git a/packages/types/src/notification.ts b/packages/types/src/notification.ts index 5bfd1c2062..79b9b83a5e 100644 --- a/packages/types/src/notification.ts +++ b/packages/types/src/notification.ts @@ -1,14 +1,26 @@ -import type { Message, SocialID, CardID } from './message' +import type { Message, CardID, ID } from './message' + +export type ContextID = ID & { context: true } export interface Notification { message: Message - socialId: SocialID + context: ContextID read: boolean archived: boolean } export interface NotificationContext { + id: ContextID card: CardID - lastView: Date - lastUpdate: Date + workspace: string + personWorkspace: string + archivedFrom?: Date + lastView?: Date + lastUpdate?: Date +} + +export interface NotificationContextUpdate { + archivedFrom?: Date + lastView?: Date + lastUpdate?: Date } diff --git a/packages/types/src/query.ts b/packages/types/src/query.ts new file mode 100644 index 0000000000..302893542a --- /dev/null +++ b/packages/types/src/query.ts @@ -0,0 +1,47 @@ +import type { CardID, MessageID } from './message' +import type { ContextID } from './notification' + +export enum SortOrder { + Asc = 1, + Desc = -1 +} + +export enum Direction { + Backward = 1, + Forward = -1 +} + +export interface Window { + getResult(): T[] + + loadNextPage(): Promise + loadPrevPage(): Promise + + hasNextPage(): boolean + hasPrevPage(): boolean +} + +interface FindParams { + from?: Date + excluded?: boolean + direction?: Direction + sort?: SortOrder + limit?: number +} + +export interface FindMessagesParams extends FindParams { + id?: MessageID + card?: CardID +} + +export interface FindNotificationsParams extends FindParams { + context?: ContextID + message?: MessageID + read?: boolean + archived?: boolean +} + +export interface FindNotificationContextParams extends FindParams { + id?: ContextID + card?: CardID +}