Skip to content

Commit 39d0b56

Browse files
authored
refactor(table): split the 5.3k-line service.ts god-file into per-concern modules (#5069)
* refactor(table): extract row ordering, executions, and tx helpers from service.ts Move the row position/fractional-ordering internals to rows/ordering.ts, the row-execution (workflow-group result) internals to rows/executions.ts, and the shared tx-timeout helpers to tx.ts. Pure code-motion — verbatim bodies, identical behavior. service.ts: 5324 -> 4442 lines. * refactor(table): extract row CRUD and query into rows/service.ts Move insert/update/upsert/delete/replace/batch row writes, queryRows/ getRowById reads, and findRowMatches into rows/service.ts. Verbatim bodies; consumers repointed; @/lib/table barrel re-exports the new module so callers are unchanged. service.ts: 4442 -> 2788 lines. * refactor(table): extract column/schema management into columns/service.ts Move add/rename/delete column ops and column-type/constraint updates into columns/service.ts. addTableColumnsWithTx stays in service.ts (table-creation primitive) to avoid a cycle. Verbatim bodies; barrel re-exports the module. service.ts: 2788 -> 2149 lines. * refactor(table): extract job state machine and export jobs into jobs/service.ts Move tableJobs reads/mapping, the job lifecycle state machine, and export-job queries into jobs/service.ts. service.ts imports latestJob* one-way for table metadata enrichment (no cycle). Import-data orchestration helpers stay in service.ts for now. Verbatim bodies. service.ts: 2149 -> 1791 lines. * refactor(table): extract workflow-group management into workflow-groups/service.ts Move add/update/delete workflow groups + outputs and pruneStale into workflow-groups/service.ts, preserving the dynamic backfill-runner import (cycle-breaker). Verbatim bodies; no cycle. service.ts: 1791 -> 851 lines. * refactor(table): extract import-job data ops into import-data.ts Move bulk insert, schema setup, and append/replace import operations into import-data.ts (consumed by import-runner + import route). service.ts is now the pure table-entity module (root CRUD + shared lock/column primitives). Verbatim bodies; no cycle. service.ts: 851 -> 664 lines (5324 at start). * refactor(table): restore private visibility and drop dead helpers post-split Un-export DerivedJobFields/JOB_PROJECTION/mapJobRow (file-local in jobs/service.ts, were private pre-split) so they no longer leak into the @/lib/table barrel. Remove dead code carried into the new modules: countTables (createTable does its own inline count check) and the unused buildOrderedRowValues/OrderedRowValue pair. * refactor(table): use absolute imports throughout and fix an orphaned TSDoc Normalize all relative imports under lib/table to absolute @/lib/table/... per the project import rule (the split modules and a few pre-existing holdouts), and relocate the getTableById TSDoc that had drifted above applyColumnOrderToSchema. Comment/import-only; zero behavior change.
1 parent 02022e9 commit 39d0b56

70 files changed

Lines changed: 5027 additions & 4823 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/sim/app/api/table/[tableId]/delete-async/route.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ vi.mock('@sim/utils/id', () => ({
2828
generateId: vi.fn().mockReturnValue('job-id-xyz'),
2929
generateShortId: vi.fn().mockReturnValue('short-id'),
3030
}))
31-
vi.mock('@/lib/table/service', () => ({
31+
vi.mock('@/lib/table/jobs/service', () => ({
3232
markTableJobRunning: mockMarkTableJobRunning,
3333
releaseJobClaim: mockReleaseJobClaim,
3434
}))

apps/sim/app/api/table/[tableId]/delete-async/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { runDetached } from '@/lib/core/utils/background'
99
import { generateRequestId } from '@/lib/core/utils/request'
1010
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
1111
import { markTableDeleteFailed, runTableDelete } from '@/lib/table/delete-runner'
12-
import { markTableJobRunning, releaseJobClaim } from '@/lib/table/service'
12+
import { markTableJobRunning, releaseJobClaim } from '@/lib/table/jobs/service'
1313
import type { TableDeleteJobPayload } from '@/lib/table/types'
1414
import { accessError, checkAccess, tableFilterError } from '@/app/api/table/utils'
1515

apps/sim/app/api/table/[tableId]/export-async/route.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ vi.mock('@sim/utils/id', () => ({
1616
generateId: vi.fn().mockReturnValue('job-id-xyz'),
1717
generateShortId: vi.fn().mockReturnValue('short-id'),
1818
}))
19-
vi.mock('@/lib/table/service', () => ({ markTableJobRunning: mockMarkTableJobRunning }))
19+
vi.mock('@/lib/table/jobs/service', () => ({ markTableJobRunning: mockMarkTableJobRunning }))
2020
vi.mock('@/lib/table/export-runner', () => ({ runTableExport: mockRunTableExport }))
2121
vi.mock('@/lib/core/utils/background', () => ({
2222
runDetached: (_label: string, work: () => Promise<unknown>) => {

apps/sim/app/api/table/[tableId]/export-async/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { runDetached } from '@/lib/core/utils/background'
99
import { generateRequestId } from '@/lib/core/utils/request'
1010
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
1111
import { runTableExport, type TableExportPayload } from '@/lib/table/export-runner'
12-
import { markTableJobRunning, releaseJobClaim } from '@/lib/table/service'
12+
import { markTableJobRunning, releaseJobClaim } from '@/lib/table/jobs/service'
1313
import type { TableExportJobPayload } from '@/lib/table/types'
1414
import { accessError, checkAccess } from '@/app/api/table/utils'
1515

apps/sim/app/api/table/[tableId]/export/download/route.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const { mockCheckAccess, mockGetTableJob, mockGeneratePresignedDownloadUrl } = v
1212
mockGeneratePresignedDownloadUrl: vi.fn(),
1313
}))
1414

15-
vi.mock('@/lib/table/service', () => ({ getTableJob: mockGetTableJob }))
15+
vi.mock('@/lib/table/jobs/service', () => ({ getTableJob: mockGetTableJob }))
1616
vi.mock('@/lib/uploads/core/storage-service', () => ({
1717
generatePresignedDownloadUrl: mockGeneratePresignedDownloadUrl,
1818
}))

apps/sim/app/api/table/[tableId]/export/download/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { parseRequest } from '@/lib/api/server'
55
import { checkSessionOrInternalAuth } from '@/lib/auth/hybrid'
66
import { generateRequestId } from '@/lib/core/utils/request'
77
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
8-
import { getTableJob } from '@/lib/table/service'
8+
import { getTableJob } from '@/lib/table/jobs/service'
99
import type { TableExportJobPayload } from '@/lib/table/types'
1010
import { generatePresignedDownloadUrl } from '@/lib/uploads/core/storage-service'
1111
import { accessError, checkAccess } from '@/app/api/table/utils'

apps/sim/app/api/table/[tableId]/export/route.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ vi.mock('@/app/api/table/utils', async () => {
2020
}
2121
})
2222

23-
vi.mock('@/lib/table/service', () => ({
23+
vi.mock('@/lib/table/rows/service', () => ({
2424
queryRows: mockQueryRows,
2525
}))
2626

apps/sim/app/api/table/[tableId]/export/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { neutralizeCsvFormula } from '@/lib/core/utils/csv'
77
import { generateRequestId } from '@/lib/core/utils/request'
88
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
99
import { buildNameById, getColumnId, rowDataIdToName } from '@/lib/table/column-keys'
10-
import { queryRows } from '@/lib/table/service'
10+
import { queryRows } from '@/lib/table/rows/service'
1111
import { accessError, checkAccess } from '@/app/api/table/utils'
1212

1313
const logger = createLogger('TableExport')

apps/sim/app/api/table/[tableId]/groups/route.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ import { parseRequest } from '@/lib/api/server'
99
import { checkSessionOrInternalAuth } from '@/lib/auth/hybrid'
1010
import { generateRequestId } from '@/lib/core/utils/request'
1111
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
12-
import { addWorkflowGroup, deleteWorkflowGroup, updateWorkflowGroup } from '@/lib/table/service'
12+
import {
13+
addWorkflowGroup,
14+
deleteWorkflowGroup,
15+
updateWorkflowGroup,
16+
} from '@/lib/table/workflow-groups/service'
1317
import { accessError, checkAccess, normalizeColumn } from '@/app/api/table/utils'
1418

1519
const logger = createLogger('TableWorkflowGroupsAPI')

apps/sim/app/api/table/[tableId]/import-async/route.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ vi.mock('@sim/utils/id', () => ({
1616
generateId: vi.fn().mockReturnValue('import-id-xyz'),
1717
generateShortId: vi.fn().mockReturnValue('short-id'),
1818
}))
19-
vi.mock('@/lib/table/service', () => ({ markTableJobRunning: mockMarkTableImporting }))
19+
vi.mock('@/lib/table/jobs/service', () => ({ markTableJobRunning: mockMarkTableImporting }))
2020
vi.mock('@/lib/table/import-runner', () => ({ runTableImport: mockRunTableImport }))
2121
vi.mock('@/lib/core/utils/background', () => ({
2222
runDetached: (_label: string, work: () => Promise<unknown>) => {

0 commit comments

Comments
 (0)