@@ -16,6 +16,17 @@ import IFileDTO from '../Models/IFileDTO';
16
16
import { validate } from 'uuid' ;
17
17
import { getRequestContext } from '../../../Shared/Presentation/Shared/RequestContext' ;
18
18
import IFilesystem from '../../../Shared/Infrastructure/Filesystem/IFilesystem' ;
19
+ // @ts -ignore
20
+ import { CWebp } from 'cwebp' ;
21
+ import IFileMultipart from '../Entities/IFileMultipart' ;
22
+ import FileMultipartOptimizeDTO from '../../Presentation/Requests/FileMultipartOptimizeDTO' ;
23
+ import FileBase64OptimizeDTO from '../../Presentation/Requests/FileBase64OptimizeDTO' ;
24
+ import * as fs from 'fs' ;
25
+ import FileUpdateMultipartPayload from '../Payloads/FileUpdateMultipartPayload' ;
26
+ import FileUpdateMultipartOptimizeDTO from '../../Presentation/Requests/FileUpdateMultipartOptimizeDTO' ;
27
+ import FileUpdateBase64Payload from '../Payloads/FileUpdateBase64Payload' ;
28
+ import FileUpdateBase64OptimizeDTO from '../../Presentation/Requests/FileUpdateBase64OptimizeDTO' ;
29
+ import FilePayload from '../Payloads/FilePayload' ;
19
30
20
31
class FileService
21
32
{
@@ -59,6 +70,14 @@ class FileService
59
70
return await this . repository . save ( file ) ;
60
71
}
61
72
73
+ async update ( file : IFileDomain , payload : FilePayload ) : Promise < IFileDomain >
74
+ {
75
+ file . originalName = payload . originalName ;
76
+ file . setName ( payload . isOriginalName ) ;
77
+
78
+ return await this . persist ( file , payload ) ;
79
+ }
80
+
62
81
async uploadFileBase64 ( file : IFileDomain , payload : FileBase64RepPayload ) : Promise < any >
63
82
{
64
83
await this . fileSystem . uploadFileByBuffer ( file , payload . base64 ) ;
@@ -130,6 +149,63 @@ class FileService
130
149
void await this . fileSystem . removeObjects ( file ) ;
131
150
return file ;
132
151
}
152
+
153
+ private async getFileMultipartOptimized ( payload : FileMultipartRepPayload ) : Promise < IFileMultipart >
154
+ {
155
+ const encoder = CWebp ( payload . file . path ) ;
156
+ const newPath = payload . file . path . replace ( payload . extension , 'webp' ) ;
157
+ await encoder . write ( newPath ) ;
158
+
159
+ return {
160
+ fieldname : payload . file . fieldname ,
161
+ originalname : payload . file . originalname . replace ( payload . extension , 'webp' ) ,
162
+ encoding : payload . file . encoding ,
163
+ mimetype : 'image/webp' ,
164
+ destination : payload . file . destination ,
165
+ filename : payload . file . filename . replace ( payload . extension , 'webp' ) ,
166
+ path : newPath ,
167
+ size : payload . size
168
+ } ;
169
+ }
170
+
171
+ private async getFileBase64Optimized ( payload : FileBase64RepPayload ) : Promise < string >
172
+ {
173
+ const buffer = Buffer . from ( payload . base64 , 'base64' ) ;
174
+ const encoder = CWebp ( buffer ) ;
175
+ const newPath = '/tmp/converted.webp' ;
176
+ await encoder . write ( newPath ) ;
177
+
178
+ const buff = fs . readFileSync ( newPath ) ;
179
+ return buff . toString ( 'base64' ) ;
180
+ }
181
+
182
+ async optimizeMultipartToUpload ( payload : FileMultipartRepPayload ) : Promise < FileMultipartRepPayload >
183
+ {
184
+ const file = await this . getFileMultipartOptimized ( payload ) ;
185
+
186
+ return new FileMultipartOptimizeDTO ( payload , file ) ;
187
+ }
188
+
189
+ async optimizeMultipartToUpdate ( payload : FileUpdateMultipartPayload ) : Promise < FileUpdateMultipartPayload >
190
+ {
191
+ const file = await this . getFileMultipartOptimized ( payload ) ;
192
+
193
+ return new FileUpdateMultipartOptimizeDTO ( payload , file ) ;
194
+ }
195
+
196
+ async optimizeBase64ToUpload ( payload : FileBase64RepPayload ) : Promise < FileBase64RepPayload >
197
+ {
198
+ const base64data = await this . getFileBase64Optimized ( payload ) ;
199
+
200
+ return new FileBase64OptimizeDTO ( payload , base64data ) ;
201
+ }
202
+
203
+ async optimizeBase64ToUpdate ( payload : FileUpdateBase64Payload ) : Promise < FileUpdateBase64Payload >
204
+ {
205
+ const base64data = await this . getFileBase64Optimized ( payload ) ;
206
+
207
+ return new FileUpdateBase64OptimizeDTO ( payload , base64data ) ;
208
+ }
133
209
}
134
210
135
211
export default FileService ;
0 commit comments