Browse Source

added delete assets endpoint

Alex Tran 3 years ago
parent
commit
efeab77a4e

+ 8 - 8
server/src/api-v1/asset/asset.controller.ts

@@ -12,27 +12,22 @@ import {
   Query,
   Response,
   Headers,
-  BadRequestException,
+  Delete,
 } from '@nestjs/common';
 import { JwtAuthGuard } from '../../modules/immich-jwt/guards/jwt-auth.guard';
 import { AssetService } from './asset.service';
-import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
+import { FilesInterceptor } from '@nestjs/platform-express';
 import { multerOption } from '../../config/multer-option.config';
 import { AuthUserDto, GetAuthUser } from '../../decorators/auth-user.decorator';
 import { CreateAssetDto } from './dto/create-asset.dto';
-import { createReadStream } from 'fs';
 import { ServeFileDto } from './dto/serve-file.dto';
 import { AssetOptimizeService } from '../../modules/image-optimize/image-optimize.service';
 import { AssetType } from './entities/asset.entity';
 import { GetAllAssetQueryDto } from './dto/get-all-asset-query.dto';
 import { Response as Res } from 'express';
-import { promisify } from 'util';
-import { stat } from 'fs';
-import { pipeline } from 'stream';
 import { GetNewAssetQueryDto } from './dto/get-new-asset-query.dto';
 import { BackgroundTaskService } from '../../modules/background-task/background-task.service';
-
-const fileInfo = promisify(stat);
+import { DeleteAssetDto } from './dto/delete-asset.dto';
 
 @UseGuards(JwtAuthGuard)
 @Controller('asset')
@@ -95,4 +90,9 @@ export class AssetController {
   async getAssetById(@GetAuthUser() authUser: AuthUserDto, @Param('assetId') assetId) {
     return this.assetService.getAssetById(authUser, assetId);
   }
+
+  @Delete('/')
+  async deleteAssetById(@GetAuthUser() authUser: AuthUserDto, @Body(ValidationPipe) assetIds: DeleteAssetDto) {
+    return this.assetService.deleteAssetById(authUser, assetIds);
+  }
 }

+ 28 - 1
server/src/api-v1/asset/asset.service.ts

@@ -5,13 +5,14 @@ import { AuthUserDto } from '../../decorators/auth-user.decorator';
 import { CreateAssetDto } from './dto/create-asset.dto';
 import { UpdateAssetDto } from './dto/update-asset.dto';
 import { AssetEntity, AssetType } from './entities/asset.entity';
-import _ from 'lodash';
+import _, { result } from 'lodash';
 import { GetAllAssetQueryDto } from './dto/get-all-asset-query.dto';
 import { GetAllAssetReponseDto } from './dto/get-all-asset-response.dto';
 import { 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';
 
 const fileInfo = promisify(stat);
 
@@ -198,4 +199,30 @@ export class AssetService {
       }
     }
   }
+
+  public async deleteAssetById(authUser: AuthUserDto, assetIds: DeleteAssetDto) {
+    let result = [];
+
+    const target = assetIds.ids;
+    for (let assetId of target) {
+      const res = await this.assetRepository.delete({
+        id: assetId,
+        userId: authUser.id,
+      });
+
+      if (res.affected) {
+        result.push({
+          id: assetId,
+          status: 'success',
+        });
+      } else {
+        result.push({
+          id: assetId,
+          status: 'failed',
+        });
+      }
+    }
+
+    return result;
+  }
 }

+ 6 - 0
server/src/api-v1/asset/dto/delete-asset.dto.ts

@@ -0,0 +1,6 @@
+import { IsNotEmpty } from 'class-validator';
+
+export class DeleteAssetDto {
+  @IsNotEmpty()
+  ids: string[];
+}