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

RefuseHolidayCommandHandler   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 25
dl 0
loc 27
c 0
b 0
f 0
rs 10

1 Function

Rating   Name   Duplication   Size   Complexity  
A execute 0 17 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 {CanHolidayBeRefused} from 'src/Domain/HumanResource/Holiday/Specification/CanHolidayBeRefused';
8
import {HolidayCantBeRefusedException} from 'src/Domain/HumanResource/Holiday/Exception/HolidayCantBeRefusedException';
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 canHolidayBeRefused: CanHolidayBeRefused
18
  ) {}
19
20
  public async execute(command: RefuseHolidayCommand): Promise<string> {
21
    const {user, id} = command;
22
23
    const holiday = await this.holidayRepository.findOneById(id);
24
    if (!holiday) {
25
      throw new HolidayNotFoundException();
26
    }
27
28
    if (false === this.canHolidayBeRefused.isSatisfiedBy(holiday, user)) {
29
      throw new HolidayCantBeRefusedException();
30
    }
31
32
    holiday.refuse(user, this.dateUtils.getCurrentDate().toISOString());
33
    await this.holidayRepository.save(holiday);
34
35
    return holiday.getId();
36
  }
37
}
38