Selaa lähdekoodia

Implemented delete operation

Alex Tran 3 vuotta sitten
vanhempi
commit
df2a63c02e

+ 17 - 2
server/src/api-v1/asset/asset.controller.ts

@@ -22,7 +22,7 @@ import { AuthUserDto, GetAuthUser } from '../../decorators/auth-user.decorator';
 import { CreateAssetDto } from './dto/create-asset.dto';
 import { CreateAssetDto } from './dto/create-asset.dto';
 import { ServeFileDto } from './dto/serve-file.dto';
 import { ServeFileDto } from './dto/serve-file.dto';
 import { AssetOptimizeService } from '../../modules/image-optimize/image-optimize.service';
 import { AssetOptimizeService } from '../../modules/image-optimize/image-optimize.service';
-import { AssetType } from './entities/asset.entity';
+import { AssetEntity, AssetType } from './entities/asset.entity';
 import { GetAllAssetQueryDto } from './dto/get-all-asset-query.dto';
 import { GetAllAssetQueryDto } from './dto/get-all-asset-query.dto';
 import { Response as Res } from 'express';
 import { Response as Res } from 'express';
 import { GetNewAssetQueryDto } from './dto/get-new-asset-query.dto';
 import { GetNewAssetQueryDto } from './dto/get-new-asset-query.dto';
@@ -98,6 +98,21 @@ export class AssetController {
 
 
   @Delete('/')
   @Delete('/')
   async deleteAssetById(@GetAuthUser() authUser: AuthUserDto, @Body(ValidationPipe) assetIds: DeleteAssetDto) {
   async deleteAssetById(@GetAuthUser() authUser: AuthUserDto, @Body(ValidationPipe) assetIds: DeleteAssetDto) {
-    return this.assetService.deleteAssetById(authUser, assetIds);
+    const deleteAssetList: AssetEntity[] = [];
+
+    assetIds.ids.forEach(async (id) => {
+      const assets = await this.assetService.getAssetById(authUser, id);
+      deleteAssetList.push(assets);
+    });
+
+    const result = await this.assetService.deleteAssetById(authUser, assetIds);
+
+    result.forEach((res) => {
+      deleteAssetList.filter((a) => a.id == res.id && res.status == 'success');
+    });
+
+    await this.backgroundTaskService.deleteFileOnDisk(deleteAssetList);
+
+    return result;
   }
   }
 }
 }

+ 20 - 0
server/src/modules/background-task/background-task.processor.ts

@@ -6,6 +6,7 @@ import { AssetEntity } from '../../api-v1/asset/entities/asset.entity';
 import { ConfigService } from '@nestjs/config';
 import { ConfigService } from '@nestjs/config';
 import exifr from 'exifr';
 import exifr from 'exifr';
 import { readFile } from 'fs/promises';
 import { readFile } from 'fs/promises';
+import fs from 'fs';
 import { Logger } from '@nestjs/common';
 import { Logger } from '@nestjs/common';
 import { ExifEntity } from '../../api-v1/asset/entities/exif.entity';
 import { ExifEntity } from '../../api-v1/asset/entities/exif.entity';
 
 
@@ -56,4 +57,23 @@ export class BackgroundTaskProcessor {
       Logger.error(`Error extracting EXIF ${e.toString()}`, 'extractExif');
       Logger.error(`Error extracting EXIF ${e.toString()}`, 'extractExif');
     }
     }
   }
   }
+
+  @Process('delete-file-on-disk')
+  async deleteFileOnDisk(job) {
+    const { assets }: { assets: AssetEntity[] } = job.data;
+
+    assets.forEach(async (asset) => {
+      fs.unlink(asset.originalPath, (err) => {
+        if (err) {
+          console.log('error deleting ', asset.originalPath);
+        }
+      });
+
+      fs.unlink(asset.resizePath, (err) => {
+        if (err) {
+          console.log('error deleting ', asset.originalPath);
+        }
+      });
+    });
+  }
 }
 }

+ 11 - 1
server/src/modules/background-task/background-task.service.ts

@@ -12,7 +12,7 @@ export class BackgroundTaskService {
   ) {}
   ) {}
 
 
   async extractExif(savedAsset: AssetEntity, fileName: string, fileSize: number) {
   async extractExif(savedAsset: AssetEntity, fileName: string, fileSize: number) {
-    const job = await this.backgroundTaskQueue.add(
+    await this.backgroundTaskQueue.add(
       'extract-exif',
       'extract-exif',
       {
       {
         savedAsset,
         savedAsset,
@@ -22,4 +22,14 @@ export class BackgroundTaskService {
       { jobId: randomUUID() },
       { jobId: randomUUID() },
     );
     );
   }
   }
+
+  async deleteFileOnDisk(assets: AssetEntity[]) {
+    await this.backgroundTaskQueue.add(
+      'delete-file-on-disk',
+      {
+        assets,
+      },
+      { jobId: randomUUID() },
+    );
+  }
 }
 }