mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 18:47:09 -04:00 
			
		
		
		
	* cache `getConfig` * critical fix Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> --------- Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Version } from 'src/utils/version';
 | |
| 
 | |
| export enum DatabaseExtension {
 | |
|   CUBE = 'cube',
 | |
|   EARTH_DISTANCE = 'earthdistance',
 | |
|   VECTOR = 'vector',
 | |
|   VECTORS = 'vectors',
 | |
| }
 | |
| 
 | |
| export type VectorExtension = DatabaseExtension.VECTOR | DatabaseExtension.VECTORS;
 | |
| 
 | |
| export enum VectorIndex {
 | |
|   CLIP = 'clip_index',
 | |
|   FACE = 'face_index',
 | |
| }
 | |
| 
 | |
| export enum DatabaseLock {
 | |
|   GeodataImport = 100,
 | |
|   Migrations = 200,
 | |
|   StorageTemplateMigration = 420,
 | |
|   CLIPDimSize = 512,
 | |
|   LibraryWatch = 1337,
 | |
|   GetSystemConfig = 69,
 | |
| }
 | |
| 
 | |
| export const extName: Record<DatabaseExtension, string> = {
 | |
|   cube: 'cube',
 | |
|   earthdistance: 'earthdistance',
 | |
|   vector: 'pgvector',
 | |
|   vectors: 'pgvecto.rs',
 | |
| } as const;
 | |
| 
 | |
| export interface VectorUpdateResult {
 | |
|   restartRequired: boolean;
 | |
| }
 | |
| 
 | |
| export const IDatabaseRepository = 'IDatabaseRepository';
 | |
| 
 | |
| export interface IDatabaseRepository {
 | |
|   getExtensionVersion(extensionName: string): Promise<Version | null>;
 | |
|   getAvailableExtensionVersion(extension: DatabaseExtension): Promise<Version | null>;
 | |
|   getPreferredVectorExtension(): VectorExtension;
 | |
|   getPostgresVersion(): Promise<Version>;
 | |
|   createExtension(extension: DatabaseExtension): Promise<void>;
 | |
|   updateExtension(extension: DatabaseExtension, version?: Version): Promise<void>;
 | |
|   updateVectorExtension(extension: VectorExtension, version?: Version): Promise<VectorUpdateResult>;
 | |
|   reindex(index: VectorIndex): Promise<void>;
 | |
|   shouldReindex(name: VectorIndex): Promise<boolean>;
 | |
|   runMigrations(options?: { transaction?: 'all' | 'none' | 'each' }): Promise<void>;
 | |
|   withLock<R>(lock: DatabaseLock, callback: () => Promise<R>): Promise<R>;
 | |
|   tryLock(lock: DatabaseLock): Promise<boolean>;
 | |
|   isBusy(lock: DatabaseLock): boolean;
 | |
|   wait(lock: DatabaseLock): Promise<void>;
 | |
| }
 |