mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-30 03:39:39 +02:00
@@ -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);
|
||||
+3
-2
@@ -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:*",
|
||||
@@ -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,2 +1,3 @@
|
||||
export * from './message.ts'
|
||||
export * from './notification.ts'
|
||||
export * from './query.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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user