(
workflowId: string,
originalBlocks: Record<string, BlockState>,
migratedBlocks: Record<string, BlockState>,
blockUpdatedAtById: Record<string, Date | null> = {}
)
| 181 | } |
| 182 | |
| 183 | export async function persistMigratedBlocks( |
| 184 | workflowId: string, |
| 185 | originalBlocks: Record<string, BlockState>, |
| 186 | migratedBlocks: Record<string, BlockState>, |
| 187 | blockUpdatedAtById: Record<string, Date | null> = {} |
| 188 | ): Promise<void> { |
| 189 | try { |
| 190 | for (const [blockId, block] of Object.entries(migratedBlocks)) { |
| 191 | if (block !== originalBlocks[blockId]) { |
| 192 | const hasExpectedUpdatedAt = Object.hasOwn(blockUpdatedAtById, blockId) |
| 193 | const expectedUpdatedAt = blockUpdatedAtById[blockId] |
| 194 | const whereClause = hasExpectedUpdatedAt |
| 195 | ? and( |
| 196 | eq(workflowBlocks.id, blockId), |
| 197 | eq(workflowBlocks.workflowId, workflowId), |
| 198 | expectedUpdatedAt === null |
| 199 | ? isNull(workflowBlocks.updatedAt) |
| 200 | : eq(workflowBlocks.updatedAt, expectedUpdatedAt) |
| 201 | ) |
| 202 | : and(eq(workflowBlocks.id, blockId), eq(workflowBlocks.workflowId, workflowId)) |
| 203 | |
| 204 | await db |
| 205 | .update(workflowBlocks) |
| 206 | .set({ |
| 207 | subBlocks: block.subBlocks, |
| 208 | data: block.data, |
| 209 | updatedAt: new Date(), |
| 210 | }) |
| 211 | .where(whereClause) |
| 212 | } |
| 213 | } |
| 214 | } catch (err) { |
| 215 | logger.warn('Failed to persist block migrations', { workflowId, error: err }) |
| 216 | } |
| 217 | } |
no test coverage detected