@@ -24,25 +24,26 @@ export class ImagesService {
24
24
dto : ImageDto ,
25
25
) : Promise < string | null > {
26
26
const documentHasImage = document . imageKey != null ;
27
+ const newImageReceived = dto . data != null ;
27
28
28
- if ( dto . hasImage && ! documentHasImage ) {
29
- if ( ! dto . data ) {
30
- throw new BadRequestException (
31
- 'Malformed ImageDto, object does not have and image, data property expected' ,
32
- ) ;
33
- }
34
- return this . uploadBase64 ( dto . data ) ;
35
- } else if ( ! dto . hasImage && documentHasImage ) {
36
- await this . s3Service . deleteObject ( document . imageKey ) ;
37
- return null ;
38
- } else if ( dto . hasImage && documentHasImage && dto . data ) {
29
+ const shouldUploadImage = dto . hasImage && newImageReceived ;
30
+ const shouldDeleteImage = documentHasImage && ( shouldUploadImage || ! dto . hasImage ) ;
31
+
32
+ if ( shouldDeleteImage ) {
39
33
await this . s3Service . deleteObject ( document . imageKey ) ;
34
+ }
35
+ if ( shouldUploadImage ) {
40
36
return this . uploadBase64 ( dto . data ) ;
41
37
}
38
+ return null ;
39
+ }
40
+
41
+ private base64ToBuffer ( base64 : string ) {
42
+ return Buffer . from ( base64 . replace ( / ^ d a t a : i m a g e \/ \w + ; b a s e 6 4 , / , '' ) , 'base64' ) ;
42
43
}
43
44
44
45
private async uploadBase64 ( base64 : string ) {
45
- const buffer = Buffer . from ( base64 , 'base64' ) ;
46
+ const buffer = this . base64ToBuffer ( base64 ) ;
46
47
const key = await this . s3Service . uploadObject ( buffer ) ;
47
48
return key ;
48
49
}
0 commit comments