chore(server): fileuploads IoC 3 - insertNewUploadAndNotifyFactory

This commit is contained in:
Kristaps Fabians Geikins
2024-09-11 14:48:35 +03:00
parent debe78ac57
commit bc14dc625f
4 changed files with 72 additions and 51 deletions
@@ -1,6 +1,9 @@
import { FileUploadRecord } from '@/modules/fileuploads/helpers/types'
import { SaveUploadFileInput } from '@/modules/fileuploads/repositories/fileUploads'
import { Optional } from '@speckle/shared'
export type GetFileInfo = (args: {
fileId: string
}) => Promise<Optional<FileUploadRecord>>
export type SaveUploadFile = (args: SaveUploadFileInput) => Promise<FileUploadRecord>
+11 -2
View File
@@ -1,6 +1,6 @@
/* istanbul ignore file */
const {
insertNewUploadAndNotify
insertNewUploadAndNotifyFactory
} = require('@/modules/fileuploads/services/management')
const request = require('request')
const { streamWritePermissions } = require('@/modules/shared/authz')
@@ -9,11 +9,20 @@ const { moduleLogger } = require('@/logging/logging')
const {
listenForImportUpdatesFactory
} = require('@/modules/fileuploads/services/resultListener')
const { getFileInfoFactory } = require('@/modules/fileuploads/repositories/fileUploads')
const {
getFileInfoFactory,
saveUploadFileFactory
} = require('@/modules/fileuploads/repositories/fileUploads')
const { db } = require('@/db/knex')
const { publish } = require('@/modules/shared/utils/subscriptions')
const { getStreamBranchByName } = require('@/modules/core/repositories/branches')
const insertNewUploadAndNotify = insertNewUploadAndNotifyFactory({
getStreamBranchByName,
saveUploadFile: saveUploadFileFactory({ db }),
publish
})
const saveFileUploads = async ({ userId, streamId, branchName, uploadResults }) => {
await Promise.all(
uploadResults.map(async (upload) => {
@@ -1,5 +1,5 @@
import { Branches, FileUploads, knex } from '@/modules/core/dbSchema'
import { GetFileInfo } from '@/modules/fileuploads/domain/operations'
import { GetFileInfo, SaveUploadFile } from '@/modules/fileuploads/domain/operations'
import {
FileUploadConvertedStatus,
FileUploadRecord
@@ -50,28 +50,30 @@ export type SaveUploadFileInput = Pick<
'streamId' | 'branchName' | 'userId' | 'fileName' | 'fileType' | 'fileSize'
> & { fileId: string }
export async function saveUploadFile({
fileId,
streamId,
branchName,
userId,
fileName,
fileType,
fileSize
}: SaveUploadFileInput) {
const dbFile: Partial<FileUploadRecord> = {
id: fileId,
export const saveUploadFileFactory =
(deps: { db: Knex }): SaveUploadFile =>
async ({
fileId,
streamId,
branchName,
userId,
fileName,
fileType,
fileSize,
uploadComplete: true
fileSize
}: SaveUploadFileInput) => {
const dbFile: Partial<FileUploadRecord> = {
id: fileId,
streamId,
branchName,
userId,
fileName,
fileType,
fileSize,
uploadComplete: true
}
const [newRecord] = await tables.fileUploads(deps.db).insert(dbFile, '*')
return newRecord as FileUploadRecord
}
const [newRecord] = await FileUploads.knex().insert(dbFile, '*')
return newRecord as FileUploadRecord
}
const getPendingUploadsBaseQuery = (
streamId: string,
@@ -4,43 +4,50 @@ import {
ProjectPendingVersionsUpdatedMessageType
} from '@/modules/core/graph/generated/graphql'
import { getStreamBranchByName } from '@/modules/core/repositories/branches'
import { SaveUploadFile } from '@/modules/fileuploads/domain/operations'
import { SaveUploadFileInput } from '@/modules/fileuploads/repositories/fileUploads'
import {
saveUploadFile,
SaveUploadFileInput
} from '@/modules/fileuploads/repositories/fileUploads'
import { FileImportSubscriptions, publish } from '@/modules/shared/utils/subscriptions'
FileImportSubscriptions,
PublishSubscription
} from '@/modules/shared/utils/subscriptions'
export async function insertNewUploadAndNotify(upload: SaveUploadFileInput) {
const branch = await getStreamBranchByName(upload.streamId, upload.branchName)
const file = await saveUploadFile(upload)
export const insertNewUploadAndNotifyFactory =
(deps: {
getStreamBranchByName: typeof getStreamBranchByName
saveUploadFile: SaveUploadFile
publish: PublishSubscription
}) =>
async (upload: SaveUploadFileInput) => {
const branch = await deps.getStreamBranchByName(upload.streamId, upload.branchName)
const file = await deps.saveUploadFile(upload)
if (!branch) {
await publish(FileImportSubscriptions.ProjectPendingModelsUpdated, {
projectPendingModelsUpdated: {
if (!branch) {
await deps.publish(FileImportSubscriptions.ProjectPendingModelsUpdated, {
projectPendingModelsUpdated: {
id: file.id,
type: ProjectPendingModelsUpdatedMessageType.Created,
model: file
},
projectId: file.streamId
})
} else {
await deps.publish(FileImportSubscriptions.ProjectPendingVersionsUpdated, {
projectPendingVersionsUpdated: {
id: file.id,
type: ProjectPendingVersionsUpdatedMessageType.Created,
version: file
},
projectId: file.streamId,
branchName: file.branchName
})
}
await deps.publish(FileImportSubscriptions.ProjectFileImportUpdated, {
projectFileImportUpdated: {
id: file.id,
type: ProjectPendingModelsUpdatedMessageType.Created,
model: file
type: ProjectFileImportUpdatedMessageType.Created,
upload: file
},
projectId: file.streamId
})
} else {
await publish(FileImportSubscriptions.ProjectPendingVersionsUpdated, {
projectPendingVersionsUpdated: {
id: file.id,
type: ProjectPendingVersionsUpdatedMessageType.Created,
version: file
},
projectId: file.streamId,
branchName: file.branchName
})
}
await publish(FileImportSubscriptions.ProjectFileImportUpdated, {
projectFileImportUpdated: {
id: file.id,
type: ProjectFileImportUpdatedMessageType.Created,
upload: file
},
projectId: file.streamId
})
}