feat(server): SyncAssetEditV1 (#26446)

* feat: SyncAssetEditV1

* fix: audit table import

* fix: sql tools table fetch

* fix: medium tests (wip)

* fix: circ dependency

* chore: finalize tests

* chore: codegen/lint

* fix: code review
This commit is contained in:
Brandon Wees
2026-02-25 12:12:41 -06:00
committed by GitHub
parent 55e625a2ac
commit 3c9fb651d0
31 changed files with 897 additions and 18 deletions
@@ -1,9 +1,10 @@
import { schemaFromCode } from '@immich/sql-tools';
import { Kysely } from 'kysely';
import { DateTime } from 'luxon';
import { AssetMetadataKey, UserMetadataKey } from 'src/enum';
import { DatabaseRepository } from 'src/repositories/database.repository';
import { LoggingRepository } from 'src/repositories/logging.repository';
import { SyncRepository } from 'src/repositories/sync.repository';
import { BaseSync, SyncRepository } from 'src/repositories/sync.repository';
import { DB } from 'src/schema';
import { SyncService } from 'src/services/sync.service';
import { newMediumService } from 'test/medium.factory';
@@ -222,5 +223,21 @@ describe(SyncService.name, () => {
expect(after).toHaveLength(1);
expect(after[0].id).toBe(keep.id);
});
it('should cleanup every table', async () => {
const { sut } = setup();
const auditTables = schemaFromCode()
.tables.filter((table) => table.name.endsWith('_audit'))
.map(({ name }) => name);
const auditCleanupSpy = vi.spyOn(BaseSync.prototype as any, 'auditCleanup');
await expect(sut.onAuditTableCleanup()).resolves.toBeUndefined();
expect(auditCleanupSpy).toHaveBeenCalledTimes(auditTables.length);
for (const table of auditTables) {
expect(auditCleanupSpy, `Audit table ${table} was not cleaned up`).toHaveBeenCalledWith(table, 31);
}
});
});
});