Compare commits

...

2 Commits

Author SHA1 Message Date
Mees Frensel dc2061c52a Merge branch 'main' into chore/server-switch-exhaustive 2026-06-12 18:13:24 +02:00
Mees Frensel f09d161128 chore(server): add switch case exhaustiveness lint 2026-06-12 17:03:24 +02:00
10 changed files with 37 additions and 7 deletions
+1
View File
@@ -51,6 +51,7 @@ export default typescriptEslint.config([
'unicorn/no-array-sort': 'off',
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/no-misused-promises': 'error',
'@typescript-eslint/switch-exhaustiveness-check': ['error', { considerDefaultExhaustiveForUnions: true }],
'require-await': 'off',
'@typescript-eslint/require-await': 'error',
curly: 2,
+5 -1
View File
@@ -28,9 +28,13 @@ export class SchemaCheck extends CommandRunner {
}
case 'missing': {
console.log(` - ${migration.name} exists, but has not been applied to the database`);
console.log(` - ${migration.name} exists on disk, but has not been applied to the database`);
break;
}
case 'applied': {
break; // happy path, do nothing
}
}
}
}
+8 -1
View File
@@ -9,6 +9,7 @@ import {
PersonPathType,
RawExtractedFormat,
StorageFolder,
UserPathType,
} from 'src/enum';
import { AssetRepository } from 'src/repositories/asset.repository';
import { ConfigRepository } from 'src/repositories/config.repository';
@@ -327,13 +328,19 @@ export class StorageCore {
case AssetFileType.EncodedVideo:
case AssetFileType.Thumbnail:
case AssetFileType.Preview:
case AssetFileType.Sidecar: {
case AssetFileType.Sidecar:
case AssetPathType.EncodedVideo: {
return this.assetRepository.upsertFile({ assetId: id, type: pathType as AssetFileType, path: newPath });
}
case PersonPathType.Face: {
return this.personRepository.update({ id, thumbnailPath: newPath });
}
case UserPathType.Profile: {
this.logger.warn('Unexpected path type:', pathType);
return;
}
}
}
@@ -281,17 +281,20 @@ export class MaintenanceWorkerService {
async runAction(action: SetMaintenanceModeDto) {
switch (action.action) {
case MaintenanceAction.Start: {
case MaintenanceAction.Start:
case MaintenanceAction.SelectDatabaseRestore: {
return;
}
case MaintenanceAction.End: {
return this.endMaintenance();
}
case MaintenanceAction.SelectDatabaseRestore: {
return;
case MaintenanceAction.RestoreDatabase: {
return this.runRestoreDatabase(action);
}
}
}
async runRestoreDatabase(action: SetMaintenanceModeDto) {
const lock = await this.databaseRepository.tryLock(DatabaseLock.MaintenanceOperation);
if (!lock) {
return;
@@ -252,6 +252,9 @@ const getEnv = (): EnvData => {
vectorExtension = DatabaseExtension.VectorChord;
break;
}
case undefined: {
break;
}
}
return {
+3 -1
View File
@@ -478,8 +478,10 @@ export class MediaRepository {
case 'av1': {
return this.parseEnum(Av1Profile, profile);
}
default: {
return null;
}
}
return null;
}
private compareStreams(a: FfprobeStream, b: FfprobeStream): number {
@@ -163,6 +163,9 @@ export class DatabaseBackupService {
);
switch (bin) {
case 'pg_dump': {
break;
}
case 'pg_dumpall': {
args.push('--database');
break;
+2
View File
@@ -257,6 +257,8 @@ export class JobService extends BaseService {
}
break;
}
// no default
}
}
}
+3
View File
@@ -498,6 +498,9 @@ export class LibraryService extends BaseService {
const stat = stats[i];
const action = this.checkExistingAsset(asset, stat);
switch (action) {
case AssetSyncResult.DO_NOTHING: {
break;
}
case AssetSyncResult.OFFLINE: {
if (asset.status === AssetStatus.Trashed) {
trashedAssetIdsToOffline.push(asset.id);
+3 -1
View File
@@ -1138,7 +1138,9 @@ export class MetadataService extends BaseService {
case 3: {
return ExifOrientation.Rotate90CW;
}
default: {
return null;
}
}
return null;
}
}