Files
speckle-server/packages/server/modules/fileuploads/graph/resolvers/fileUploads.ts
T
Kristaps Fabians Geikins b02a07e2b6 feat: Frontend 2.0 MVP
2023-05-08 10:47:01 +03:00

71 lines
2.1 KiB
TypeScript

import { Roles } from '@speckle/shared'
import { Resolvers } from '@/modules/core/graph/generated/graphql'
import {
getStreamFileUploads,
getFileInfo,
getStreamPendingModels,
getBranchPendingVersions
} from '@/modules/fileuploads/repositories/fileUploads'
import { authorizeResolver } from '@/modules/shared'
import {
FileImportSubscriptions,
filteredSubscribe
} from '@/modules/shared/utils/subscriptions'
export = {
Stream: {
async fileUploads(parent) {
return await getStreamFileUploads({ streamId: parent.id })
},
async fileUpload(_parent, args) {
return await getFileInfo({ fileId: args.id })
}
},
Project: {
async pendingImportedModels(parent, args) {
return await getStreamPendingModels(parent.id, args)
}
},
Model: {
async pendingImportedVersions(parent, args) {
return await getBranchPendingVersions(parent.streamId, parent.name, args)
}
},
FileUpload: {
projectId: (parent) => parent.streamId,
modelName: (parent) => parent.branchName,
convertedVersionId: (parent) => parent.convertedCommitId,
async model(parent, _args, ctx) {
return await ctx.loaders.streams.getStreamBranchByName
.forStream(parent.streamId)
.load(parent.branchName.toLowerCase())
}
},
Subscription: {
projectPendingModelsUpdated: {
subscribe: filteredSubscribe(
FileImportSubscriptions.ProjectPendingModelsUpdated,
async (payload, args, ctx) => {
const { id: projectId } = args
if (payload.projectId !== projectId) return false
await authorizeResolver(ctx.userId, projectId, Roles.Stream.Reviewer)
return true
}
)
},
projectPendingVersionsUpdated: {
subscribe: filteredSubscribe(
FileImportSubscriptions.ProjectPendingVersionsUpdated,
async (payload, args, ctx) => {
const { id: projectId } = args
if (payload.projectId !== projectId) return false
await authorizeResolver(ctx.userId, projectId, Roles.Stream.Reviewer)
return true
}
)
}
}
} as Resolvers