Passed
Pull Request — master (#109)
by Mathieu
01:25
created

server/src/Application/HumanResource/Holiday/Command/RefuseHolidayCommandHandler.ts   A

Complexity

Total Complexity 3
Complexity/F 3

Size

Lines of Code 44
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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

1 Function

Rating   Name   Duplication   Size   Complexity  
A RefuseHolidayCommandHandler.execute 0 23 3
1
import {Inject} from '@nestjs/common';
2
import {CommandHandler} from '@nestjs/cqrs';
3
import {RefuseHolidayCommand} from './RefuseHolidayCommand';
4
import {IHolidayRepository} from 'src/Domain/HumanResource/Holiday/Repository/IHolidayRepository';
5
import {HolidayNotFoundException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayNotFoundException';
6
import {IDateUtils} from 'src/Application/IDateUtils';
7
import {HolidayCantBeModeratedException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayCantBeModeratedException';
8
import {CanHolidayBeModerated} from 'src/Domain/HumanResource/Holiday/Specification/CanHolidayBeModerated';
9
10
@CommandHandler(RefuseHolidayCommand)
11
export class RefuseHolidayCommandHandler {
12
  constructor(
13
    @Inject('IHolidayRepository')
14
    private readonly holidayRepository: IHolidayRepository,
15
    @Inject('IDateUtils')
16
    private readonly dateUtils: IDateUtils,
17
    private readonly canHolidayBeModerated: CanHolidayBeModerated
18
  ) {}
19
20
  public async execute(command: RefuseHolidayCommand): Promise<string> {
21
    const {moderator, id, moderationComment} = command;
22
23
    const holiday = await this.holidayRepository.findOneById(id);
24
    if (!holiday) {
25
      throw new HolidayNotFoundException();
26
    }
27
28
    if (
29
      false === this.canHolidayBeModerated.isSatisfiedBy(holiday, moderator)
30
    ) {
31
      throw new HolidayCantBeModeratedException();
32
    }
33
34
    holiday.refuse(
35
      moderator,
36
      this.dateUtils.getCurrentDateToISOString(),
37
      moderationComment
38
    );
39
    await this.holidayRepository.save(holiday);
40
41
    return holiday.getId();
42
  }
43
}
44