mirror of
https://github.com/immich-app/immich.git
synced 2025-12-23 17:25:11 +03:00
refactor: better typings for integrity API
This commit is contained in:
@@ -28,20 +28,16 @@ export class MaintenanceStatusResponseDto {
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export class MaintenanceStorageFolderIntegrityDto {
|
||||
@ValidateEnum({ enum: StorageFolder, name: 'StorageFolder' })
|
||||
folder!: StorageFolder;
|
||||
readable!: boolean;
|
||||
writable!: boolean;
|
||||
files!: number;
|
||||
}
|
||||
|
||||
export class MaintenanceIntegrityResponseDto {
|
||||
storageIntegrity!: Record<
|
||||
StorageFolder,
|
||||
{
|
||||
readable: boolean;
|
||||
writable: boolean;
|
||||
}
|
||||
>;
|
||||
storageHeuristics!: Record<
|
||||
StorageFolder,
|
||||
{
|
||||
files: number;
|
||||
}
|
||||
>;
|
||||
storage!: MaintenanceStorageFolderIntegrityDto[];
|
||||
}
|
||||
|
||||
export class MaintenanceListBackupsResponseDto {
|
||||
|
||||
@@ -79,44 +79,36 @@ export function generateMaintenanceSecret(): string {
|
||||
|
||||
export async function integrityCheck(storageRepository: StorageRepository): Promise<MaintenanceIntegrityResponseDto> {
|
||||
return {
|
||||
storageIntegrity: Object.fromEntries(
|
||||
await Promise.all(
|
||||
Object.values(StorageFolder).map(async (folder) => {
|
||||
const path = join(StorageCore.getBaseFolder(folder), '.immich');
|
||||
storage: await Promise.all(
|
||||
Object.values(StorageFolder).map(async (folder) => {
|
||||
const path = StorageCore.getBaseFolder(folder);
|
||||
const files = await storageRepository.readdir(path);
|
||||
const fn = join(StorageCore.getBaseFolder(folder), '.immich');
|
||||
|
||||
let readable = false,
|
||||
writable = false;
|
||||
|
||||
try {
|
||||
await storageRepository.readFile(fn);
|
||||
readable = true;
|
||||
|
||||
try {
|
||||
await storageRepository.readFile(path);
|
||||
|
||||
try {
|
||||
await storageRepository.overwriteFile(path, Buffer.from(`${Date.now()}`));
|
||||
return [folder, { readable: true, writable: true }];
|
||||
} catch {
|
||||
return [folder, { readable: true, writable: false }];
|
||||
}
|
||||
await storageRepository.overwriteFile(fn, Buffer.from(`${Date.now()}`));
|
||||
writable = true;
|
||||
} catch {
|
||||
return [folder, { readable: false, writable: false }];
|
||||
// no-op
|
||||
}
|
||||
}),
|
||||
),
|
||||
),
|
||||
storageHeuristics: Object.fromEntries(
|
||||
await Promise.all(
|
||||
Object.values(StorageFolder).map(async (folder) => {
|
||||
const path = StorageCore.getBaseFolder(folder);
|
||||
const files = await storageRepository.readdir(path);
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
|
||||
try {
|
||||
return [
|
||||
folder,
|
||||
{
|
||||
files: files.filter((fn) => fn !== '.immich').length,
|
||||
},
|
||||
];
|
||||
} catch {
|
||||
return [folder, { files: 0 }];
|
||||
}
|
||||
}),
|
||||
),
|
||||
return {
|
||||
folder,
|
||||
readable,
|
||||
writable,
|
||||
files: files.filter((fn) => fn !== '.immich').length,
|
||||
};
|
||||
}),
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user