mirror of
https://github.com/immich-app/immich.git
synced 2025-12-20 17:25:35 +03:00
feat(server): visibility column (#17939)
* feat: private view * pr feedback * sql generation * feat: visibility column * fix: set visibility value as the same as the still part after unlinked live photos * fix: test * pr feedback
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { AssetVisibility } from 'src/enum';
|
||||
import { asset_face_source_type, assets_status_enum } from 'src/schema/enums';
|
||||
import {
|
||||
assets_delete_audit,
|
||||
@@ -45,7 +46,12 @@ import { UserAuditTable } from 'src/schema/tables/user-audit.table';
|
||||
import { UserMetadataTable } from 'src/schema/tables/user-metadata.table';
|
||||
import { UserTable } from 'src/schema/tables/user.table';
|
||||
import { VersionHistoryTable } from 'src/schema/tables/version-history.table';
|
||||
import { ConfigurationParameter, Database, Extensions } from 'src/sql-tools';
|
||||
import { ConfigurationParameter, Database, Extensions, registerEnum } from 'src/sql-tools';
|
||||
|
||||
export const asset_visibility_enum = registerEnum({
|
||||
name: 'asset_visibility_enum',
|
||||
values: Object.values(AssetVisibility),
|
||||
});
|
||||
|
||||
@Extensions(['uuid-ossp', 'unaccent', 'cube', 'earthdistance', 'pg_trgm', 'plpgsql'])
|
||||
@ConfigurationParameter({ name: 'search_path', value: () => '"$user", public, vectors', scope: 'database' })
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import { Kysely, sql } from 'kysely';
|
||||
|
||||
export async function up(db: Kysely<any>): Promise<void> {
|
||||
await sql`CREATE TYPE "asset_visibility_enum" AS ENUM ('archive','timeline','hidden');`.execute(db);
|
||||
await sql`ALTER TABLE "assets"
|
||||
ADD "visibility" asset_visibility_enum NOT NULL DEFAULT 'timeline';`.execute(db);
|
||||
|
||||
await sql`
|
||||
UPDATE "assets"
|
||||
SET "visibility" = CASE
|
||||
WHEN "isArchived" THEN 'archive'::asset_visibility_enum
|
||||
WHEN "isVisible" THEN 'timeline'::asset_visibility_enum
|
||||
ELSE 'hidden'::asset_visibility_enum
|
||||
END;
|
||||
`.execute(db);
|
||||
|
||||
await sql`ALTER TABLE "assets" DROP COLUMN "isVisible";`.execute(db);
|
||||
await sql`ALTER TABLE "assets" DROP COLUMN "isArchived";`.execute(db);
|
||||
}
|
||||
|
||||
export async function down(db: Kysely<any>): Promise<void> {
|
||||
await sql`ALTER TABLE "assets" ADD COLUMN "isArchived" BOOLEAN NOT NULL DEFAULT FALSE;`.execute(db);
|
||||
await sql`ALTER TABLE "assets" ADD COLUMN "isVisible" BOOLEAN NOT NULL DEFAULT TRUE;`.execute(db);
|
||||
|
||||
await sql`
|
||||
UPDATE "assets"
|
||||
SET
|
||||
"isArchived" = ("visibility" = 'archive'::asset_visibility_enum),
|
||||
"isVisible" = CASE
|
||||
WHEN "visibility" = 'timeline'::asset_visibility_enum THEN TRUE
|
||||
WHEN "visibility" = 'archive'::asset_visibility_enum THEN TRUE
|
||||
ELSE FALSE
|
||||
END;
|
||||
`.execute(db);
|
||||
await sql`ALTER TABLE "assets" DROP COLUMN "visibility";`.execute(db);
|
||||
await sql`DROP TYPE "asset_visibility_enum";`.execute(db);
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
|
||||
import { AssetStatus, AssetType } from 'src/enum';
|
||||
import { AssetStatus, AssetType, AssetVisibility } from 'src/enum';
|
||||
import { asset_visibility_enum } from 'src/schema';
|
||||
import { assets_status_enum } from 'src/schema/enums';
|
||||
import { assets_delete_audit } from 'src/schema/functions';
|
||||
import { LibraryTable } from 'src/schema/tables/library.table';
|
||||
@@ -95,9 +96,6 @@ export class AssetTable {
|
||||
@Column({ type: 'bytea', index: true })
|
||||
checksum!: Buffer; // sha1 checksum
|
||||
|
||||
@Column({ type: 'boolean', default: true })
|
||||
isVisible!: boolean;
|
||||
|
||||
@ForeignKeyColumn(() => AssetTable, { nullable: true, onUpdate: 'CASCADE', onDelete: 'SET NULL' })
|
||||
livePhotoVideoId!: string | null;
|
||||
|
||||
@@ -107,9 +105,6 @@ export class AssetTable {
|
||||
@CreateDateColumn()
|
||||
createdAt!: Date;
|
||||
|
||||
@Column({ type: 'boolean', default: false })
|
||||
isArchived!: boolean;
|
||||
|
||||
@Column({ index: true })
|
||||
originalFileName!: string;
|
||||
|
||||
@@ -145,4 +140,7 @@ export class AssetTable {
|
||||
|
||||
@UpdateIdColumn({ indexName: 'IDX_assets_update_id' })
|
||||
updateId?: string;
|
||||
|
||||
@Column({ enum: asset_visibility_enum, default: AssetVisibility.TIMELINE })
|
||||
visibility!: AssetVisibility;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user