MCPcopy
hub / github.com/simstudioai/sim / handleBlockOperationTx

Function handleBlockOperationTx

apps/realtime/src/database/operations.ts:334–607  ·  view source on GitHub ↗
(
  tx: any,
  workflowId: string,
  operation: string,
  payload: any
)

Source from the content-addressed store, hash-verified

332}
333
334async function handleBlockOperationTx(
335 tx: any,
336 workflowId: string,
337 operation: string,
338 payload: any
339) {
340 switch (operation) {
341 case BLOCK_OPERATIONS.UPDATE_POSITION: {
342 if (!payload.id || !payload.position) {
343 throw new Error('Missing required fields for update position operation')
344 }
345
346 if (payload.commit !== true) {
347 return
348 }
349
350 const updateResult = await tx
351 .update(workflowBlocks)
352 .set({
353 positionX: payload.position.x,
354 positionY: payload.position.y,
355 updatedAt: new Date(),
356 })
357 .where(and(eq(workflowBlocks.id, payload.id), eq(workflowBlocks.workflowId, workflowId)))
358 .returning({ id: workflowBlocks.id })
359
360 if (updateResult.length === 0) {
361 throw new Error(`Block ${payload.id} not found in workflow ${workflowId}`)
362 }
363 break
364 }
365
366 case BLOCK_OPERATIONS.UPDATE_NAME: {
367 if (!payload.id || !payload.name) {
368 throw new Error('Missing required fields for update name operation')
369 }
370
371 // Check if block is protected (locked or inside locked parent)
372 const blockToRename = await tx
373 .select({
374 id: workflowBlocks.id,
375 locked: workflowBlocks.locked,
376 data: workflowBlocks.data,
377 })
378 .from(workflowBlocks)
379 .where(and(eq(workflowBlocks.id, payload.id), eq(workflowBlocks.workflowId, workflowId)))
380 .limit(1)
381
382 if (blockToRename.length === 0) {
383 throw new Error(`Block ${payload.id} not found in workflow ${workflowId}`)
384 }
385
386 const block = blockToRename[0]
387 const parentId = (block.data as Record<string, unknown> | null)?.parentId as
388 | string
389 | undefined
390
391 if (block.locked) {

Callers 1

persistWorkflowOperationFunction · 0.85

Calls 6

updateSubflowNodeListFunction · 0.85
infoMethod · 0.80
debugMethod · 0.80
setMethod · 0.65
warnMethod · 0.65
eqFunction · 0.50

Tested by

no test coverage detected