Update types & db schema (#3)

* Update types & db schema
This commit is contained in:
Kristina
2024-12-23 16:38:49 +04:00
committed by GitHub
parent 558e81f2f5
commit e2de49ec97
15 changed files with 154 additions and 13 deletions
BIN
View File
Binary file not shown.
+2
View File
@@ -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",
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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)
);
@@ -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
);
@@ -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:*",
+2 -1
View File
@@ -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"
+1
View File
@@ -1,2 +1,3 @@
export * from './message.ts'
export * from './notification.ts'
export * from './query.ts'
+8 -4
View File
@@ -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 {
+16 -4
View File
@@ -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
}
+47
View File
@@ -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<T> {
getResult(): T[]
loadNextPage(): Promise<void>
loadPrevPage(): Promise<void>
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
}