|
|
|
|
@ -1,4 +1,20 @@
|
|
|
|
|
import { CuratedLocationsResponseDto } from './response-dto/curated-locations-response.dto';
|
|
|
|
|
import {
|
|
|
|
|
AssetResponseDto,
|
|
|
|
|
getLivePhotoMotionFilename,
|
|
|
|
|
IAccessRepository,
|
|
|
|
|
ICryptoRepository,
|
|
|
|
|
IJobRepository,
|
|
|
|
|
ImmichReadStream,
|
|
|
|
|
ISharedLinkRepository,
|
|
|
|
|
IStorageRepository,
|
|
|
|
|
JobName,
|
|
|
|
|
mapAsset,
|
|
|
|
|
mapAssetWithoutExif,
|
|
|
|
|
mapSharedLink,
|
|
|
|
|
SharedLinkCore,
|
|
|
|
|
SharedLinkResponseDto,
|
|
|
|
|
} from '@app/domain';
|
|
|
|
|
import { AssetEntity, AssetType, SharedLinkType } from '@app/infra/entities';
|
|
|
|
|
import {
|
|
|
|
|
BadRequestException,
|
|
|
|
|
ForbiddenException,
|
|
|
|
|
@ -10,63 +26,49 @@ import {
|
|
|
|
|
StreamableFile,
|
|
|
|
|
} from '@nestjs/common';
|
|
|
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
|
|
|
import { QueryFailedError, Repository } from 'typeorm';
|
|
|
|
|
import { AuthUserDto } from '../../decorators/auth-user.decorator';
|
|
|
|
|
import { AssetEntity, AssetType, SharedLinkType } from '@app/infra/entities';
|
|
|
|
|
import { constants, createReadStream, stat } from 'fs';
|
|
|
|
|
import { ServeFileDto } from './dto/serve-file.dto';
|
|
|
|
|
import { Response as Res } from 'express';
|
|
|
|
|
import { promisify } from 'util';
|
|
|
|
|
import { DeleteAssetDto } from './dto/delete-asset.dto';
|
|
|
|
|
import { SearchAssetDto } from './dto/search-asset.dto';
|
|
|
|
|
import { constants, createReadStream, stat } from 'fs';
|
|
|
|
|
import fs from 'fs/promises';
|
|
|
|
|
import { QueryFailedError, Repository } from 'typeorm';
|
|
|
|
|
import { promisify } from 'util';
|
|
|
|
|
import { AuthUserDto } from '../../decorators/auth-user.decorator';
|
|
|
|
|
import { DownloadService } from '../../modules/download/download.service';
|
|
|
|
|
import { AddAssetsDto } from '../album/dto/add-assets.dto';
|
|
|
|
|
import { RemoveAssetsDto } from '../album/dto/remove-assets.dto';
|
|
|
|
|
import { IAssetRepository } from './asset-repository';
|
|
|
|
|
import { AssetCore } from './asset.core';
|
|
|
|
|
import { AssetBulkUploadCheckDto } from './dto/asset-check.dto';
|
|
|
|
|
import { AssetSearchDto } from './dto/asset-search.dto';
|
|
|
|
|
import { CheckDuplicateAssetDto } from './dto/check-duplicate-asset.dto';
|
|
|
|
|
import { CuratedObjectsResponseDto } from './response-dto/curated-objects-response.dto';
|
|
|
|
|
import {
|
|
|
|
|
AssetResponseDto,
|
|
|
|
|
getLivePhotoMotionFilename,
|
|
|
|
|
IAccessRepository,
|
|
|
|
|
ImmichReadStream,
|
|
|
|
|
IStorageRepository,
|
|
|
|
|
JobName,
|
|
|
|
|
mapAsset,
|
|
|
|
|
mapAssetWithoutExif,
|
|
|
|
|
} from '@app/domain';
|
|
|
|
|
import { CheckExistingAssetsDto } from './dto/check-existing-assets.dto';
|
|
|
|
|
import { CreateAssetsShareLinkDto } from './dto/create-asset-shared-link.dto';
|
|
|
|
|
import { CreateAssetDto, UploadFile } from './dto/create-asset.dto';
|
|
|
|
|
import { DeleteAssetResponseDto, DeleteAssetStatusEnum } from './response-dto/delete-asset-response.dto';
|
|
|
|
|
import { DeleteAssetDto } from './dto/delete-asset.dto';
|
|
|
|
|
import { DownloadFilesDto } from './dto/download-files.dto';
|
|
|
|
|
import { DownloadDto } from './dto/download-library.dto';
|
|
|
|
|
import { GetAssetByTimeBucketDto } from './dto/get-asset-by-time-bucket.dto';
|
|
|
|
|
import { GetAssetCountByTimeBucketDto } from './dto/get-asset-count-by-time-bucket.dto';
|
|
|
|
|
import { GetAssetThumbnailDto, GetAssetThumbnailFormatEnum } from './dto/get-asset-thumbnail.dto';
|
|
|
|
|
import { CheckDuplicateAssetResponseDto } from './response-dto/check-duplicate-asset-response.dto';
|
|
|
|
|
import { IAssetRepository } from './asset-repository';
|
|
|
|
|
import { SearchAssetDto } from './dto/search-asset.dto';
|
|
|
|
|
import { SearchPropertiesDto } from './dto/search-properties.dto';
|
|
|
|
|
import { ServeFileDto } from './dto/serve-file.dto';
|
|
|
|
|
import { UpdateAssetDto } from './dto/update-asset.dto';
|
|
|
|
|
import {
|
|
|
|
|
AssetBulkUploadCheckResponseDto,
|
|
|
|
|
AssetRejectReason,
|
|
|
|
|
AssetUploadAction,
|
|
|
|
|
} from './response-dto/asset-check-response.dto';
|
|
|
|
|
import {
|
|
|
|
|
AssetCountByTimeBucketResponseDto,
|
|
|
|
|
mapAssetCountByTimeBucket,
|
|
|
|
|
} from './response-dto/asset-count-by-time-group-response.dto';
|
|
|
|
|
import { GetAssetCountByTimeBucketDto } from './dto/get-asset-count-by-time-bucket.dto';
|
|
|
|
|
import { GetAssetByTimeBucketDto } from './dto/get-asset-by-time-bucket.dto';
|
|
|
|
|
import { AssetCountByUserIdResponseDto } from './response-dto/asset-count-by-user-id-response.dto';
|
|
|
|
|
import { AssetCore } from './asset.core';
|
|
|
|
|
import { CheckExistingAssetsDto } from './dto/check-existing-assets.dto';
|
|
|
|
|
import { CheckExistingAssetsResponseDto } from './response-dto/check-existing-assets-response.dto';
|
|
|
|
|
import { UpdateAssetDto } from './dto/update-asset.dto';
|
|
|
|
|
import { AssetFileUploadResponseDto } from './response-dto/asset-file-upload-response.dto';
|
|
|
|
|
import { ICryptoRepository, IJobRepository } from '@app/domain';
|
|
|
|
|
import { DownloadService } from '../../modules/download/download.service';
|
|
|
|
|
import { DownloadDto } from './dto/download-library.dto';
|
|
|
|
|
import { SharedLinkCore } from '@app/domain';
|
|
|
|
|
import { ISharedLinkRepository } from '@app/domain';
|
|
|
|
|
import { DownloadFilesDto } from './dto/download-files.dto';
|
|
|
|
|
import { CreateAssetsShareLinkDto } from './dto/create-asset-shared-link.dto';
|
|
|
|
|
import { mapSharedLink, SharedLinkResponseDto } from '@app/domain';
|
|
|
|
|
import { AssetSearchDto } from './dto/asset-search.dto';
|
|
|
|
|
import { AddAssetsDto } from '../album/dto/add-assets.dto';
|
|
|
|
|
import { RemoveAssetsDto } from '../album/dto/remove-assets.dto';
|
|
|
|
|
import { AssetBulkUploadCheckDto } from './dto/asset-check.dto';
|
|
|
|
|
import {
|
|
|
|
|
AssetUploadAction,
|
|
|
|
|
AssetRejectReason,
|
|
|
|
|
AssetBulkUploadCheckResponseDto,
|
|
|
|
|
} from './response-dto/asset-check-response.dto';
|
|
|
|
|
import { CheckDuplicateAssetResponseDto } from './response-dto/check-duplicate-asset-response.dto';
|
|
|
|
|
import { CheckExistingAssetsResponseDto } from './response-dto/check-existing-assets-response.dto';
|
|
|
|
|
import { CuratedLocationsResponseDto } from './response-dto/curated-locations-response.dto';
|
|
|
|
|
import { CuratedObjectsResponseDto } from './response-dto/curated-objects-response.dto';
|
|
|
|
|
import { DeleteAssetResponseDto, DeleteAssetStatusEnum } from './response-dto/delete-asset-response.dto';
|
|
|
|
|
|
|
|
|
|
const fileInfo = promisify(stat);
|
|
|
|
|
|
|
|
|
|
|