refactor(server): use kysely (#12857)
This commit is contained in:
@@ -97,10 +97,19 @@ const mapStack = (entity: AssetEntity) => {
|
||||
return {
|
||||
id: entity.stack.id,
|
||||
primaryAssetId: entity.stack.primaryAssetId,
|
||||
assetCount: entity.stack.assetCount ?? entity.stack.assets.length,
|
||||
assetCount: entity.stack.assetCount ?? entity.stack.assets.length + 1,
|
||||
};
|
||||
};
|
||||
|
||||
// if an asset is jsonified in the DB before being returned, its buffer fields will be hex-encoded strings
|
||||
const hexOrBufferToBase64 = (encoded: string | Buffer) => {
|
||||
if (typeof encoded === 'string') {
|
||||
return Buffer.from(encoded.slice(2), 'hex').toString('base64');
|
||||
}
|
||||
|
||||
return encoded.toString('base64');
|
||||
};
|
||||
|
||||
export function mapAsset(entity: AssetEntity, options: AssetMapOptions = {}): AssetResponseDto {
|
||||
const { stripMetadata = false, withStack = false } = options;
|
||||
|
||||
@@ -129,7 +138,7 @@ export function mapAsset(entity: AssetEntity, options: AssetMapOptions = {}): As
|
||||
originalPath: entity.originalPath,
|
||||
originalFileName: entity.originalFileName,
|
||||
originalMimeType: mimeTypes.lookup(entity.originalFileName),
|
||||
thumbhash: entity.thumbhash?.toString('base64') ?? null,
|
||||
thumbhash: entity.thumbhash ? hexOrBufferToBase64(entity.thumbhash) : null,
|
||||
fileCreatedAt: entity.fileCreatedAt,
|
||||
fileModifiedAt: entity.fileModifiedAt,
|
||||
localDateTime: entity.localDateTime,
|
||||
@@ -143,7 +152,7 @@ export function mapAsset(entity: AssetEntity, options: AssetMapOptions = {}): As
|
||||
tags: entity.tags?.map((tag) => mapTag(tag)),
|
||||
people: peopleWithFaces(entity.faces),
|
||||
unassignedFaces: entity.faces?.filter((face) => !face.person).map((a) => mapFacesWithoutPerson(a)),
|
||||
checksum: entity.checksum.toString('base64'),
|
||||
checksum: hexOrBufferToBase64(entity.checksum),
|
||||
stack: withStack ? mapStack(entity) : undefined,
|
||||
isOffline: entity.isOffline,
|
||||
hasMetadata: true,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { IsNotEmpty } from 'class-validator';
|
||||
import { groupBy, sortBy } from 'lodash';
|
||||
import { AssetResponseDto } from 'src/dtos/asset-response.dto';
|
||||
import { ValidateUUID } from 'src/validation';
|
||||
|
||||
@@ -13,16 +12,3 @@ export class ResolveDuplicatesDto {
|
||||
@ValidateUUID({ each: true })
|
||||
assetIds!: string[];
|
||||
}
|
||||
|
||||
export function mapDuplicateResponse(assets: AssetResponseDto[]): DuplicateResponseDto[] {
|
||||
const result = [];
|
||||
|
||||
const grouped = groupBy(assets, (a) => a.duplicateId);
|
||||
|
||||
for (const [duplicateId, unsortedAssets] of Object.entries(grouped)) {
|
||||
const assets = sortBy(unsortedAssets, (asset) => asset.localDateTime);
|
||||
result.push({ duplicateId, assets });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ export class MetadataSearchDto extends RandomSearchDto {
|
||||
|
||||
@IsEnum(AssetOrder)
|
||||
@Optional()
|
||||
@ApiProperty({ enumName: 'AssetOrder', enum: AssetOrder })
|
||||
@ApiProperty({ enumName: 'AssetOrder', enum: AssetOrder, default: AssetOrder.DESC })
|
||||
order?: AssetOrder;
|
||||
|
||||
@IsInt()
|
||||
|
||||
Reference in New Issue
Block a user