mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-12 12:47:45 +02:00
Api fixes v5 (#55)
Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>
This commit is contained in:
@@ -96,7 +96,7 @@ export class CockroachAdapter implements DbAdapter {
|
||||
data?: MessageData,
|
||||
externalId?: string,
|
||||
id?: MessageID
|
||||
): Promise<MessageID> {
|
||||
): Promise<{ id: MessageID; created: Date }> {
|
||||
return await this.message.createMessage(card, type, content, creator, created, data, externalId, id)
|
||||
}
|
||||
|
||||
@@ -340,9 +340,9 @@ class CockroachClient implements SqlClient {
|
||||
}
|
||||
|
||||
cursor<T = SqlRow>(query: string, params?: SqlParams, size?: number): AsyncIterable<NonNullable<T[][number]>[]> {
|
||||
const sql = params !== undefined && params.length > 0 ? injectVars(query, params) : query
|
||||
// const sql = params !== undefined && params.length > 0 ? injectVars(query, params) : query
|
||||
|
||||
return this.sql.unsafe<T[]>(sql).cursor(size)
|
||||
return this.sql.unsafe<T[]>(query, params).cursor(size)
|
||||
}
|
||||
|
||||
close(): void {
|
||||
|
||||
@@ -97,14 +97,14 @@ export function connect(connectionString: string, database?: string): PostgresCl
|
||||
|
||||
if (existing === undefined) {
|
||||
const sql = postgres(connectionString, {
|
||||
connection: {
|
||||
application_name: 'communication'
|
||||
},
|
||||
database,
|
||||
max: 5,
|
||||
fetch_types: false,
|
||||
prepare: false,
|
||||
...extraOptions
|
||||
prepare: true,
|
||||
...extraOptions,
|
||||
connection: {
|
||||
application_name: 'communication'
|
||||
}
|
||||
})
|
||||
|
||||
existing = new PostgresClientReferenceImpl(sql, () => {
|
||||
|
||||
@@ -65,7 +65,7 @@ export class MessagesDb extends BaseDb {
|
||||
data?: MessageData,
|
||||
externalId?: string,
|
||||
id?: MessageID
|
||||
): Promise<MessageID> {
|
||||
): Promise<{ id: MessageID; created: Date }> {
|
||||
const db: Omit<MessageDb, 'id'> & { id?: MessageID } = {
|
||||
type,
|
||||
workspace_id: this.workspace,
|
||||
@@ -89,13 +89,22 @@ export class MessagesDb extends BaseDb {
|
||||
}
|
||||
|
||||
const placeholders = keys.map((key, i) => `$${i + 1}::${(messageSchema as any)[key]}`)
|
||||
const conflictClause =
|
||||
externalId != null
|
||||
? `ON CONFLICT (workspace_id, card_id, external_id)
|
||||
DO UPDATE SET external_id = EXCLUDED.external_id`
|
||||
: ''
|
||||
|
||||
const sql = `INSERT INTO ${TableName.Message} (${keys.join(', ')})
|
||||
VALUES (${placeholders.join(', ')})
|
||||
RETURNING id::text`
|
||||
${conflictClause}
|
||||
RETURNING id::text, created`
|
||||
|
||||
const result = await this.execute(sql, values, 'insert message')
|
||||
const createdR = new Date(result[0].created)
|
||||
const idR = result[0].id as MessageID
|
||||
|
||||
return result.map((it: any) => it.id)[0]
|
||||
return { id: idR, created: createdR }
|
||||
}
|
||||
|
||||
async removeMessages(card: CardID, query: RemoveMessageQuery): Promise<MessageID[]> {
|
||||
|
||||
@@ -44,8 +44,10 @@ function escape(value: any): string {
|
||||
return `'${value.replace(/'/g, "''")}'`
|
||||
case 'bigint':
|
||||
return value.toString()
|
||||
case 'object':
|
||||
return `'${JSON.stringify(value)}'`
|
||||
case 'object': {
|
||||
const json = JSON.stringify(value).replace(/'/g, "''")
|
||||
return `'${json}'`
|
||||
}
|
||||
default:
|
||||
throw new Error(`Unsupported value type: ${typeof value}`)
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ export interface DbAdapter {
|
||||
data?: MessageData,
|
||||
externalId?: string,
|
||||
id?: MessageID
|
||||
): Promise<MessageID>
|
||||
): Promise<{ id: MessageID; created: Date }>
|
||||
removeMessages(card: CardID, query: RemoveMessageQuery): Promise<MessageID[]>
|
||||
|
||||
createPatch(
|
||||
|
||||
@@ -36,7 +36,6 @@ import {
|
||||
type CreateFileEvent,
|
||||
type CreateLabelEvent,
|
||||
type CreateMessageEvent,
|
||||
type CreateMessageResult,
|
||||
type CreateMessagesGroupEvent,
|
||||
type CreateNotificationContextEvent,
|
||||
type CreateNotificationEvent,
|
||||
@@ -235,7 +234,7 @@ export class DatabaseMiddleware extends BaseMiddleware implements Middleware {
|
||||
|
||||
private async createMessage(event: CreateMessageEvent): Promise<Result> {
|
||||
const created = event.created ?? new Date()
|
||||
const id = await this.db.createMessage(
|
||||
const result = await this.db.createMessage(
|
||||
event.card,
|
||||
event.messageType,
|
||||
event.content,
|
||||
@@ -246,12 +245,12 @@ export class DatabaseMiddleware extends BaseMiddleware implements Middleware {
|
||||
event.id
|
||||
)
|
||||
const message: Message = {
|
||||
id,
|
||||
id: result.id,
|
||||
type: event.messageType,
|
||||
card: event.card,
|
||||
content: event.content,
|
||||
creator: event.creator,
|
||||
created,
|
||||
created: result.created,
|
||||
data: event.data,
|
||||
externalId: event.externalId,
|
||||
reactions: [],
|
||||
@@ -263,10 +262,6 @@ export class DatabaseMiddleware extends BaseMiddleware implements Middleware {
|
||||
cardType: event.cardType,
|
||||
message
|
||||
}
|
||||
const result: CreateMessageResult = {
|
||||
id,
|
||||
created
|
||||
}
|
||||
return {
|
||||
responseEvent,
|
||||
result
|
||||
|
||||
@@ -20,7 +20,6 @@ import {
|
||||
NotificationRequestEventType,
|
||||
type RequestEvent
|
||||
} from '@hcengineering/communication-sdk-types'
|
||||
import type { CardID } from '@hcengineering/communication-types'
|
||||
|
||||
import type { TriggerCtx, TriggerFn, Triggers } from '../types'
|
||||
|
||||
@@ -46,15 +45,6 @@ async function removeThreads(ctx: TriggerCtx, event: CardRemovedEvent): Promise<
|
||||
return []
|
||||
}
|
||||
|
||||
async function removeMessages(ctx: TriggerCtx, event: CardRemovedEvent): Promise<RequestEvent[]> {
|
||||
await ctx.db.removeMessages(event.card, {})
|
||||
await ctx.db.removePatches(event.card)
|
||||
await ctx.db.removeFiles(event.card, {})
|
||||
await removeMessageGroups(ctx, event.card)
|
||||
|
||||
return []
|
||||
}
|
||||
|
||||
async function removeNotificationContexts(ctx: TriggerCtx, event: CardRemovedEvent): Promise<RequestEvent[]> {
|
||||
const result: RequestEvent[] = []
|
||||
const contexts = await ctx.db.findNotificationContexts({ card: event.card })
|
||||
@@ -68,24 +58,11 @@ async function removeNotificationContexts(ctx: TriggerCtx, event: CardRemovedEve
|
||||
return result
|
||||
}
|
||||
|
||||
async function removeMessageGroups(ctx: TriggerCtx, card: CardID): Promise<void> {
|
||||
while (true) {
|
||||
const groups = await ctx.db.findMessagesGroups({ card })
|
||||
if (groups.length === 0) return
|
||||
|
||||
for (const group of groups) {
|
||||
///TODO: delete blob
|
||||
await ctx.db.removeMessagesGroup(group.card, group.blobId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const triggers: Triggers = [
|
||||
['on_card_type_updates', CardResponseEventType.CardTypeUpdated, onCardTypeUpdates as TriggerFn],
|
||||
['remove_collaborators_on_card_removed', CardResponseEventType.CardRemoved, removeCollaborators as TriggerFn],
|
||||
['remove_labels_on_card_removed', CardResponseEventType.CardRemoved, removeLabels as TriggerFn],
|
||||
['remove_threads_on_card_removed', CardResponseEventType.CardRemoved, removeThreads as TriggerFn],
|
||||
['remove_messages_on_card_removed', CardResponseEventType.CardRemoved, removeMessages as TriggerFn],
|
||||
[
|
||||
'remove_notification_contexts_on_card_removed',
|
||||
CardResponseEventType.CardRemoved,
|
||||
|
||||
Reference in New Issue
Block a user