Completed
Push — master ( 509540...176e41 )
by Mathieu
25s queued 12s
created

server/src/Infrastructure/Adapter/LocalFileStorageAdapter.ts   A

Complexity

Total Complexity 2
Complexity/F 2

Size

Lines of Code 33
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 28
mnd 1
bc 1
fnc 1
dl 0
loc 33
bpm 1
cpm 2
noi 0
c 0
b 0
f 0
rs 10

1 Function

Rating   Name   Duplication   Size   Complexity  
A LocalFileStorageAdapter.upload 0 15 2
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