immich/server/apps/immich/src/api-v1/asset/response-dto/asset-response.dto.ts

40 lines
1.2 KiB
TypeScript
Raw Normal View History

Refactor API for albums feature (#155) * Rename "shared" to "album" Prepare moving "SharedAlbums" to "Albums" * Update server album API endpoints * Update mobile app album endpoints Also add `putRequest` to mobile network.service * Add GET album collection filter - allow to filter by owner = 'mine' | 'their' - make sharedWithUserIds no longer required when creating an album * Rename remaining variables to "album" * Add ParseMeUUIDPipe to validate uuid or `me` * Add album params validation * Update todo in mobile album service. * Setup e2e testing * Add user e2e tests * Rename database host env variable to DB_HOST * Add some `Album` e2e tests Also fix issues found with the tests * Force push (try to recover DB_HOST env) * Rename db host env variable to `DB_HOSTNAME` * Remove unnecessary `initDb` from test-utils The current database.config is running the migrations: `migrationsRun: true` * Remove `initDb` usage from album e2e test * Update GET albums filter to `shared` - add filter by all / shared / not shared - add response DTOs - add GET albums e2e tests * Update album e2e tests for user.service changes * Update mobile app to use album response DTOs * Refactor album-service DB into album-registry - DB logic refactored into album-repository making it easier to test - add some album-service unit tests - add `clearMocks` to jest configuration * Finish implementing album.service unit tests * Rename response DTO Make them consistent with rest of the project naming * Update debug log messages in mobile network service * Rename table `shared_albums` to `albums` * Rename table `asset_shared_album` * Rename Albums `sharedAssets` to `assets` * Update tests to match updated "delete" response * Fixed asset cannot be compared in Set by adding Equatable package * Remove hero effect to fixed janky animation Co-authored-by: Alex <alex.tran1502@gmail.com>
2022-06-18 17:56:36 +02:00
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity';
import { ExifResponseDto, mapExif } from './exif-response.dto';
import { SmartInfoResponseDto, mapSmartInfo } from './smart-info-response.dto';
export interface AssetResponseDto {
id: string;
deviceAssetId: string;
ownerId: string;
deviceId: string;
type: AssetType;
originalPath: string;
resizePath: string | null;
createdAt: string;
modifiedAt: string;
isFavorite: boolean;
mimeType: string | null;
duration: string | null;
exifInfo?: ExifResponseDto;
smartInfo?: SmartInfoResponseDto;
}
export function mapAsset(entity: AssetEntity): AssetResponseDto {
return {
id: entity.id,
deviceAssetId: entity.deviceAssetId,
ownerId: entity.userId,
deviceId: entity.deviceId,
type: entity.type,
originalPath: entity.originalPath,
resizePath: entity.resizePath,
createdAt: entity.createdAt,
modifiedAt: entity.modifiedAt,
isFavorite: entity.isFavorite,
mimeType: entity.mimeType,
duration: entity.duration,
exifInfo: entity.exifInfo ? mapExif(entity.exifInfo) : undefined,
smartInfo: entity.smartInfo ? mapSmartInfo(entity.smartInfo) : undefined,
};
}