| Total Complexity | 2 |
| Complexity/F | 2 |
| Lines of Code | 33 |
| Function Count | 1 |
| Duplicated Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
| 1 | import * as fs from 'fs'; |
||
| 2 | import * as shortid from 'shortid'; |
||
| 3 | import {Injectable, Inject} from '@nestjs/common'; |
||
| 4 | import {IFileStorage} from 'src/Application/IFileStorage'; |
||
| 5 | import {IUploadedFile} from 'src/Domain/File/IUploadedFile'; |
||
| 6 | import {FileDirectoryStrategy} from 'src/Domain/File/Strategy/FileDirectoryStrategy'; |
||
| 7 | import {IDateUtils} from 'src/Application/IDateUtils'; |
||
| 8 | |||
| 9 | @Injectable() |
||
| 10 | export class LocalFileStorageAdapter implements IFileStorage { |
||
| 11 | constructor( |
||
| 12 | @Inject('IDateUtils') |
||
| 13 | private readonly dateUtils: IDateUtils, |
||
| 14 | private readonly fileDirectoryStrategy: FileDirectoryStrategy |
||
| 15 | ) {} |
||
| 16 | |||
| 17 | public async upload(file: IUploadedFile): Promise<string> { |
||
| 18 | const fileName = `${shortid()}_${file.originalname}`; |
||
| 19 | const directory = await this.fileDirectoryStrategy.location( |
||
| 20 | this.dateUtils.getCurrentDate() |
||
| 21 | ); |
||
| 22 | const relativeDirectory = `${__dirname}/../../../../${directory}`; |
||
| 23 | |||
| 24 | if (!fs.existsSync(relativeDirectory)) { |
||
| 25 | fs.mkdirSync(relativeDirectory, {recursive: true}); |
||
| 26 | } |
||
| 27 | |||
| 28 | fs.writeFileSync(`${relativeDirectory}/${fileName}`, file.buffer); |
||
| 29 | |||
| 30 | return fileName; |
||
| 31 | } |
||
| 32 | } |
||
| 33 |