Skip to content

Commit 7fc55f9

Browse files
committed
fix: medium tests (wip)
1 parent 71196fc commit 7fc55f9

File tree

5 files changed

+28
-18
lines changed

5 files changed

+28
-18
lines changed

open-api/immich-openapi-specs.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22584,12 +22584,12 @@
2258422584
},
2258522585
"SyncAssetEditDeleteV1": {
2258622586
"properties": {
22587-
"assetId": {
22587+
"editId": {
2258822588
"type": "string"
2258922589
}
2259022590
},
2259122591
"required": [
22592-
"assetId"
22592+
"editId"
2259322593
],
2259422594
"type": "object"
2259522595
},

server/src/repositories/sync.repository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ class AssetEditSync extends BaseSync {
520520
@GenerateSql({ params: [dummyQueryOptions], stream: true })
521521
getUpserts(options: SyncQueryOptions) {
522522
return this.upsertQuery('asset_edit', options)
523-
.select(columns.syncAssetEdit)
523+
.select([...columns.syncAssetEdit, 'asset_edit.updateId'])
524524
.innerJoin('asset', 'asset.id', 'asset_edit.assetId')
525525
.where('asset.ownerId', '=', options.userId)
526526
.stream();

server/src/schema/migrations/1771479910447-AssetEditSync.ts renamed to server/src/schema/migrations/1771873813973-AssetEditSync.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export async function up(db: Kysely<any>): Promise<void> {
2121
);`.execute(db);
2222
await sql`CREATE INDEX "asset_edit_audit_assetId_idx" ON "asset_edit_audit" ("assetId");`.execute(db);
2323
await sql`CREATE INDEX "asset_edit_audit_deletedAt_idx" ON "asset_edit_audit" ("deletedAt");`.execute(db);
24+
await sql`ALTER TABLE "asset_edit" ADD "updatedAt" timestamp with time zone NOT NULL DEFAULT now();`.execute(db);
2425
await sql`ALTER TABLE "asset_edit" ADD "updateId" uuid NOT NULL DEFAULT immich_uuid_v7();`.execute(db);
2526
await sql`CREATE INDEX "asset_edit_updateId_idx" ON "asset_edit" ("updateId");`.execute(db);
2627
await sql`CREATE OR REPLACE TRIGGER "asset_edit_audit"
@@ -29,16 +30,24 @@ export async function up(db: Kysely<any>): Promise<void> {
2930
FOR EACH STATEMENT
3031
WHEN (pg_trigger_depth() = 0)
3132
EXECUTE FUNCTION asset_edit_audit();`.execute(db);
33+
await sql`CREATE OR REPLACE TRIGGER "asset_edit_updatedAt"
34+
BEFORE UPDATE ON "asset_edit"
35+
FOR EACH ROW
36+
EXECUTE FUNCTION updated_at();`.execute(db);
3237
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('function_asset_edit_audit', '{"type":"function","name":"asset_edit_audit","sql":"CREATE OR REPLACE FUNCTION asset_edit_audit()\\n RETURNS TRIGGER\\n LANGUAGE PLPGSQL\\n AS $$\\n BEGIN\\n INSERT INTO asset_edit_audit (\\"editId\\", \\"assetId\\")\\n SELECT \\"id\\", \\"assetId\\"\\n FROM OLD;\\n RETURN NULL;\\n END\\n $$;"}'::jsonb);`.execute(db);
3338
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_asset_edit_audit', '{"type":"trigger","name":"asset_edit_audit","sql":"CREATE OR REPLACE TRIGGER \\"asset_edit_audit\\"\\n AFTER DELETE ON \\"asset_edit\\"\\n REFERENCING OLD TABLE AS \\"old\\"\\n FOR EACH STATEMENT\\n WHEN (pg_trigger_depth() = 0)\\n EXECUTE FUNCTION asset_edit_audit();"}'::jsonb);`.execute(db);
39+
await sql`INSERT INTO "migration_overrides" ("name", "value") VALUES ('trigger_asset_edit_updatedAt', '{"type":"trigger","name":"asset_edit_updatedAt","sql":"CREATE OR REPLACE TRIGGER \\"asset_edit_updatedAt\\"\\n BEFORE UPDATE ON \\"asset_edit\\"\\n FOR EACH ROW\\n EXECUTE FUNCTION updated_at();"}'::jsonb);`.execute(db);
3440
}
3541

3642
export async function down(db: Kysely<any>): Promise<void> {
3743
await sql`DROP TRIGGER "asset_edit_audit" ON "asset_edit";`.execute(db);
44+
await sql`DROP TRIGGER "asset_edit_updatedAt" ON "asset_edit";`.execute(db);
3845
await sql`DROP INDEX "asset_edit_updateId_idx";`.execute(db);
46+
await sql`ALTER TABLE "asset_edit" DROP COLUMN "updatedAt";`.execute(db);
3947
await sql`ALTER TABLE "asset_edit" DROP COLUMN "updateId";`.execute(db);
4048
await sql`DROP TABLE "asset_edit_audit";`.execute(db);
4149
await sql`DROP FUNCTION asset_edit_audit;`.execute(db);
4250
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'function_asset_edit_audit';`.execute(db);
4351
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'trigger_asset_edit_audit';`.execute(db);
52+
await sql`DELETE FROM "migration_overrides" WHERE "name" = 'trigger_asset_edit_updatedAt';`.execute(db);
4453
}

server/src/schema/tables/asset-edit.table.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ import {
66
Generated,
77
PrimaryGeneratedColumn,
88
Table,
9+
Timestamp,
910
Unique,
11+
UpdateDateColumn,
1012
} from '@immich/sql-tools';
11-
import { UpdateIdColumn } from 'src/decorators';
13+
import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
1214
import { AssetEditAction, AssetEditParameters } from 'src/dtos/editing.dto';
1315
import { asset_edit_audit, asset_edit_delete, asset_edit_insert } from 'src/schema/functions';
1416
import { AssetTable } from 'src/schema/tables/asset.table';
1517

1618
@Table('asset_edit')
19+
@UpdatedAtTrigger('asset_edit_updatedAt')
1720
@AfterInsertTrigger({ scope: 'statement', function: asset_edit_insert, referencingNewTableAs: 'inserted_edit' })
1821
@AfterDeleteTrigger({
1922
scope: 'statement',
@@ -44,6 +47,9 @@ export class AssetEditTable {
4447
@Column({ type: 'integer' })
4548
sequence!: number;
4649

50+
@UpdateDateColumn()
51+
updatedAt!: Generated<Timestamp>;
52+
4753
@UpdateIdColumn({ index: true })
4854
updateId!: Generated<string>;
4955
}

server/test/medium/specs/sync/sync-asset-edit.spec.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -133,24 +133,19 @@ describe(SyncRequestType.AssetEditsV1, () => {
133133
await ctx.syncAckAll(auth, response1);
134134
await ctx.assertSyncIsComplete(auth, [SyncRequestType.AssetEditsV1]);
135135

136-
// Update the edit
137-
await assetEditRepo.replaceAll(asset.id, [
138-
{
139-
action: AssetEditAction.Crop,
136+
// update the existing edit
137+
await ctx.database
138+
.updateTable('asset_edit')
139+
.set({
140140
parameters: { x: 50, y: 60, width: 150, height: 250 },
141-
},
142-
]);
141+
})
142+
.where('assetId', '=', asset.id)
143+
.where('action', '=', AssetEditAction.Crop)
144+
.execute();
143145

144146
const response2 = await ctx.syncStream(auth, [SyncRequestType.AssetEditsV1]);
145147
expect(response2).toEqual(
146148
expect.arrayContaining([
147-
{
148-
ack: expect.any(String),
149-
data: {
150-
assetId: asset.id,
151-
},
152-
type: SyncEntityType.AssetEditDeleteV1,
153-
},
154149
{
155150
ack: expect.any(String),
156151
data: {
@@ -196,7 +191,7 @@ describe(SyncRequestType.AssetEditsV1, () => {
196191
{
197192
ack: expect.any(String),
198193
data: {
199-
assetId: asset.id,
194+
editId: asset.id,
200195
},
201196
type: SyncEntityType.AssetEditDeleteV1,
202197
},

0 commit comments

Comments
 (0)