Skip to content

Commit 30bd0a2

Browse files
committed
feat: use ulid instead of uuid to maintain row order
1 parent be71d8c commit 30bd0a2

File tree

6 files changed

+18
-5
lines changed

6 files changed

+18
-5
lines changed

package-lock.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/backend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
"remark-breaks": "3.0.3",
8080
"remark-gfm": "3.0.1",
8181
"typescript": "^4.6.3",
82+
"ulid": "3.0.0",
8283
"urlcat": "3.1.0",
8384
"winston": "^3.7.1",
8485
"zod": "3.22.4",

packages/backend/src/graphql/__tests__/queries/tiles/get-all-rows.itest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ describe('get all rows query', () => {
122122
data[randomUUID()] = 'test'
123123
const rowToInsert = {
124124
tableId: dummyTable.id,
125+
// TODO: use ulid for new tiles
125126
rowId: randomUUID(),
126127
data,
127128
}

packages/backend/src/graphql/__tests__/queries/tiles/table-row.mock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export async function insertMockTableRows(
1313
for (let i = 0; i < numRowsToInsert; i++) {
1414
rows.push({
1515
tableId,
16+
// use ulid for new tiles
1617
rowId: randomUUID(),
1718
data: generateMockTableRowData({ columnIds }),
1819
})

packages/backend/src/models/tiles/pg/table-row-functions.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { randomUUID } from 'crypto'
21
import { Knex } from 'knex'
2+
import { monotonicFactory, ulid } from 'ulid'
33

44
import { tilesClient } from '@/config/tiles-database'
55
import logger from '@/helpers/logger'
@@ -24,11 +24,12 @@ export const createTableRow = async ({
2424
tableId,
2525
data,
2626
}: CreateRowInput): Promise<TableRowItem> => {
27+
const ulid = monotonicFactory()
2728
try {
2829
const res = await tilesClient(tableId)
2930
.insert({
3031
...data,
31-
rowId: randomUUID(),
32+
rowId: ulid(),
3233
})
3334
.returning('*')
3435
return res[0]
@@ -44,7 +45,7 @@ export const createTableRows = async ({
4445
}: CreateRowsInput): Promise<string[]> => {
4546
try {
4647
const rows = dataArray.map((data, i) => ({
47-
rowId: randomUUID(),
48+
rowId: ulid(),
4849
...data,
4950
// manually bumping the createdAt timestamp to ensure that row order is preserved
5051
createdAt: new Date(Date.now() + i),
@@ -231,7 +232,7 @@ export const getTableRows = async ({
231232
}
232233
try {
233234
const tableRows = []
234-
const stream = query.orderBy('createdAt', order).stream()
235+
const stream = query.orderBy('rowId', order).stream()
235236
for await (const row of stream) {
236237
const { rowId, ...rest } = row
237238
tableRows.push({ rowId, data: rest })

packages/backend/src/models/tiles/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { CreateEntityItem } from 'electrodb'
22

3-
import { TableRow } from './dynamodb/table-row/model'
3+
import { TableRow } from '../dynamodb/table-row/model'
44

55
export type TableRowItem = CreateEntityItem<typeof TableRow>
66
export type CreateRowInput = Pick<TableRowItem, 'tableId' | 'data'>

0 commit comments

Comments
 (0)