Skip to content

Commit 0f30fa2

Browse files
committed
fix: speed up sync
1 parent 6bf77bb commit 0f30fa2

File tree

8 files changed

+28
-32
lines changed

8 files changed

+28
-32
lines changed

lib/SyncAggregate.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ export interface Syncable {
88
version: string
99

1010
/**
11-
* Timestamp of the last sync.
11+
* Timestamp of the last modification.
1212
*/
13-
syncedAt: number
13+
modifiedAt: number
1414
}
1515

1616
/**

lib/SyncRepository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class SyncRepository<
5555
if (saveOptions.updateVersion) {
5656
entity.version = options?.version || saveOptions.versionGenerator(entity)
5757
}
58-
entity.syncedAt = saveOptions.syncedAt || new Date().getTime()
58+
entity.modifiedAt = saveOptions.syncedAt || new Date().getTime()
5959
return this.repo.save(entity)
6060
}
6161

lib/SyncService.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AnyIdentity, Query, Logger, Logs, LogTransport, LogRecord } from '@akdasa-studios/framework'
1+
import { AnyIdentity, Query, Logger } from '@akdasa-studios/framework'
22
import { SyncAggregate } from '@lib/SyncAggregate'
33
import { SyncRepository } from '@lib/SyncRepository'
44
import { SyncConflictSolver } from '@lib/SyncConflictSolver'
@@ -120,30 +120,26 @@ export class SyncService<
120120

121121
for (const sourceEntity of findResult.entities) {
122122
let targetEntity: TAggregate|undefined = undefined
123-
try { targetEntity = await target.get(sourceEntity.id) } catch { /** pass */}
123+
try { targetEntity = await target.get(sourceEntity.id) } catch { /** pass **/ }
124+
124125
if (!targetEntity) {
125-
this.logger.debug(`${sourceEntity.id.value}: no at target`)
126126
repResult.aggregatesSynced++
127+
this.logger.debug(`${sourceEntity.id.value}: no at target`)
127128
await target.save(this.makeCopy(sourceEntity), repOptions)
128-
await source.save(sourceEntity, repOptions)
129-
} else {
130-
if (sourceEntity.version !== targetEntity.version) {
131-
repResult.aggregatesSynced++
132-
const winner = this.conflictSolver.solve(sourceEntity, targetEntity)
133-
if (winner === sourceEntity) {
134-
this.logger.debug(`${sourceEntity.id}: source won`)
135-
await target.save(this.makeCopy(sourceEntity), repOptions)
136-
await source.save(sourceEntity, repOptions)
137-
} else {
138-
this.logger.debug(`${sourceEntity.id}: target won`)
139-
await source.save(this.makeCopy(targetEntity), repOptions)
140-
await target.save(targetEntity, repOptions)
141-
}
129+
} else if (sourceEntity.version !== targetEntity.version) {
130+
repResult.aggregatesSynced++
131+
const winner = this.conflictSolver.solve(sourceEntity, targetEntity)
132+
if (winner === sourceEntity) {
133+
this.logger.debug(`${sourceEntity.id}: source won`)
134+
await target.save(this.makeCopy(sourceEntity), repOptions)
135+
} else {
136+
this.logger.debug(`${sourceEntity.id}: target won`)
137+
await source.save(this.makeCopy(targetEntity), repOptions)
142138
}
143139
}
144140
}
145141

146-
console.groupEnd()
142+
this.logger.endGroup()
147143
}
148144
return repResult
149145
}

lib/queries/sync.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ export function syncedAfter(
1313
const queryBuilder = new QueryBuilder<SyncAggregate<AnyIdentity>>()
1414
return queryBuilder.or(
1515
queryBuilder.or(
16-
queryBuilder.eq('syncedAt', undefined),
17-
queryBuilder.eq('syncedAt', 0),
16+
queryBuilder.eq('modifiedAt', undefined),
17+
queryBuilder.eq('modifiedAt', 0),
1818
),
19-
queryBuilder.gt('syncedAt', from),
19+
queryBuilder.gt('modifiedAt', from),
2020
)
2121
}

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@akdasa-studios/framework-sync",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Template",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",

tests/SyncService.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,16 @@ describe('SyncService', () => {
150150
*/
151151
it('syncedAt are equal for both entities', async () => {
152152
// act:
153-
await repoARaw.save(row1)
153+
await repoA.save(row1)
154154
await service.sync(repoA, repoB)
155155

156156
// assert:
157157
const row1FromA = await repoARaw.get(row1.id)
158158
const row1FromB = await repoBRaw.get(row1.id)
159159

160-
expect(row1FromA.syncedAt === row1FromB.syncedAt).toBeTrue()
161-
expect(row1FromA.syncedAt !== 0).toBeTrue()
162-
expect(row1FromA.syncedAt).toBeDefined()
160+
expect(row1FromA.modifiedAt === row1FromB.modifiedAt).toBeTrue()
161+
expect(row1FromA.modifiedAt !== 0).toBeTrue()
162+
expect(row1FromA.modifiedAt).toBeDefined()
163163

164164
})
165165

tests/fixtures.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export class Row extends Aggregate<RowId> implements Syncable {
1111
this.text = text
1212
}
1313
version: string
14-
syncedAt: number
14+
modifiedAt: number
1515
text: string
1616
}
1717

0 commit comments

Comments
 (0)