feat(server): SmartTextEditorValue.attachments multiregion support (#3513)

This commit is contained in:
Kristaps Fabians Geikins
2024-11-19 13:58:40 +00:00
committed by GitHub
parent 42db2f6b82
commit 9b5873e4f5
5 changed files with 22 additions and 11 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ generates:
PendingWorkspaceCollaborator: '@/modules/workspacesCore/helpers/graphTypes#PendingWorkspaceCollaboratorGraphQLReturn'
WorkspaceCollaborator: '@/modules/workspacesCore/helpers/graphTypes#WorkspaceCollaboratorGraphQLReturn'
Webhook: '@/modules/webhooks/helpers/graphTypes#WebhookGraphQLReturn'
SmartTextEditorValue: '@/modules/core/services/richTextEditorService#SmartTextEditorValueSchema'
SmartTextEditorValue: '@/modules/core/services/richTextEditorService#SmartTextEditorValueGraphQLReturn'
BlobMetadata: '@/modules/blobstorage/domain/types#BlobStorageItem'
ServerWorkspacesInfo: '@/modules/core/helpers/graphTypes#GraphQLEmptyReturn'
ActivityCollection: '@/modules/activitystream/helpers/graphTypes#ActivityCollectionGraphQLReturn'
@@ -223,13 +223,14 @@ export = {
*/
text(parent) {
const commentText = parent?.text || ''
return ensureCommentSchema(commentText as SmartTextEditorValueSchema)
return {
...ensureCommentSchema(commentText),
projectId: parent.streamId
}
},
rawText(parent) {
const { doc } = ensureCommentSchema(
(parent.text as SmartTextEditorValueSchema) || ''
)
const { doc } = ensureCommentSchema(parent.text || '')
return documentToBasicString(doc)
},
async hasParent(parent) {
@@ -8,7 +8,7 @@ import { AutomateFunctionGraphQLReturn, AutomateFunctionReleaseGraphQLReturn, Au
import { WorkspaceGraphQLReturn, WorkspaceBillingGraphQLReturn, WorkspaceSsoGraphQLReturn, WorkspaceMutationsGraphQLReturn, WorkspaceInviteMutationsGraphQLReturn, WorkspaceProjectMutationsGraphQLReturn, PendingWorkspaceCollaboratorGraphQLReturn, WorkspaceCollaboratorGraphQLReturn, ProjectRoleGraphQLReturn } from '@/modules/workspacesCore/helpers/graphTypes';
import { WorkspaceBillingMutationsGraphQLReturn } from '@/modules/gatekeeper/helpers/graphTypes';
import { WebhookGraphQLReturn } from '@/modules/webhooks/helpers/graphTypes';
import { SmartTextEditorValueSchema } from '@/modules/core/services/richTextEditorService';
import { SmartTextEditorValueGraphQLReturn } from '@/modules/core/services/richTextEditorService';
import { BlobStorageItem } from '@/modules/blobstorage/domain/types';
import { ActivityCollectionGraphQLReturn } from '@/modules/activitystream/helpers/graphTypes';
import { ServerAppGraphQLReturn, ServerAppListItemGraphQLReturn } from '@/modules/auth/helpers/graphTypes';
@@ -4723,7 +4723,7 @@ export type ResolversTypes = {
ServerWorkspacesInfo: ResolverTypeWrapper<GraphQLEmptyReturn>;
SessionPaymentStatus: SessionPaymentStatus;
SetPrimaryUserEmailInput: SetPrimaryUserEmailInput;
SmartTextEditorValue: ResolverTypeWrapper<SmartTextEditorValueSchema>;
SmartTextEditorValue: ResolverTypeWrapper<SmartTextEditorValueGraphQLReturn>;
SortDirection: SortDirection;
Stream: ResolverTypeWrapper<StreamGraphQLReturn>;
StreamAccessRequest: ResolverTypeWrapper<StreamAccessRequestGraphQLReturn>;
@@ -4988,7 +4988,7 @@ export type ResolversParentTypes = {
ServerStats: GraphQLEmptyReturn;
ServerWorkspacesInfo: GraphQLEmptyReturn;
SetPrimaryUserEmailInput: SetPrimaryUserEmailInput;
SmartTextEditorValue: SmartTextEditorValueSchema;
SmartTextEditorValue: SmartTextEditorValueGraphQLReturn;
Stream: StreamGraphQLReturn;
StreamAccessRequest: StreamAccessRequestGraphQLReturn;
StreamCollaborator: StreamCollaboratorGraphQLReturn;
@@ -1,16 +1,19 @@
import { db } from '@/db/knex'
import { mainDb } from '@/db/knex'
import { getBlobsFactory } from '@/modules/blobstorage/repositories'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import { getProjectDbClient } from '@/modules/multiregion/dbSelector'
import { isNonNullable } from '@speckle/shared'
import { keyBy } from 'lodash'
export = {
SmartTextEditorValue: {
async attachments(parent) {
const { blobIds } = parent
const { blobIds, projectId } = parent
if (!blobIds) return null
const db = projectId ? await getProjectDbClient({ projectId }) : mainDb
const blobs = await getBlobsFactory({ db })({ blobIds })
const blobsById = keyBy(blobs, (b) => b.id)
return blobIds.map((blobId) => blobsById[blobId] || null).filter(isNonNullable)
}
@@ -1,6 +1,6 @@
import { JSONContent } from '@tiptap/core'
import { isString, isObjectLike, get, has } from 'lodash'
import { RichTextEditor } from '@speckle/shared'
import { MaybeNullOrUndefined, RichTextEditor } from '@speckle/shared'
const { isDocEmpty, documentToBasicString, convertBasicStringToDocument } =
RichTextEditor
@@ -13,6 +13,13 @@ export type SmartTextEditorValueSchema = {
blobIds?: string[]
}
export type SmartTextEditorValueGraphQLReturn = SmartTextEditorValueSchema & {
/**
* We need to know the project ID to be able to fetch the blobs
*/
projectId: MaybeNullOrUndefined<string>
}
export function isTextEditorDoc(value: unknown): value is JSONContent {
return !isString(value) && isObjectLike(value) && get(value, 'type') === 'doc'
}