chore(server): fileuploads IoC 3 - insertNewUploadAndNotifyFactory
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user